ΖΩΝΤΑΝΑ · ΑΛΥΣΙΔΑ ΕΛΕΓΧΟΥ · ΕΕ
ΣΥΣΤΗΜΑ · 99,99% ΔΙΑΘΕΣΙΜΟΤΗΤΑ
v 1.0 ↗ ΦΤΙΑΓΜΕΝΟ ΣΤΗΝ ΕΕ

Σφάλματα + όρια ρυθμού

Ένας φάκελος σφάλματος σε κάθε endpoint. Τυπικοί κωδικοί HTTP status + μια δομημένη συμβολοσειρά code για προγραμματιστική αντιστοίχιση. Κεφαλίδες ορίου ρυθμού σε κάθε απόκριση ώστε να ρυθμίζετε τον ρυθμό σας πριν φτάσετε σε 429.

Φάκελος σφάλματος

{
  "detail": "Human-readable summary.",
  "code": "billing.subscription_past_due",
  "field_errors": {
    "scheduled_for": ["Must be a future ISO 8601 timestamp."]
  }
}
  • detail — πάντα παρόν, ασφαλές για απόδοση σε ανθρώπους (μεταφράζεται όπου είναι διαθέσιμο το locale).
  • code — παρόν για διακριτές καταστάσεις σφάλματος. Σταθερό μεταξύ εκδόσεων API· αντιστοιχίστε σε αυτό για τη λογική επανάληψης.
  • field_errors — παρόν μόνο σε αποτυχίες επικύρωσης 400. Χάρτης όνομα-πεδίου → λίστα μηνυμάτων.

Μήτρα κωδικών status

StatusΚλάσηΕπανάληψη;Συνήθεις αιτίες
400ΕπικύρωσηΌχιΛείπει υποχρεωτικό πεδίο, κακή μορφή, παραβίαση επιχειρησιακού κανόνα
401AuthΌχιΛείπει / κακό / ανακληθέν διαπιστευτήριο
402ΧρέωσηΌχιΛηξιπρόθεσμη συνδρομή, εξάντληση ορίου δωρεάν πλάνου
403ΔικαίωμαΌχιΤο διαπιστευτήριο δεν έχει scope, ή ο πόρος βρίσκεται σε διαφορετικό org
404Δεν βρέθηκεΌχιΟ πόρος δεν υπάρχει ή δεν είναι ορατός στο διαπιστευτήριό σας
409ΣύγκρουσηΕνίοτεΑναντιστοιχία επαναχρησιμοποίησης Idempotency-Key, παραβίαση μηχανής καταστάσεων
422Μη επεξεργάσιμοΌχιΣημασιολογικά μη έγκυρος συνδυασμός έγκυρων πεδίων
429Περιορισμός ρυθμούΝαι, με backoffΕνεργοποιήθηκε ο περιορισμός ανά διαπιστευτήριο ή ανά οργανισμό
500Σφάλμα διακομιστήΝαι, με backoffΑπροσδόκητο — ανοίξτε αίτημα υποστήριξης αν επιμένει
502 / 503 / 504ΠαροδικόΝαι, με backoffUpstream / deploy / φόρτος

Αξιοσημείωτοι κωδικοί σφαλμάτων

ΚωδικόςΚατάστασηΤι σημαίνει
billing.subscription_past_due402Η συνδρομή Stripe του οργανισμού είναι ληξιπρόθεσμη. Κατευθύνετε τον διαχειριστή στο /admin/billing.
billing.free_plan_minutes_exhausted402Η βαθμίδα Free / Pilot έχει εξαντλήσει τις 5 επιθεωρήσεις της.
billing.signature_pack_exhausted402Οι πιστώσεις του πακέτου υπογραφών εξαντλήθηκαν· χρησιμοποιήστε χρέωση ανά υπογραφή ή αγοράστε νέο πακέτο.
permission_denied403Το διαπιστευτήριο δεν διαθέτει το scope. Δείτε το field_errors.required_scope.
idempotency.key_mismatch409Ίδιο key, διαφορετικό σώμα. Χρησιμοποιήστε νέο key.
session.already_ended409Κλήση του end σε μη ανοιχτή συνεδρία (συνήθως ασφαλές — το end είναι idempotent, αφορά τις ακραίες περιπτώσεις).
kyb.not_verified403Ζητήθηκε υπογραφή QES σε οργανισμό που δεν έχει ολοκληρώσει τον έλεγχο KYB.
rate_limited429Ενεργοποιήθηκε ο περιορισμός ανά διαπιστευτήριο (60 rpm) ή ανά οργανισμό (600 rpm).

Κεφαλίδες περιορισμού ρυθμού

Κάθε απόκριση — επιτυχία ή σφάλμα — μεταφέρει την κατάσταση περιορισμού:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716461235
  • X-RateLimit-Limit — το όριο που ισχύει για αυτό το αίτημα.
  • X-RateLimit-Remaining — πόσες κλήσεις απομένουν στο τρέχον παράθυρο.
  • X-RateLimit-Reset — χρονοσήμανση Unix κατά την οποία μηδενίζεται το Remaining.

Σε 429, ορίζεται επίσης το Retry-After (σε δευτερόλεπτα) σύμφωνα με το RFC 6585.

Πεδία εφαρμογής περιορισμού

ScopeΌριοΠαράθυρο
Ανά διαπιστευτήριο601 λεπτό
Ανά οργανισμό (σε όλα τα διαπιστευτήρια)6001 λεπτό

Επιτρέπει ριπές για το πρώτο δευτερόλεπτο του λεπτού. Με το που φτάσετε το όριο, τα επόμενα αιτήματα εντός του παραθύρου επιστρέφουν 429.

Στρατηγική επανάληψης

Εκθετική υποχώρηση με jitter για 429 / 5xx· μην επαναλαμβάνετε τα 4xx (εκτός από 408, 425, 429):

async function withRetry<T>(fn: () => Promise<T>, max = 5): Promise<T> {
  let lastErr: unknown;
  for (let i = 0; i < max; i++) {
    try {
      return await fn();
    } catch (err: any) {
      const status = err?.status;
      if (status >= 400 && status < 500 && ![408, 425, 429].includes(status)) {
        throw err; // not retryable
      }
      const base = status === 429 ? (err.retryAfterMs ?? 1000) : 250 * 2 ** i;
      const jitter = Math.random() * base * 0.2;
      await new Promise((r) => setTimeout(r, base + jitter));
      lastErr = err;
    }
  }
  throw lastErr;
}

Τα SDK το υλοποιούν εσωτερικά σε 429 + 5xx· αν προτιμάτε να χειρίζεστε τις επαναλήψεις μόνοι σας, ορίστε retries: 0 στις επιλογές του SDK.

Συσχέτιση σφαλμάτων

Κάθε απόκριση μεταφέρει μια κεφαλίδα X-Request-Id (UUID). Αναφέρετέ την σε οποιοδήποτε αίτημα υποστήριξης — μπορούμε να ανακτήσουμε το πλήρες ίχνος του αιτήματος μόνο από αυτό το id.

Τι ακολουθεί