Skip to content
Abschnitte der Dokumentation

Fehler

Jede Ablehnung trägt errorKind neben detail und die Felder, nach denen Sie handeln können. Verzweigen Sie nach dem Status und errorKind; der Wortlaut von detail ist für Menschen geschrieben und kann sich ändern.

Die Python-Bibliothek löst für jeden Status eine typisierte Ausnahme aus, gewählt allein nach dem Status, nie nach der Meldung. Ein 5xx wird mit Backoff wiederholt, bevor die Ausnahme ausgelöst wird.

Statuscodes

Statuscodes und die Python-Ausnahme zu jedem
StatusPython-AusnahmeWann
200keineErfolg: Das Ergebnis steht im Body.
202keineAngenommen: Ein Simulationsjob wurde in die Warteschlange gestellt; fragen Sie ihn nach dem Ergebnis ab.
400 Bad RequestValidationErrorDie Anfrage lässt sich so nicht beantworten: eine Eingabe, die keine endliche Zahl ist, eine Lösung, die sich nicht aufsetzen lässt, ein Job-Body außerhalb seines Vertrags oder ein Batch, der leer ist oder sein Limit überschreitet. Es wird nichts gezählt.Felder: errorKind, detail, inputs, param, allowed
401 UnauthorizedAuthErrorEs wurde kein Schlüssel gesendet (der Body trägt keyUrl), oder der Schlüssel wurde nicht von uns ausgegeben oder wurde widerrufen. Betrifft nie das Kontingent.Felder: errorKind, detail, keyUrl
402 Payment RequiredQuotaErrorDas monatliche Kontingent des Kontos ist verbraucht, auf jeder gezählten Route. Es wurde nichts gezählt. Retry-After gibt die Sekunden bis resetAt an.Felder: errorKind, reason, limit, used, resetAt, upgradeUrl, overageUrl, Retry-After
403 ForbiddenAuthErrorDer Job gehört jemand anderem, oder der Tarif des Kontos enthält den Batch-Endpunkt oder den angefragten Lösungsmodus nicht.Felder: errorKind, detail, requiredTier, upgradeUrl
404 Not FoundNotFoundKein solcher Rechner-Slug, Jobtyp oder Job. Es wird nichts gezählt.Felder: errorKind, detail
409 ConflictAPIErrorEine Gerätefreigabe am Schlüssellimit oder für einen bereits entschiedenen Code (ein Aufruf aus einem angemeldeten Browser).Felder: errorKind, detail, reason
422 Unprocessable ContentValidationErrorDer Body lässt sich nicht lesen: Ein Pflichtfeld fehlt, oder ein Wert hat den falschen Typ (eine als Text gesendete Eingabe). Beantwortet, bevor die Route läuft.Felder: detail[].loc, detail[].msg, detail[].type
429 Too Many RequestsRateLimitErrorZu viele Anfragen in einer Minute für diese Zugangsdaten oder zu viele Jobs gleichzeitig in der Warteschlange oder in Ausführung. Retry-After nennt, wann Sie es erneut versuchen können.Felder: errorKind, limit, windowSeconds, pending, Retry-After
500 Internal Server ErrorAPIErrorDas Ergebnis wurde berechnet, konnte aber nicht zurückgegeben werden, oder eine Lösung ist gescheitert. Es wurde nichts abgerechnet.Felder: errorKind, detail
503 Service UnavailableAPIErrorDer Schlüssel oder der Kontingentzähler ließ sich nicht prüfen, oder ein Job ließ sich nicht einreihen. Es wurde nichts eingereiht oder abgerechnet; versuchen Sie es erneut.Felder: errorKind, detail

Zwei weitere Ausnahmen werden ohne Status ausgelöst: JobFailed, wenn ein Job mit failed endet (sie trägt das errorKind des Jobs als .kind), und LoginError, wenn rftools login keinen Schlüssel liefert.

Bodys der Ablehnungen

Dies sind die Bodys, die die API sendet, mit den Zahlen dieses Monats aus der Tariftabelle.

401 · Kein Schlüssel gesendet
{
  "detail": "An API key is required. Get a free key at https://rftools.io/dashboard/?newKey=1.",
  "errorKind": "invalid_request",
  "keyUrl": "https://rftools.io/dashboard/?newKey=1"
}
401 · Ein ungültiger Schlüssel
{
  "detail": "This API key is not valid. It may have been revoked.",
  "errorKind": "invalid_request"
}

Fehlerhaft, unbekannt oder widerrufen. Ein 401 bedeutet nie, dass das Kontingent verbraucht ist.

402 · Das Kontingent ist verbraucht
{
  "detail": "This account's 100 API calls for September are used. They reset on 2026-10-01. The API plan includes 10,000 a month.",
  "errorKind": "rate_limited",
  "reason": "allowance",
  "limit": 100,
  "used": 100,
  "upgradeUrl": "https://rftools.io/pricing/",
  "overageUrl": null,
  "resetAt": "2026-10-01T00:00:00+00:00"
}

Mit Retry-After in Sekunden bis resetAt. Derselbe Body auf jeder gezählten Route, die Rechner eingeschlossen. overageUrl ist gesetzt, wo der Tarif die nutzungsabhängige Abrechnung einschalten kann; reason ist overage_cap, sobald auch diese Obergrenze erreicht ist. Es wurde nichts gezählt.

429 · Zu viele Anfragen in einer Minute
{
  "detail": "More than 30 requests in 60 seconds from this address. An API key allows 120.",
  "errorKind": "rate_limited",
  "limit": 30,
  "windowSeconds": 60,
  "upgradeUrl": "https://rftools.io/pricing/"
}

Mit Retry-After. Das Limit richtet sich nach den Zugangsdaten, die die Anfrage trägt.

400 / 409 · Kein Platz für einen weiteren Schlüssel
{
  "detail": "This account already holds 1 API key, the most the Free plan allows. Revoke a key to free its place, or upgrade to Pro for 3 API keys.",
  "errorKind": "not_available",
  "keyLimit": 1,
  "manageUrl": "https://rftools.io/dashboard/#api-usage",
  "upgradeUrl": "https://rftools.io/pricing/"
}

POST /apikeys antwortet mit 400; die Gerätefreigabe antwortet mit 409 und reason: key_limit.

Fehlerarten

errorKind ist eine geschlossene Menge, bei einer abgelehnten Anfrage und bei einem Simulationsjob, der nach seiner Annahme scheiterte. Verzweigen Sie danach statt nach dem Wortlaut der Meldung.

Fehlerarten
errorKindBedeutung
invalid_requestEin Parameter fehlt, hat den falschen Typ, liegt außerhalb des Bereichs, ist keine der deklarierten Optionen oder kein Parameter dieses Jobtyps. Der 400-Body listet jeden fehlerhaften Parameter auf.
too_largeDie Anfrage liegt innerhalb des Vertrags, aber jenseits dessen, was die Rechenumgebung dieses Tarifs ausführen kann. Verkleinern Sie das Problem.
not_availableDie Anfrage verlangt einen Modus oder eine Funktion, die dieser Tarif nicht enthält. Die Meldung nennt, was der Tarif enthält.
rate_limitedEin Limit für gleichzeitige Jobs oder ein monatliches Kontingent ist ausgeschöpft. Trägt Retry-After und, bei einem monatlichen Kontingent, resetAt.
timeoutDer Job hat die Zeitobergrenze seines Typs überschritten. Dafür wird nichts abgerechnet.
interruptedDer Lauf endete, bevor er fertig war — ein Worker wurde ersetzt oder ein Task gestoppt. Dafür wird nichts abgerechnet.
result_expiredDer Job wurde abgeschlossen, aber sein Ergebnis ist nicht mehr gespeichert. Der Status lautet weiterhin completed und trägt keine resultUrl.
transientDer Dienst konnte die Anfrage gerade nicht annehmen oder prüfen. Es wurde nichts eingereiht oder abgerechnet; versuchen Sie es erneut.
faultDer Dienst ist bei der Berechnung gescheitert. Die Meldung nennt den Schritt; dafür wird nichts abgerechnet.