Aller au contenu principal

API Marchés

Les marchés sont l'entité centrale de la plateforme de prédiction. Chaque marché représente une question avec deux résultats possibles ou plus, qui peuvent faire l'objet d'échanges.

Authentification : Toutes les routes de marché nécessitent l'en-tête X-Api-Key, sauf mention contraire.

Créer un marché

Crée un nouveau marché de prédiction.

POST /api/v1/markets

Corps de la requête :

ChampTypeRequisDescription
titlestringOuiQuestion/titre du marché
descriptionstringNonDescription détaillée
categoryIdstringNonUUID de la catégorie
imageUrlstringNonURL de l'image du marché
currencystringNonCode de devise (par défaut : USD). Doit être l'une des devises supportedCurrencies de l'opérateur.
tradingStartsAtstring (ISO 8601)NonDate d'ouverture des échanges
tradingEndsAtstring (ISO 8601)NonDate de clôture des échanges
outcomesarrayNonTableau d'objets résultat
metadataobjectNonMétadonnées JSON arbitraires

Objet résultat :

ChampTypeRequisDescription
namestringOuiNom du résultat (ex. : "Yes", "No")
descriptionstringNonDescription du résultat

Exemple :

curl -X POST https://polymarket.sandbox.playbatman.com/api/v1/markets \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"title": "Will Bitcoin exceed $100K by March 2026?",
"description": "Resolves YES if BTC/USD exceeds $100,000 at any point before March 31, 2026",
"categoryId": "uuid-of-crypto-category",
"currency": "KES",
"tradingStartsAt": "2026-02-20T00:00:00Z",
"tradingEndsAt": "2026-03-31T23:59:59Z",
"outcomes": [
{ "name": "Yes", "description": "Bitcoin exceeds $100K" },
{ "name": "No", "description": "Bitcoin does not exceed $100K" }
]
}'

Réponse (201 Created) :

{
"success": true,
"data": {
"id": "market-uuid",
"operatorId": "operator-uuid",
"categoryId": "category-uuid",
"title": "Will Bitcoin exceed $100K by March 2026?",
"description": "Resolves YES if BTC/USD exceeds $100,000...",
"imageUrl": null,
"status": "DRAFT",
"currency": "KES",
"tradingStartsAt": "2026-02-20T00:00:00.000Z",
"tradingEndsAt": "2026-03-31T23:59:59.000Z",
"resolvedAt": null,
"winningOutcomeId": null,
"resolutionSource": null,
"resolutionNotes": null,
"totalVolume": "0",
"totalTrades": 0,
"metadata": null,
"createdAt": "2026-02-18T22:00:00.000Z",
"updatedAt": "2026-02-18T22:00:00.000Z",
"outcomes": [
{
"id": "outcome-uuid-1",
"name": "Yes",
"description": "Bitcoin exceeds $100K",
"index": 0,
"createdAt": "2026-02-18T22:00:00.000Z",
"updatedAt": "2026-02-18T22:00:00.000Z"
},
{
"id": "outcome-uuid-2",
"name": "No",
"description": "Bitcoin does not exceed $100K",
"index": 1,
"createdAt": "2026-02-18T22:00:00.000Z",
"updatedAt": "2026-02-18T22:00:00.000Z"
}
],
"category": {
"id": "category-uuid",
"name": "Crypto",
"slug": "crypto"
}
}
}
Validation de la devise

Le champ currency doit correspondre à l'une des devises configurées dans la liste supportedCurrencies de l'opérateur. Si le compte de l'opérateur est configuré avec ["KES", "USD"], seules ces devises sont autorisées. Soumettre une devise non prise en charge renvoie une erreur 400 :

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Currency 'EUR' is not allowed. Supported currencies: KES, USD"
}
}

Obtenir un marché

Récupère un marché unique par son identifiant.

GET /api/v1/markets/{id}

Réponse : Même structure que la réponse de création de marché.

Lister les marchés

Liste les marchés associés à votre compte opérateur.

GET /api/v1/markets

Paramètres de requête :

ParamètreTypeDescription
categoryIdstringFiltrer par catégorie
statusstringStatuts séparés par des virgules (ex. : OPEN,CLOSED)
searchstringRechercher par titre
cursorstringCurseur de pagination
limitnumberTaille de page (par défaut : 20)

Exemple :

curl "https://polymarket.sandbox.playbatman.com/api/v1/markets?status=OPEN,UPCOMING&limit=10" \
-H "X-Api-Key: your-api-key"

Réponse :

{
"success": true,
"data": {
"markets": [ ... ],
"total": 42,
"hasMore": true,
"nextCursor": "cursor-value"
}
}

Mettre à jour un marché

Met à jour les détails d'un marché. Seuls les marchés ayant le statut DRAFT ou UPCOMING peuvent voir leur titre, leur description et leurs horaires de trading modifiés.

PATCH /api/v1/markets/{id}

Corps de la requête :

ChampTypeDescription
titlestringTitre mis à jour
descriptionstringDescription mise à jour
imageUrlstringURL d'image mise à jour
categoryIdstringCatégorie mise à jour
tradingStartsAtstring (ISO 8601)Heure de début mise à jour
tradingEndsAtstring (ISO 8601)Heure de fin mise à jour
metadataobjectMétadonnées mises à jour

Actions du cycle de vie d'un marché

Ouvrir un marché

Fait passer un marché de l'état DRAFT à OPEN (ou UPCOMING si tradingStartsAt est dans le futur).

POST /api/v1/markets/{id}/open

Suspendre un marché

Suspend temporairement les échanges sur un marché ouvert.

POST /api/v1/markets/{id}/suspend

Corps de la requête :

ChampTypeRequisDescription
reasonstringOuiRaison de la suspension

Reprendre un marché

Reprend les échanges sur un marché suspendu.

POST /api/v1/markets/{id}/resume

Clôturer un marché

Clôture un marché pour arrêter tous les échanges. Généralement effectué lorsque l'événement sous-jacent s'est produit.

POST /api/v1/markets/{id}/close

Résoudre un marché

Déclare le résultat gagnant pour un marché clôturé.

POST /api/v1/markets/{id}/resolve

Corps de la requête :

ChampTypeRequisDescription
winningOutcomeIdstringOuiUUID du résultat gagnant
resolutionSourcestringOuiSource de référence (ex. : "Official FIFA results")
resolutionNotesstringNonContexte supplémentaire

Exemple :

curl -X POST https://polymarket.sandbox.playbatman.com/api/v1/markets/{marketId}/resolve \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"winningOutcomeId": "outcome-uuid-1",
"resolutionSource": "CoinGecko BTC/USD price feed",
"resolutionNotes": "BTC hit $105,432 on March 15, 2026"
}'

Annuler un marché

Annule un marché. Tous les ordres ouverts sont annulés.

POST /api/v1/markets/{id}/cancel

Corps de la requête :

ChampTypeRequisDescription
reasonstringOuiRaison de l'annulation

Transitions de statut valides

DeVers
DRAFTOPEN, UPCOMING, CANCELLED
UPCOMINGOPEN, CANCELLED
OPENSUSPENDED, CLOSED, CANCELLED
SUSPENDEDOPEN, CLOSED, CANCELLED
CLOSEDRESOLVED, CANCELLED
RESOLVEDSETTLED