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
| Status | Python-Ausnahme | Wann |
|---|---|---|
| 200 | keine | Erfolg: Das Ergebnis steht im Body. |
| 202 | keine | Angenommen: Ein Simulationsjob wurde in die Warteschlange gestellt; fragen Sie ihn nach dem Ergebnis ab. |
| 400 Bad Request | ValidationError | Die 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. |
| 401 Unauthorized | AuthError | Es 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. |
| 402 Payment Required | QuotaError | Das monatliche Kontingent des Kontos ist verbraucht, auf jeder gezählten Route. Es wurde nichts gezählt. Retry-After gibt die Sekunden bis resetAt an. |
| 403 Forbidden | AuthError | Der Job gehört jemand anderem, oder der Tarif des Kontos enthält den Batch-Endpunkt oder den angefragten Lösungsmodus nicht. |
| 404 Not Found | NotFound | Kein solcher Rechner-Slug, Jobtyp oder Job. Es wird nichts gezählt. |
| 409 Conflict | APIError | Eine Gerätefreigabe am Schlüssellimit oder für einen bereits entschiedenen Code (ein Aufruf aus einem angemeldeten Browser). |
| 422 Unprocessable Content | ValidationError | Der 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. |
| 429 Too Many Requests | RateLimitError | Zu 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. |
| 500 Internal Server Error | APIError | Das Ergebnis wurde berechnet, konnte aber nicht zurückgegeben werden, oder eine Lösung ist gescheitert. Es wurde nichts abgerechnet. |
| 503 Service Unavailable | APIError | Der 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. |
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.
{
"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"
}{
"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.
{
"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.
{
"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.
{
"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.
| errorKind | Bedeutung |
|---|---|
| invalid_request | Ein 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_large | Die Anfrage liegt innerhalb des Vertrags, aber jenseits dessen, was die Rechenumgebung dieses Tarifs ausführen kann. Verkleinern Sie das Problem. |
| not_available | Die Anfrage verlangt einen Modus oder eine Funktion, die dieser Tarif nicht enthält. Die Meldung nennt, was der Tarif enthält. |
| rate_limited | Ein Limit für gleichzeitige Jobs oder ein monatliches Kontingent ist ausgeschöpft. Trägt Retry-After und, bei einem monatlichen Kontingent, resetAt. |
| timeout | Der Job hat die Zeitobergrenze seines Typs überschritten. Dafür wird nichts abgerechnet. |
| interrupted | Der Lauf endete, bevor er fertig war — ein Worker wurde ersetzt oder ein Task gestoppt. Dafür wird nichts abgerechnet. |
| result_expired | Der Job wurde abgeschlossen, aber sein Ergebnis ist nicht mehr gespeichert. Der Status lautet weiterhin completed und trägt keine resultUrl. |
| transient | Der Dienst konnte die Anfrage gerade nicht annehmen oder prüfen. Es wurde nichts eingereiht oder abgerechnet; versuchen Sie es erneut. |
| fault | Der Dienst ist bei der Berechnung gescheitert. Die Meldung nennt den Schritt; dafür wird nichts abgerechnet. |