Aller au contenu principal

API Ordres

Les ordres constituent le mécanisme d'échange principal. Les opérateurs passent des ordres au nom de leurs joueurs. Le moteur de correspondance associe automatiquement les ordres d'achat et de vente compatibles.

Authentification : Toutes les routes nécessitent l'en-tête X-Api-Key.

Passer un ordre

Soumet un nouvel ordre au moteur de correspondance.

POST /api/v1/orders

Corps de la requête :

ChampTypeRequisDescription
marketIdstringOuiUUID du marché
outcomeIdstringOuiUUID du résultat
playerIdstringOuiIdentifiant du joueur défini par l'opérateur
sidestringOuiBUY ou SELL
typestringOuiMARKET ou LIMIT
sharesnumberOuiNombre de parts (min : 1, max : 100 000)
pricenumberConditionnelPrix de la part (requis pour les ordres LIMIT, plage : 0,01–0,99)
transactionIdstringNonRéférence/clé d'idempotence fournie par l'opérateur
expiresAtstring (ISO 8601)NonDate d'expiration de l'ordre
Validation du solde du joueur

Le moteur de prédiction ne vérifie pas les soldes des joueurs. Votre backend doit vérifier que le joueur peut se permettre l'ordre avant de le soumettre. Le coût d'un ordre BUY est shares * price pour les ordres LIMIT.

Exemple — Ordre d'achat à cours limité :

curl -X POST https://polymarket.sandbox.playbatman.com/api/v1/orders \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"marketId": "market-uuid",
"outcomeId": "outcome-uuid",
"playerId": "player-123",
"side": "BUY",
"type": "LIMIT",
"shares": 50,
"price": 0.65,
"transactionId": "op-txn-001"
}'

Réponse (201 Created) :

{
"success": true,
"data": {
"order": {
"id": "order-uuid",
"marketId": "market-uuid",
"outcomeId": "outcome-uuid",
"operatorId": "operator-uuid",
"playerId": "player-123",
"side": "BUY",
"type": "LIMIT",
"shares": "50",
"price": "0.65",
"filledShares": "30",
"avgFillPrice": "0.60",
"remainingShares": "20",
"status": "PARTIAL",
"transactionId": "op-txn-001",
"expiresAt": null,
"createdAt": "2026-02-18T22:00:00.000Z",
"updatedAt": "2026-02-18T22:00:00.000Z"
},
"trades": [
{
"id": "trade-uuid",
"marketId": "market-uuid",
"outcomeId": "outcome-uuid",
"buyOrderId": "order-uuid",
"sellOrderId": "counter-order-uuid",
"buyerOperatorId": "operator-uuid",
"sellerOperatorId": "other-operator-uuid",
"price": "0.60",
"shares": "30",
"buyerFee": "0.36",
"sellerFee": "0.36",
"createdAt": "2026-02-18T22:00:00.000Z"
}
],
"status": "PARTIAL",
"filledShares": "30",
"avgFillPrice": "0.60",
"remainingShares": "20"
}
}

Comportement de correspondance des ordres

Lorsque vous passez un ordre :

  1. LIMIT BUY — Correspond aux ordres de vente existants dont le prix est inférieur ou égal à votre prix limite, en commençant par le prix vendeur le plus bas. Les parts non appariées restent dans le carnet d'ordres.
  2. LIMIT SELL — Correspond aux ordres d'achat existants dont le prix est supérieur ou égal à votre prix limite, en commençant par l'offre la plus haute. Les parts non appariées restent dans le carnet d'ordres.
  3. MARKET BUY — Correspond aux meilleurs ordres de vente disponibles à n'importe quel prix jusqu'à ce que les parts demandées soient satisfaites ou que la liquidité soit épuisée.
  4. MARKET SELL — Correspond aux meilleurs ordres d'achat disponibles à n'importe quel prix jusqu'à ce que les parts demandées soient satisfaites ou que la liquidité soit épuisée.

Statuts des ordres

StatutDescription
PENDINGL'ordre est dans le carnet, aucune part n'a encore été appariée
PARTIALCertaines parts ont été appariées, le reste est toujours dans le carnet
FILLEDToutes les parts ont été entièrement appariées
CANCELLEDOrdre annulé par l'opérateur ou le système
EXPIREDOrdre expiré (date expiresAt dépassée)
REJECTEDOrdre rejeté (ex. : aucune liquidité pour un ordre au marché)

Annuler un ordre

Annule un ordre ouvert.

DELETE /api/v1/orders/{orderId}

Seuls les ordres avec le statut PENDING ou PARTIAL peuvent être annulés.

Exemple :

curl -X DELETE https://polymarket.sandbox.playbatman.com/api/v1/orders/{orderId} \
-H "X-Api-Key: your-api-key"

Réponse :

{
"success": true,
"data": {
"id": "order-uuid",
"status": "CANCELLED",
"remainingShares": "0",
...
}
}

Obtenir un ordre

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

GET /api/v1/orders/{orderId}

Réponse : Même structure que l'objet order dans la réponse de passage d'ordre.

Lister les ordres

Liste les ordres de votre compte opérateur avec des filtres optionnels.

GET /api/v1/orders

Paramètres de requête :

ParamètreTypeDescription
playerIdstringFiltrer par identifiant de joueur
marketIdstringFiltrer par marché
outcomeIdstringFiltrer par résultat
sidestringFiltrer par sens (BUY ou SELL)
typestringFiltrer par type (MARKET ou LIMIT)
statusstringStatuts séparés par des virgules
cursorstringCurseur de pagination
limitnumberTaille de page

Exemple — Obtenir tous les ordres ouverts d'un joueur :

curl "https://polymarket.sandbox.playbatman.com/api/v1/orders?playerId=player-123&status=PENDING,PARTIAL" \
-H "X-Api-Key: your-api-key"

Réponse :

{
"success": true,
"data": {
"orders": [ ... ],
"total": 5,
"hasMore": false,
"nextCursor": null
}
}

Règles de validation

RègleDétails
Le marché doit être OPENLes ordres sont rejetés si le marché a un autre statut
Fenêtre de trading activeL'heure actuelle doit être comprise entre tradingStartsAt et tradingEndsAt
Résultat valideLe résultat doit appartenir au marché spécifié
Plage de parts1 à 100 000 (configurable)
Plage de prix0,01 à 0,99 (configurable, ordres LIMIT uniquement)
Vérification de position SELLL'opérateur doit détenir suffisamment de parts pour vendre
playerId requisDoit être une chaîne non vide

Codes d'erreur

CodeDescription
ORDER_NOT_FOUNDL'ordre avec l'identifiant donné n'existe pas
ORDER_INVALID_PRICEPrix hors de la plage autorisée
ORDER_INVALID_SHARESNombre de parts hors de la plage autorisée
ORDER_CANNOT_CANCELL'ordre n'est pas dans un statut annulable
ORDER_NO_LIQUIDITYAucun ordre correspondant disponible (ordres au marché)
MARKET_NOT_OPENLe marché n'est pas ouvert aux échanges
POSITION_INSUFFICIENT_SHARESPas assez de parts pour vendre