API REST & serveur MCP
UGC Pocket expose aux agents IA un serveur MCP sans compte ni clé : l'agent prépare un brouillon de campagne et le remet à l'utilisateur sous forme de lien. L'utilisateur le confirme, puis l'équipe UGC Pocket revient vers lui avec une proposition commerciale et rédige les scripts de la campagne. Rien n'est facturé et rien n'est montré aux créateurs avant qu'il accepte cette proposition.
Vue d'ensemble
| Serveur MCP | https://ugcpocket.com/mcp · Streamable HTTP, JSON-RPC 2.0, protocole 2025-06-18, sans authentification |
| Base REST | https://ugcpocket.com/api (seul GET /service-info est actif) |
| Spécification | /openapi.json (OpenAPI 3.1) |
| Plateformes | TikTok, Instagram |
| Devise | EUR, montants en centimes |
| Budget campagne | 200 000 à 10 000 000 centimes (2 000 € à 100 000 €) |
UGC Pocket fait montrer un produit dans des vidéos verticales courtes que des créateurs publient sur leurs propres comptes TikTok et Instagram, à travers des challenges rédigés par l'équipe UGC Pocket. Le prix est un forfait de campagne à partir de 2 000 €, précisé dans la proposition commerciale. Le budget_max_cents d'un brouillon est le forfait que l'utilisateur a en tête, à titre indicatif : le prix définitif figure dans la proposition. La marque ne fixe pas la rémunération des créateurs, c'est UGC Pocket qui la fixe.
Démarrage
Aucune inscription, aucune clé : un agent peut appeler le serveur MCP directement.
- Ajouter
https://ugcpocket.com/mcpcomme serveur MCP HTTP dans le client (voir Serveur MCP). - Appeler
create_campaign_draftavec ce que l'utilisateur a dit de son produit. - Donner le
claim_urlrenvoyé à l'utilisateur, avec l'étape suivante (voir Après le brouillon).
Première requête
curl -X POST https://ugcpocket.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "create_campaign_draft",
"arguments": {
"title": "Lancement gamelle",
"brief": "Vidéo TikTok mettant en scène le produit…",
"target_categories": ["dog"],
"platforms": ["TikTok"],
"budget_max_cents": 350000,
"company": { "name": "…", "website": "…" },
"language": "fr"
}
}
}'
// result.structuredContent { "draft_id": "8b1f…", "claim_url": "https://app.ugcpocket.com/c/…", "expires_at": "…", "emailed": false, "next_step": "Give the claim_url to the user…" }
Authentification
Aucune. Le serveur MCP et GET /service-info s'appellent sans compte, sans clé API et sans en-tête Authorization. Il n'y a pas de clé à générer ni à demander à l'utilisateur : c'est lui qui confirme le brouillon, par un code reçu par e-mail.
API REST
Base https://ugcpocket.com/api. Les réponses sont en JSON ; les erreurs suivent l'enveloppe { "error": "code", "detail": "…" }. Pour créer un brouillon, utilisez le serveur MCP.
| Endpoint | État | Rôle |
|---|---|---|
GET/service-info | actif, sans auth | Descripteur du service. |
POST/estimate | en sommeil | Répond 410. |
POST/campaigns | en sommeil | Répond 410. |
GET/campaigns/{id} | en sommeil | Répond 410. |
Descripteur du service, sans authentification. GET / renvoie la même charge utile, identique à celle de l'outil MCP get_service_info. Champs : name, description, categories, platforms (TikTok, Instagram), currency (EUR), budget_unit (cents), min_campaign_budget_cents (200000), max_campaign_budget_cents (10000000), pricing (texte), order_model (draft_then_commercial_proposal), how_it_works (liste de textes), tools (["get_service_info","create_campaign_draft"]), paused (texte), mcp, openapi, docs, contact (hello@logics-studio.com). À appeler en premier : c'est la source de vérité des énumérations.
Routes en sommeil. Elles répondent 410 avec le chemin qui fonctionne :
HTTP/1.1 410 Gone { "error": "paused", "detail": "…", "mcp": "https://ugcpocket.com/mcp", "docs": "https://ugcpocket.com/for-agents" }
Schéma du brouillon
Arguments de l'outil MCP create_campaign_draft. Il n'existe ni champ prestation, ni champ de rémunération des créateurs.
L'entrée est normalisée. Seuls un champ requis manquant, un brief trop court et un budget_max_cents sous le plancher renvoient une erreur. Le reste est corrigé en silence : title et brief sont tronqués à leur longueur maximale, les valeurs inconnues sont retirées de target_categories et platforms, objectives garde ses 6 premières entrées, un budget au-dessus du plafond est ramené à 10000000, et une deadline invalide ou passée est ignorée.
| Champ | Type | Détail |
|---|---|---|
titlerequis | string ≤ 120 | Titre de la campagne, par exemple le produit et l'angle. |
briefrequis | string ≤ 2000 | Ce qu'est le produit, à qui il s'adresse, ce que les vidéos doivent montrer. |
budget_max_centsrequis | integer | 200000 à 10000000 centimes d'euro (2 000 € à 100 000 €). Le forfait que l'utilisateur a en tête, à titre indicatif : le prix définitif figure dans la proposition commerciale. |
objectives | string[] ≤ 6 | Objectifs libres de la campagne. |
target_categories | enum[] | Catégories de créateurs dont l'audience correspond au produit. Voir les 22 catégories ci-dessous. |
platforms | enum[] | TikTok, Instagram. |
deadline | date | AAAA-MM-JJ, dans le futur. Toute autre valeur est ignorée. |
company | objet | name, website, description (une ligne sur ce que fait l'entreprise). Affiché sur la page de réclamation. |
email | string | Optionnel. L'e-mail de l'utilisateur : il reçoit aussi le lien de réclamation par e-mail. |
language | enum | fr ou en, langue de cet e-mail. |
Catégories
dogcatpetscarcookingcouplefamilykidsbusinessfinancepodcastsportwellnessbeautyfashiontechgaminghomegardendiytravellifestyle
Appelez get_service_info ou GET /service-info plutôt que de figer ces valeurs dans votre code.
Erreurs
Erreurs REST, dans l'enveloppe { "error", "detail" }. Le champ error est stable, detail est un message lisible qui peut changer.
| HTTP | error | Cause |
|---|---|---|
410 | paused | Route en sommeil (/estimate, /campaigns, /campaigns/{id}). La réponse donne aussi mcp et docs. |
404 | not_found | Route inconnue. |
Les erreurs du serveur MCP sont décrites dans Erreurs JSON-RPC.
Limites
| Limite | Valeur | Comportement au dépassement |
|---|---|---|
| Budget de campagne | 200 000 à 10 000 000 centimes | Sous le plancher : refus métier. Au-dessus du plafond : ramené à 10 000 000. |
| Durée de vie d'un brouillon | 7 jours | Le claim_url expire (expires_at). |
| Brouillons par adresse IP | limités par heure | Refus métier, à réessayer plus tard. |
Serveur MCP
Serveur MCP Streamable HTTP sur https://ugcpocket.com/mcp, JSON-RPC 2.0, protocole 2025-06-18, ugc-pocket-mcp. Sans authentification ni clé API. Transport JSON uniquement : le serveur n'émet pas de flux SSE, et un client qui n'accepte pas application/json reçoit 406. Seul POST est accepté.
{
"mcpServers": {
"ugc-pocket": {
"type": "http",
"url": "https://ugcpocket.com/mcp"
}
}
}
Installation en une étape. Claude Code :
claude mcp add --transport http ugc-pocket https://ugcpocket.com/mcp
- Cursor : ajouter UGC Pocket à Cursor
- Claude (web et bureau) : Réglages, Connecteurs, Ajouter un connecteur personnalisé, URL
https://ugcpocket.com/mcp
Découverte : le catalogue du domaine est sur /.well-known/ard.json (même contenu sur /.well-known/ai-catalog.json), la carte du serveur sur /mcp/server-card, et le serveur figure dans le registre MCP officiel sous le nom com.ugcpocket/ugc-pocket.
Outils
Exactement deux outils.
| Outil | Entrée | Rôle |
|---|---|---|
get_service_info | aucune | Descripteur du service, mêmes champs que GET /service-info. Lecture seule. |
create_campaign_draft | Schéma du brouillon | Crée un brouillon sans compte. Sortie : draft_id, claim_url (https://app.ugcpocket.com/c/<jeton>), expires_at (7 jours), emailed (booléen : le lien a aussi été envoyé à l'email fourni), next_step (ce qu'il faut dire à l'utilisateur). |
En sommeil, non listés : estimate_campaign, create_campaign_order, check_campaign_status, list_my_campaigns, submit_posted_video, list_my_deliverables. Les appeler renvoie une erreur qui oriente vers create_campaign_draft ou vers l'app.
Après le brouillon
- L'utilisateur ouvre le
claim_url: la campagne s'affiche sans connexion. - Il la confirme avec un code à 6 chiffres reçu par e-mail et laisse un numéro de téléphone (obligatoire).
- L'équipe UGC Pocket revient vers lui avec une proposition commerciale et rédige les scripts de la campagne.
Rien n'est facturé et rien n'est montré aux créateurs avant qu'il accepte cette proposition. Une fois la proposition acceptée, notre équipe publie les challenges, sélectionne les créateurs et relit chaque vidéo.
Erreurs JSON-RPC
Deux registres distincts, à ne pas confondre côté agent : une erreur de protocole est un objet error, un refus métier est un result avec isError: true et un message exploitable.
| Code | Cause |
|---|---|
-32000 | Méthode HTTP autre que POST (405), ou client qui n'accepte pas application/json (406). |
-32601 | Outil ou méthode inconnue. |
-32602 | Argument requis manquant. |
-32700 / -32600 | JSON illisible / requête JSON-RPC invalide. |
-32603 | Erreur interne. |
isError: true | Refus métier : brief trop court, budget sous le plancher, trop de brouillons dans l'heure, outil en sommeil. |
Ressources machine
| Ressource | Rôle |
|---|---|
/openapi.json | Spécification OpenAPI 3.1 de l'API REST. |
/llms.txt | Découverte et contexte produit lisibles par un LLM. |
/llms-full.txt | Version étendue. |
/.well-known/ard.json | Catalogue du domaine pour les agents (ARD / AI Catalog). |
/mcp/server-card | Carte du serveur MCP : nom, version, adresse, protocole. |
Question d'intégration : hello@logics-studio.com