code, nicht die menschliche message (Messages können sich ändern; Codes sind
stabil).
Das Error-Envelope
Erfolgreiche Antworten enthalten nie ein
error-Objekt. Verzweige zuerst auf den
HTTP-Status, dann auf error.code.Error-Codes
invalid_api_key
HTTP 401. Der Authorization-Header fehlt oder ist fehlerhaft, oder der Key
ist unbekannt, abgelaufen oder widerrufen — oder der Key-Ersteller ist kein
Mitglied der Organisation mehr. Abgelaufene und unbekannte Keys sind absichtlich
nicht unterscheidbar.
Authorization: Bearer samsa_sk_….
Wenn der Key widerrufen oder abgelaufen wurde,
erstelle einen neuen. Wiederhole
nicht — das Ergebnis wird sich nicht ändern.
missing_scope
HTTP 403. Der Key ist gültig, aber ihm fehlt der
Scope, den der Endpoint erfordert. param ist
"scope" und die Message nennt den fehlenden Scope.
insufficient_credits
HTTP 402. Der ausgebbare Credit-Pool der Organisation (Abonnement plus gültige
Top-ups) liegt unter den Kosten der Aktion. Siehe Preise. Hat
die Organisation mindestens ein aktives Team, gibt die API stattdessen die
team-bezogenen Codes insufficient_team_credits oder
insufficient_unallocated_credits zurück.
subscription_inactive
HTTP 402. Die Organisation hat kein nutzbares Abonnement (keines aktiv, in
Kulanzfrist oder mit ausgebbaren Top-ups). Unterscheidet sich von
insufficient_credits, wo ein Abonnement existiert, der Pool aber zu niedrig ist.
insufficient_team_credits
HTTP 402. Organisationen können ihre monatlichen Abonnement-Credits in
Budgets pro Team aufteilen, und jeder API-Key kann einem Team zugewiesen werden.
Ein Key, der einem Team mit Budget zugewiesen ist, gibt aus dem monatlichen Bucket
dieses Teams aus; alles, was keinem Team-Budget zugewiesen ist, bildet den nicht
zugewiesenen Pool der Organisation. Gekaufte Top-up-Credits sind von Budgets
ausgenommen und bleiben verfügbar, um den Rest zu decken. Dieser Code tritt auf, wenn das
verbleibende Budget des Teams für die aktuelle Abrechnungsperiode plus Top-ups unter
den Kosten der Aktion liegt.
insufficient_unallocated_credits
HTTP 402. Der Key ist keinem Team mit Budget zugewiesen (nicht zugewiesen, oder
sein Team hat kein Budget), daher gibt er aus dem nicht zugewiesenen Pool der
Organisation aus — den monatlichen Abonnement-Credits, die nach Abzug der Budgets
aller aktiven Teams übrig bleiben. Dieser Code tritt auf, wenn dieser Pool plus der von
Budgets ausgenommenen Top-ups unter den Kosten der Aktion liegt. Organisationen ohne
aktives Team sehen die beiden team-bezogenen Codes nie — sie erhalten stattdessen
das einfache insufficient_credits.
not_found
HTTP 404. Die id ist unbekannt oder sie gehört einer anderen Organisation. Die
beiden Fälle sind per Design nicht unterscheidbar, sodass die Existenz nie über
Organisationen hinweg preisgegeben wird.
validation_error
HTTP 422. Der Request-Body oder ein Parameter hat die Validierung nicht
bestanden. param nennt das betreffende Feld; message erklärt die Einschränkung.
message und param, dann
reiche sie erneut ein. Das ist ein Client-Fehler — dieselbe Anfrage zu wiederholen
schlägt identisch fehl.
rate_limited
HTTP 429. Der Key hat sein Request-Rate-Fenster pro Key überschritten. Die
Antwort trägt die Header Retry-After und X-RateLimit-*. Siehe
Rate Limits.
Retry-After-Intervall ab und wiederhole
dann. Verwende exponentielles Backoff bei wiederholten 429ern.
too_many_active_jobs
HTTP 429. Die Organisation hat ihren Cap für gleichzeitige laufende Jobs
erreicht. Die Message enthält den aktuellen Stand und das Limit, und ein
Retry-After-Header ist gesetzt.
GET-Endpoint ab oder nutze einen
Webhook), bevor du weitere einreichst, dann wiederhole nach
Retry-After.
internal_error
HTTP 500. Ein unerwarteter Fehler auf Samsas Seite. Die Antwort verrät nie
interne Details — die request_id ist dein Ansatzpunkt für den Support.
request_id.
request_id für den Support nutzen
Jeder Fehler (und jeder Erfolg) trägt eine request_id, auch zurückgegeben als
X-Request-ID-Response-Header. Sie verbindet deinen clientseitigen Fehler, den
Response-Header und Samsas Server-Logs zu einer Anfrage. Logge sie und nenne sie,
wenn du support@samsa.ai kontaktierst — das ist der
schnellste Weg für uns, genau herauszufinden, was passiert ist.

