Aller au contenu principal

API de rejeu d'événements

L'API de rejeu d'événements permet de récupérer les événements que votre système a pu manquer. Tous les événements (changements de marché, transactions, règlements, etc.) sont persistés avec des numéros de séquence croissants et conservés pendant 24 heures.

Authentification : En-tête X-Api-Key requis.

Pourquoi le rejeu d'événements ?

Si votre endpoint webhook tombe en panne ou si votre WebSocket se déconnecte, vous pouvez rejouer les événements manqués :

1. Store the last sequence number you processed
2. When reconnected, call GET /api/v1/events?since={lastSequence}
3. Process events in order
4. Update your stored sequence number

Rejouer des événements

GET /api/v1/events

Paramètres de requête :

ParamètreTypeDescription
sinceintegerRetourne les événements avec un numéro de séquence supérieur à cette valeur
eventTypestringFiltrer par type d'événement (ex. ORDER_MATCHED)
marketIdstring (UUID)Filtrer par marché
limitintegerTaille de la page (défaut : 100, max : 1000)

Exemple — récupérer tous les événements depuis le numéro de séquence 42 :

curl "https://polymarket.sandbox.playbatman.com/api/v1/events?since=42&limit=100" \
-H "X-Api-Key: your-api-key"

Réponse :

{
"success": true,
"data": {
"events": [
{
"id": "event-uuid-1",
"sequence": 43,
"operatorId": "operator-uuid",
"eventType": "ORDER_PLACED",
"marketId": "market-uuid",
"payload": {
"orderId": "order-uuid",
"marketId": "market-uuid",
"outcomeId": "outcome-uuid",
"operatorId": "operator-uuid",
"side": "BUY",
"type": "LIMIT",
"shares": 50,
"price": 0.65,
"status": "PENDING",
"filledShares": 0,
"timestamp": 1708293600000
},
"createdAt": "2026-02-18T23:00:00.000Z",
"expiresAt": "2026-02-19T23:00:00.000Z"
},
{
"id": "event-uuid-2",
"sequence": 44,
"operatorId": "operator-uuid",
"eventType": "ORDER_MATCHED",
"marketId": "market-uuid",
"payload": {
"orderId": "order-uuid",
"marketId": "market-uuid",
"outcomeId": "outcome-uuid",
"operatorId": "operator-uuid",
"tradeId": "trade-uuid",
"side": "BUY",
"price": 0.65,
"shares": 50,
"filledShares": 50,
"remainingShares": 0,
"status": "FILLED",
"timestamp": 1708293600000
},
"createdAt": "2026-02-18T23:00:01.000Z",
"expiresAt": "2026-02-19T23:00:01.000Z"
}
],
"hasMore": true,
"lastSequence": 44
}
}

Pagination

Utilisez le lastSequence de la réponse comme paramètre since dans votre prochaine requête :

# First page
GET /api/v1/events?limit=100

# Next page (using lastSequence from previous response)
GET /api/v1/events?since=44&limit=100

# Continue until hasMore is false

Filtrage

Par type d'événement

# Only trade events
GET /api/v1/events?eventType=ORDER_MATCHED

# Only market resolution events
GET /api/v1/events?eventType=MARKET_RESOLVED

Par marché

# Events for a specific market
GET /api/v1/events?marketId=market-uuid

# Combined filters
GET /api/v1/events?marketId=market-uuid&eventType=ORDER_MATCHED&since=100

Types d'événements

Type d'événementDescription
MARKET_CREATEDUn nouveau marché a été créé
MARKET_STATUS_CHANGEDLe statut du marché a changé (ouvert, suspendu, fermé, etc.)
MARKET_RESOLVEDLe marché a été résolu avec un résultat gagnant
ORDER_BOOK_UPDATELe carnet d'ordres a changé
PRICE_UPDATEDLes prix du marché ont été mis à jour
ORDER_PLACEDUn nouvel ordre a été soumis
ORDER_MATCHEDUn ordre a été mis en correspondance, transaction exécutée
ORDER_CANCELLEDUn ordre a été annulé
POSITION_UPDATEDUne position a été mise à jour
SETTLEMENT_COMPLETEDUn règlement a été traité

Champs des événements

ChampTypeDescription
idstring (UUID)Identifiant unique de l'événement
sequenceintegerNuméro de séquence croissant de façon monotone
operatorIdstring (UUID)Opérateur auquel appartient l'événement
eventTypestringL'un des types d'événements ci-dessus
marketIdstring (UUID) | nullMarché associé (null pour les événements non liés à un marché)
payloadobjectDonnées spécifiques à l'événement
createdAtstring (ISO 8601)Date et heure de l'événement
expiresAtstring (ISO 8601)Date et heure de suppression de l'événement (rétention de 24h)

Rétention

  • Les événements sont conservés pendant 24 heures à partir de leur création
  • Les événements expirés sont automatiquement nettoyés toutes les heures
  • Enregistrez la valeur lastSequence de votre côté pour reprendre après des interruptions

Modèle d'intégration

Voici un modèle recommandé pour un traitement fiable des événements :

let lastSequence = loadLastSequence(); // Load from your database

async function syncEvents() {
let hasMore = true;

while (hasMore) {
const response = await fetch(
`https://polymarket.sandbox.playbatman.com/api/v1/events?since=${lastSequence}&limit=100`,
{ headers: { 'X-Api-Key': API_KEY } }
);

const { data } = await response.json();

for (const event of data.events) {
await processEvent(event);
lastSequence = event.sequence;
saveLastSequence(lastSequence); // Persist to your database
}

hasMore = data.hasMore;
}
}

// Run on startup and periodically as a safety net
syncEvents();
setInterval(syncEvents, 60000); // Every minute