Direct naar de inhoud
Sursa Developers

Idempotente requests

Een request kan mislukken nadat Sursa het werk al heeft gedaan: de verbinding valt weg, of je proces herstart voordat de response binnen is. Stuur je dezelfde POST opnieuw, dan maak je misschien een tweede kaart of een tweede webhook. Een idempotentiesleutel voorkomt dat.

Stuur bij elke POST en PATCH een header Idempotency-Key mee. Heeft Sursa al een request met deze sleutel gezien, dan voert het de bewerking niet opnieuw uit: het geeft de response terug die het de eerste keer heeft opgeslagen.

curl -X POST https://api.sursa.com/v1/cards/text \
  -H "Authorization: Bearer $SURSA_API_KEY" \
  -H "Idempotency-Key: 6f1d2c9e-7b0a-4c43-9a51-0d6c1c1f8e21" \
  -H "Content-Type: application/json" \
  -d '{"title": "Refund policy", "body_markdown": "Refunds are processed within 14 days."}'

Een herhaald request krijgt dezelfde status en body als het eerste, met een extra header:

HTTP/1.1 200 OK
Idempotency-Replayed: true
X-Request-Id: 01JB7R…

Het herhaalde request heeft een eigen X-Request-Id.

Een sleutel kiezen

  • Gebruik een nieuwe willekeurige waarde, zoals een UUID v4, voor elke logische bewerking: “maak deze kaart”, “registreer deze webhook”. Gebruik dezelfde waarde voor elke nieuwe poging van die bewerking, en nooit voor een andere.
  • Een goede sleutel leid je af van je eigen gegevens als je die hebt, bijvoorbeeld sync-2026-10-24-record-1042. Dan stuurt zelfs een herstarte job die zijn geheugen kwijt is, dezelfde sleutel opnieuw.
  • De sleutel bestaat uit 1 tot 255 afdrukbare ASCII-tekens. Al het andere geeft 400 met de code api.idempotency_key_invalid.

Wat Sursa met de sleutel doet

SituatieResponse
Eerste request met deze sleutelDe bewerking wordt zoals gewoonlijk uitgevoerd.
Dezelfde sleutel, hetzelfde request, het eerste eindigde met 2xx of 4xxDe opgeslagen response, met Idempotency-Replayed: true. De bewerking wordt niet opnieuw uitgevoerd.
Dezelfde sleutel, het eerste request loopt nog409 api.idempotency_in_progress met Retry-After: 1. Wacht en probeer het opnieuw.
Dezelfde sleutel, een andere methode, een ander pad, een andere Content-Type of body409 api.idempotency_mismatch. De sleutel is al in gebruik door een ander request.
Het eerste request eindigde met 5xx of 429De sleutel wordt vrijgegeven: het volgende request ermee voert de bewerking opnieuw uit.
  • Een sleutel is 24 uur geldig. Daarna start dezelfde sleutel een nieuwe bewerking.
  • Sleutels zijn gescheiden per organisatie en per aanroeper: twee verschillende API-sleutels kunnen dezelfde waarde gebruiken zonder elkaar te beïnvloeden.
  • Een foutresponse met 4xx wordt ook opgeslagen. Een request dat niet door de validatie kwam, mislukt op dezelfde manier als het met dezelfde sleutel wordt herhaald; corrigeer het en stuur het met een nieuwe sleutel.

Welke requests een sleutel nodig hebben

MethodeIdempotency-Key
POST, PATCHMeesturen. Elk endpoint dat zijn response voor een herhaling bewaart, vermeldt de header in de API-referentie.
GET, PUT, DELETENiet nodig: deze methoden zijn naar hun aard veilig te herhalen. De header wordt geaccepteerd en heeft geen effect.
POST die alleen leest, zoals zoeken, de financiële rapporten en POST /v1/catalog/resolveGeaccepteerd, maar er wordt niets opgeslagen: het request wordt gewoon opnieuw uitgevoerd.

Sommige bewerkingen kun je ook zonder de header veilig herhalen:

Veilig opnieuw proberen

Combineer de sleutel met de regels voor nieuwe pogingen uit Fouten: maak de sleutel één keer, vóór de eerste poging, en stuur hem mee bij elke poging van dezelfde bewerking.