Skip to content

Limites de débit

Chaque endpoint de l'API Genius Checkout est dans l'un de trois tiers. Les limites sont par clé API (par marchand pour le trafic authentifié, par IP pour le non authentifié) et se renouvellent sur une fenêtre glissante d'une minute.

Tiers

TierLimiteCouvre
payment-mutations60 / minuteÉcritures qui déplacent de l'argent — créer un paiement, remboursement, capture, annulation, tokenize, charge-token, créer un abonnement, annuler un abonnement, désactiver un token
writes120 / minuteLectures + écritures non monétaires — list/get de toute ressource, créer/pause/archiver payment link, pause/reprendre abonnement, Zapier subscribe/unsubscribe
public-reads300 / minuteLectures non authentifiées (uniquement le rendu public des payment links aujourd'hui)

Endpoint → tier

EndpointTier
POST /payments, POST /payments/{id}/capture, POST /payments/{id}/refund, POST /payments/{id}/voidpayment-mutations
GET /payments/{id}writes
POST /checkout-sessionswrites
GET /checkout-sessions/{id}writes
POST /tokenize, POST /charge-tokenpayment-mutations
POST /subscriptions, POST /subscriptions/{id}/cancelpayment-mutations
GET /subscriptions, GET /subscriptions/{id}, POST /subscriptions/{id}/pause, POST /subscriptions/{id}/resume, PUT /subscriptions/{id}/payment-methodwrites
GET /transactions, GET /customers, GET /customers/{id}/payment-tokenswrites
POST /payment-tokens/{id}/deactivatepayment-mutations
GET /payment-links, POST /payment-links, GET /payment-links/{id}, POST /payment-links/{id}/*writes
POST /zapier/subscriptions, DELETE /zapier/subscriptions/{id}, GET /zapier/sample-paymentswrites

En-têtes de réponse

Chaque réponse authentifiée porte :

En-têteSignification
X-RateLimit-LimitMaximum de requêtes dans la fenêtre courante pour ce tier
X-RateLimit-RemainingRequêtes restantes avant le prochain 429

Quand vous dépassez la limite, le 429 ajoute :

En-têteSignification
Retry-AfterSecondes jusqu'au reset de la fenêtre

Corps 429

json
{
  "error": "Too many requests. Please try again later.",
  "retry_after": 17
}

retry_after correspond à l'en-tête Retry-After en secondes.

Conseils de backoff

  • Honorez toujours Retry-After — ne sondez pas plus fort.
  • Utilisez un backoff exponentiel avec jitter si vous ne pouvez pas lire l'en-tête : min(60s, base * 2^n + random(0, 1s)) en partant de base = 1s.
  • Pour les jobs batch (remboursements en masse, re-débits en masse), restez sous 50/min sur payment-mutations pour laisser de la marge au trafic simultané.
  • Utilisez Idempotency-Key sur chaque retry pour pouvoir relancer une requête sans double-débit.
js
async function callWithBackoff(url, init, attempt = 0) {
  const res = await fetch(url, init)
  if (res.status !== 429) return res
  const wait = Number(res.headers.get('Retry-After')) || 2 ** attempt
  await new Promise(r => setTimeout(r, wait * 1000))
  return callWithBackoff(url, init, attempt + 1)
}
python
# Python — même pattern avec `requests`
import requests, time
def call_with_backoff(method, url, **kwargs):
    for attempt in range(6):
        r = requests.request(method, url, **kwargs)
        if r.status_code != 429:
            return r
        wait = int(r.headers.get('Retry-After', 2 ** attempt))
        time.sleep(wait)
    return r

Marge pour les pics

Les limites sont évaluées par clé. Répartir le trafic sur plusieurs clés API n'est pas une manière sanctionnée de multiplier votre limite — si vous avez besoin de plus de débit sur un seul compte marchand, contactez le support et nous pouvons relever le tier de votre clé.

Suite

Released under the proprietary Genius Checkout license.