Limits und Fehler
Die Anfragelimits der API und ihre Header, die Bedeutung jedes Fehlercodes und die Regeln für Zeiträume, Währungen, Rundung und Seiten.
Anfragelimits
| Limit | Wert |
|---|---|
| Pro Minute | 60 Anfragen |
| Pro Tag | 10.000 Anfragen |
Beide gelten für das ganze Konto: alle Schlüssel und verbundenen KI-Assistenten zusammen.
- Das Minutenlimit füllt sich laufend auf: Jede Sekunde kommt eine Anfrage zurück, bis 60.
- Das Tageslimit ist ein 24-Stunden-Fenster, kein Kalendertag. Der Header
X-RateLimit-Reset-Daysagt, wann es endet.
Limit-Header
Jede Antwort auf eine Anfrage mit gültigem Schlüssel trägt:
| Header | Bedeutung |
|---|---|
X-RateLimit-Limit | Erlaubte Anfragen pro Minute (60) |
X-RateLimit-Remaining | Gerade verbleibende Anfragen |
X-RateLimit-Reset | Sekunden, bis das Minutenlimit wieder voll ist |
X-RateLimit-Limit-Day | Erlaubte Anfragen pro Tag (10.000) |
X-RateLimit-Remaining-Day | Heute verbleibende Anfragen |
X-RateLimit-Reset-Day | Sekunden bis zum Ende des Tagesfensters |
Ist ein Limit erreicht, lautet die Antwort 429 rate_limited mit einem Header
Retry-After: Warte so viele Sekunden und sende die Anfrage dann erneut.
Jede Antwort, ob Fehler oder nicht, trägt außerdem X-Request-Id.
Aufbau eines Fehlers
Fehler folgen dem Standardformat „problem details“ (application/problem+json):
{
"type": "https://trueroyalties.com/docs/api/errors#invalid_request",
"title": "Invalid request",
"status": 400,
"code": "invalid_request",
"detail": "end_date must be on or after start_date.",
"issues": [
{
"path": "end_date",
"code": "invalid_value",
"message": "end_date must be on or after start_date."
}
],
"request_id": "req_8fK2mQ7xLp3nR9sT1vWy"
}- Prüf in deinem Skript
code. Er ändert sich nie;detailist für Menschen geschrieben, auf Englisch, und kann umformuliert werden. issueslistet jeden ungültigen Parameter. Es erscheint nur beiinvalid_request.- Nenn
request_id, wenn du den Support kontaktierst.
Fehlercodes
invalid_request · 400 — Ein Parameter ist ungültig: ein unbekannter Wert, ein
Datum, das es nicht gibt, ein zu langer Zeitraum, ein Seiten-Cursor, der nicht von
uns stammt. issues sagt, welcher Parameter und warum.
api_key_in_query · 400 — Der Schlüssel wurde in der URL gesendet. Sende ihn
im Header Authorization und widerrufe diesen Schlüssel: Er steht vielleicht schon
in einem Log.
unauthorized · 401 — Kein Schlüssel, oder ein falscher oder widerrufener. Die
Antwort sagt absichtlich nicht, welcher Fall vorliegt.
subscription_inactive · 403 — Das Abo des Kontos ist beendet. Die API
funktioniert wieder, sobald das Abo aktiv ist.
insufficient_scope · 403 — Der Schlüssel darf nicht lesen. Jeder heute
erstellte Schlüssel darf lesen, du solltest diesen Code also nie sehen.
not_found · 404 — Unter diesem Pfad gibt es keinen Endpoint, oder das
Angefragte existiert in deinem Konto nicht. Eine Reihe eines anderen Kontos bekommt
dieselbe Antwort.
wrong_host · 404 — Die Anfrage ging an trueroyalties.com. Verwende
https://author.trueroyalties.com/api/v1.
method_not_allowed · 405 — Die API antwortet nur auf GET, weil sie nur
lesend ist. Der Header Allow listet, was sie annimmt.
rate_limited · 429 — Ein Limit ist erreicht. Warte die Sekunden aus
Retry-After.
internal_error · 500 — Bei uns ist etwas schiefgegangen. Versuch es später
erneut; passiert es weiter, schick uns die request_id.
timeout · 504 — Die Antwort hat länger als 30 Sekunden gedauert. Frag einen
kürzeren Zeitraum ab.
Zeiträume
Die Berichte nehmen entweder einen relativen range oder zwei Daten — nie beides.
range:today,yesterday,last_7_days,last_14_days,last_30_days,last_60_days,last_90_days,this_month,last_month,this_year,last_year,all_time. Ohne Zeitraum bekommst dulast_30_days, wie im Dashboard.start_dateundend_date(YYYY-MM-DD, beide Tage eingeschlossen) gehören zusammen. Ein Zeitraum ist höchstens 366 Tage lang. Ein Enddatum nach heute zählt als heute.all_timefunktioniert nur bei/reports/books.timezone(zum BeispielEurope/Berlin) legt fest, welcher Tag für einenrange„heute“ ist. Ohne sie nutzt die API UTC.
Jeder Bericht liefert die tatsächlich verwendete period zurück. /account,
/books und /series nehmen keinen Zeitraum.
Währungen und Rundung
currencykannUSD,GBP,EUR,JPY,CAD,INR,PLN,SEK,BRL,MXNoderAUDsein. Standard ist deine Berichtswährung (oder USD, wenn sie nicht dazugehört).- Beträge sind Zahlen, gerundet auf die kleinste Einheit der Währung: Cent oder ganze Yen. Der Nettogewinn wird vor dem Runden berechnet, daher können die gerundeten Zeilen eines Berichts um einen Cent von seiner gerundeten Summe abweichen.
- Verhältnisse sind Dezimalzahlen: Eine
marginvon0.25bedeutet 25 %. nullbedeutet „existiert nicht“, nie null. Eine Marge ohne Tantiemen istnull, nicht0.- Gratis-Downloads zählen nie als Tantiemen. Sie haben einen eigenen Endpoint,
/free-units.
Filter und Seiten
- Filter nehmen kommagetrennte Werte:
marketplaces=US,UK,DE. Ein unbekannter Wert wird mit400 invalid_requestabgelehnt, das ihn nennt.GBwird für das Vereinigte Königreich akzeptiert. - Lange Listen kommen seitenweise.
limitlegt die Seitengröße fest, von 1 bis 100 (standardmäßig 50). Isthas_moretrue, sendenext_cursoralscursorzurück, um die nächste Seite zu bekommen.