Billing-API
Rufen Sie Nutzungs- und Kostendaten Ihres eigenen Workspace in Ihre eigenen Systeme ab, ohne die Konsole zu öffnen. Ein Billing-Schlüssel ist ein nur lesender Anmeldedaten, beschränkt auf einen Workspace - er kann nur Abrechnungsdaten lesen, sonst nichts.
Ein Billing-Schlüssel kann jede in seinem Workspace protokollierte Anfrage lesen, einschließlich inzwischen gelöschter oder widerrufener Schlüssel, kann aber kein Modell aufrufen und keinen API-Schlüssel erstellen, ändern oder löschen. Wird er anderswo verwendet, liefert das 401 wrong_key_kind.
Einen Billing-Schlüssel erstellen
- Öffnen Sie Konsole → Billing-API-Schlüssel (nur Workspace-Inhaber). Benennen Sie ihn, beschränken Sie ihn optional auf eine IP-Allowlist oder legen Sie ein Ablaufdatum fest, und kopieren Sie dann den Schlüssel - er beginnt mit
sk-syn-bill-und wird nur einmal angezeigt. - Rufen Sie die untenstehenden Endpoints damit als Bearer-Token auf. Widerrufen Sie ihn jederzeit auf derselben Seite - der Widerruf macht ihn sofort ungültig, ohne sonst etwas im Workspace zu beeinflussen.
- Ein Schlüssel ist an seinen Ersteller gebunden: Ist dieser nicht mehr Workspace-Inhaber, funktioniert er nicht mehr und liefert
403 key_owner_not_authorized.
Authentifizierung
Jeder Aufruf benötigt Authorization: Bearer sk-syn-bill-... gegen die untenstehende Basis-URL. Ein Billing-Schlüssel funktioniert nur auf diesen Endpoints, und diese Endpoints akzeptieren nur einen Billing-Schlüssel - jede andere Kombination liefert 401 wrong_key_kind.
Authorization: Bearer sk-syn-bill-... Basis-URL: https://synthorai.io/api/v1/billing
Der Geltungsbereich ist der gesamte Workspace: jeder Inferenz-Schlüssel darin, auch gelöschte - ihre historischen Zeilen bleiben abfragbar. api_key_id und model können das Ergebnis nur einschränken, nie erweitern; jede Abfrage ist an den eigenen Workspace des Schlüssels gebunden.
Jede Abfrage läuft auf der Read-Replica, niemals auf der Primary. Ein Prozess ohne konfigurierte Replica antwortet mit 503 replica_unavailable statt stillschweigend zurückzufallen.
Token-Felder: folgen der OpenAI-Konvention - prompt_tokens ist die Summe der Input-Tokens und enthält bereits jeden Cache-Read und Cache-Write darunter, und completion_tokens enthält bereits reasoning_tokens. Keines von beiden wird zu den Summen hinzugerechnet - es handelt sich um eine Aufschlüsselung, nicht um zusätzliche Tokens.
Der Cache-Read-Anteil von prompt_tokens ist cached_tokens; der Cache-Write-Anteil ist cache_write_tokens, der auf /records-Zeilen je nach TTL weiter in cache_write_5m_tokens und cache_write_1h_tokens aufgeteilt wird.
Geldfelder: cost_usd ist der tatsächlich in Rechnung gestellte Betrag. byok_list_price_usd ist, was eine BYOK-Anfrage zum Listenpreis gekostet hätte - 0 bei einer Nicht-BYOK-Anfrage. Es gibt kein list_price_usd nirgendwo in dieser API.
"Fehler" bedeutet hier jede Anfrage, die die API erreicht hat und abgelehnt wurde - ein 4xx wie 402 (unzureichendes Guthaben), 403 oder 429, ebenso wie ein Upstream-Fehler. Ausgeschlossen sind nur Ablehnungen unserer eigenen internen Infrastruktur, genau wie in der Konsole. Abgelehnte Anfragen werden auf jedem Server höchstens einmal pro Key, Statuscode und Minute erfasst; die Zahlen für 402, 403 und 429 sind daher Untergrenzen. Erfolgreiche Anfragen und Abrechnungen sind vollständig.
GET /usage - aggregierte Nutzung
GET /usage
Voraggregierte Zeilen pro Stunde oder Tag - für Rechnungen und Dashboards. Sie stammen aus dem stündlichen Rollup, ergänzt um die seit dessen letztem Import geschriebenen Anfragen, sodass jüngste Buckets nicht einen ganzen Importzyklus hinterherhinken.
| Parameter | Typ | Beschreibung |
|---|---|---|
start* | string | Beginn des Zeitraums: ein RFC-3339-Zeitstempel oder ein Datum wie 2026-09-01. |
end | string | Ende des Zeitraums. Standardmäßig jetzt. |
granularity | string | Bucket-Größe: hour oder day. Standardmäßig day. |
group_by | string | Dimensionen zur Aufschlüsselung der Zeilen: api_key, model oder beide (jede Teilmenge). Standardmäßig beide. |
api_key_id | integer | Filtert auf eine oder mehrere API-Schlüssel-IDs. Wiederholbar; schränkt nur ein, erweitert niemals. |
model | string | Filtert auf eine oder mehrere Modell-IDs. Wiederholbar. |
limit | integer | Zeilen pro Seite. Standardmäßig 1000, begrenzt auf 5000. |
cursor | string | Undurchsichtiger Paginierungs-Cursor, entnommen aus dem meta.next_cursor der vorherigen Seite. |
In jeder Zeile erscheinen api_key_id und api_key_name nur, wenn group_by api_key enthält, und model nur, wenn es model enthält. avg_latency_ms kann null sein, wenn ein Bucket keine Latenz-Stichproben hat.
Beispielanfrage
curl "https://synthorai.io/api/v1/billing/usage?start=2026-09-01&end=2026-09-24&granularity=day" \
-H "Authorization: Bearer sk-syn-bill-..." Beispielantwort
{
"data": [
{
"bucket_start": "2026-09-23T00:00:00Z",
"bucket_end": "2026-09-24T00:00:00Z",
"api_key_id": 42,
"api_key_name": "prod-backend",
"model": "claude-sonnet-5",
"requests": 1280,
"success_requests": 1265,
"error_requests": 15,
"errors_4xx": 12,
"errors_429": 2,
"errors_5xx": 1,
"prompt_tokens": 512000,
"completion_tokens": 98000,
"cached_tokens": 210000,
"cache_write_tokens": 8000,
"reasoning_tokens": 4000,
"cost_usd": 4.1732,
"byok_list_price_usd": 0,
"byok_requests": 0,
"avg_latency_ms": 812,
"final": true
}
],
"meta": {
"generated_at": "2026-09-24T08:00:00Z",
"data_complete_until": "2026-09-24T06:00:00Z",
"timezone": "UTC",
"currency": "USD",
"next_cursor": null,
"has_more": false
}
} GET /records - Zeilen pro Anfrage
GET /records
Eine Zeile pro Anfrage, gedacht für die inkrementelle Synchronisierung in Ihre eigene Datenbank. Synchronisieren Sie nach cursor, niemals nach Zeit, und entfernen Sie Duplikate eingehender Zeilen anhand von record_id - siehe unten "Zeitlücken vermeiden" für den Grund.
| Parameter | Typ | Beschreibung |
|---|---|---|
cursor | string | Undurchsichtiger Synchronisierungs-Cursor (String), entnommen aus dem meta.next_cursor des vorherigen Aufrufs. Geben Sie genau eines von cursor oder start an; er hat keine Zeitraumgrenze. |
start | string | Beginn des Zeitraums (RFC-3339-Zeitstempel oder Datum). Geben Sie genau eines von cursor oder start an; ein start/end-Zeitraum ist auf 31 Tage begrenzt, während cursor keine Zeitraumgrenze hat. |
end | string | Ende des Zeitraums. Standardmäßig jetzt. |
api_key_id | integer | Filtert auf eine oder mehrere API-Schlüssel-IDs. Wiederholbar; schränkt nur ein, erweitert niemals. |
model | string | Filtert auf eine oder mehrere Modell-IDs. Wiederholbar. |
limit | integer | Zeilen pro Seite. Standardmäßig 500, begrenzt auf 1000. |
Beispielanfrage
curl "https://synthorai.io/api/v1/billing/records?start=2026-09-24T00:00:00Z&limit=500" \
-H "Authorization: Bearer sk-syn-bill-..." Beispielantwort
{
"data": [
{
"record_id": "rec_8f2a91c4",
"request_id": "req_9f3c2b1a",
"recorded_at": "2026-09-24T05:58:31Z",
"completed_at": "2026-09-24T05:58:29Z",
"api_key_id": 42,
"api_key_name": "prod-backend",
"model": "claude-sonnet-5",
"status": "success",
"status_code": 200,
"prompt_tokens": 812,
"completion_tokens": 194,
"cached_tokens": 512,
"cache_write_tokens": 64,
"cache_write_5m_tokens": 64,
"cache_write_1h_tokens": 0,
"cost_usd": 0.00412,
"byok_list_price_usd": 0,
"is_byok": false,
"is_stream": true,
"duration_ms": 1340,
"ttft_ms": 210
}
],
"meta": {
"next_cursor": "eyJvIjoiODgxNDA5MCJ9",
"has_more": false,
"window_final": true,
"safe_until": "2026-09-24T05:58:31Z",
"latest_recorded_at": "2026-09-24T05:58:31Z",
"data_complete_until": "2026-09-24T05:58:00Z"
}
} | Parameter | Beschreibung |
|---|---|
next_cursor | Cursor für den nächsten Aufruf. Immer vorhanden. |
has_more | Ob ein sofortiger erneuter Aufruf mit diesem Cursor weitere Zeilen liefern würde. |
window_final | Nur true, wenn Sie ein end angegeben haben und dieses bei oder vor safe_until liegt - dann ist der angeforderte Zeitraum garantiert vollständig. Andernfalls fehlt es oder ist false. |
safe_until | Der neueste recorded_at, den ein Aufrufer als endgültig ansehen kann; jüngere Zeilen werden noch zurückgehalten. |
latest_recorded_at | Der jüngste recorded_at über alle Zeilen hinweg, endgültig oder nicht. |
data_complete_until | Derselbe Wert, den /freshness liefert - wie weit das stündliche Rollup vollständig ist, zum Abgleich mit /usage. |
Zeitbasis: /usage bündelt nach completed_at (wann die Anfrage abgeschlossen wurde). Der start/end-Filter von /records basiert auf recorded_at (wann die Zeile geschrieben wurde, was unter Last hinter dem Abschluss zurückbleiben kann). Um /records mit /usage abzustimmen, bündeln Sie Ihre synchronisierten Zeilen selbst nach completed_at, nicht nach recorded_at.
GET /records/export - gestreamter Export
GET /records/export
Dieselben Filter wie /records, gestreamt als zeilenweise getrenntes JSON (application/x-ndjson) - für einen großen Rückstands-Abgleich statt einer paginierten Liste gedacht. Pro Workspace kann jeweils nur ein Export gestreamt werden; ein zweiter erhält 429 too_many_concurrent_requests.
Beispielanfrage
curl -N "https://synthorai.io/api/v1/billing/records/export?cursor=eyJvIjoiODgxNDAzMiJ9" \
-H "Authorization: Bearer sk-syn-bill-..." Beispielantwort
{"record_id":"rec_8f2a91c4","request_id":"req_9f3c2b1a","model":"claude-sonnet-5","status":"success","cost_usd":0.00412}
{"record_id":"rec_8f2a91c5","request_id":"req_9f3c2b1b","model":"claude-sonnet-5","status":"success","cost_usd":0.00398}
{"_meta":{"next_cursor":"eyJvIjoiODgxNDA5MSJ9","rows":2,"complete":true,"window_final":true,"generated_at":"2026-09-24T06:00:02Z"}} Die letzte Zeile des Streams ist ein _meta Objekt:
| Parameter | Beschreibung |
|---|---|
next_cursor | Cursor für den nächsten Export-Aufruf. |
rows | Anzahl der in diesem Stream geschriebenen Datensätze. |
complete | false bedeutet, dass der Stream vor dem vollständigen Durchlauf des Zeitraums angehalten hat - setzen Sie mit cursor=next_cursor fort. |
window_final | Gleiche Bedeutung wie bei /records: nur true, wenn das end des Exports bei oder vor safe_until liegt. |
generated_at | Zeitpunkt, zu dem diese Zeile geschrieben wurde. |
stopped_because | Vorhanden, wenn complete false ist: row_cap, scan_cap (der Stream hat seinen maximalen id-Bereich durchlaufen, ohne voll zu werden - häufig bei engem Filter), time_cap, query_error oder window_not_final. |
GET /summary - vorläufige Statistiken und Anomalien
GET /summary
Summen, Top-Modelle und Top-Schlüssel nach Kosten sowie eine Fehlerrate für den Zeitraum, plus eine anomalies Liste (high_error_rate, rate_limited, data_not_final, rollup_delayed), jede mit einem Schweregrad info oder warning und einer für Menschen lesbaren Nachricht. Zahlen in einem noch nicht abgeschlossenen Zeitraum können sich noch ändern - siehe unten.
| Parameter | Typ | Beschreibung |
|---|---|---|
start | string | Beginn des Zeitraums. Standardmäßig 30 Tage vor end. |
end | string | Ende des Zeitraums. Standardmäßig jetzt. |
api_key_id | integer | Filtert auf eine oder mehrere API-Schlüssel-IDs. Wiederholbar; schränkt nur ein, erweitert niemals. |
model | string | Filtert auf eine oder mehrere Modell-IDs. Wiederholbar. |
models_count und keys_count liefern die Summen hinter top_models und top_keys, die höchstens die Top 20 nach Kosten aufführen. Der Zeitraum ist standardmäßig die 30 Tage vor end , wenn start ausgelassen wird.
Beispielanfrage
curl "https://synthorai.io/api/v1/billing/summary?start=2026-09-17&end=2026-09-24" \
-H "Authorization: Bearer sk-syn-bill-..." Beispielantwort
{
"data": {
"totals": { "requests": 48210, "cost_usd": 132.55, "error_rate": 0.021 },
"models_count": 6,
"keys_count": 3,
"top_models": [ { "model": "claude-sonnet-5", "cost_usd": 88.10, "byok_list_price_usd": 0 } ],
"top_keys": [ { "api_key_id": 42, "api_key_name": "prod-backend", "cost_usd": 61.30, "byok_list_price_usd": 0 } ],
"anomalies": [
{ "type": "data_not_final", "severity": "info", "message": "The last 2 hours of this range are not yet final." }
]
},
"meta": {
"generated_at": "2026-09-24T06:00:02Z",
"data_complete_until": "2026-09-24T04:00:00Z"
}
} GET /freshness - wie vollständig die Daten sind
GET /freshness
Liefert data_complete_until, latest_recorded_at, safe_until und pipeline_lag_seconds - fragen Sie es ab, bevor Sie einen gerade abgerufenen Zeitraum als endgültig behandeln. safe_until ist der neueste recorded_at, den ein Aufrufer als vollständig ansehen kann; jüngere Zeilen können noch eintreffen.
Beispielanfrage
curl "https://synthorai.io/api/v1/billing/freshness" \
-H "Authorization: Bearer sk-syn-bill-..." Beispielantwort
{
"data": {
"data_complete_until": "2026-09-24T04:00:00Z",
"latest_recorded_at": "2026-09-24T05:58:31Z",
"safe_until": "2026-09-24T05:58:31Z",
"pipeline_lag_seconds": 47
},
"meta": { "generated_at": "2026-09-24T06:00:02Z" }
} GET /balance - was der Workspace jetzt ausgeben kann
GET /balance
Liefert das aktuell verfügbare Guthaben des Workspace - denselben Betrag wie in der Konsole. Für regelmäßige Abfragen gebaut: alle 30 bis 60 Sekunden genügt. Es hat ein eigenes Rate-Limit, sodass das Abfragen das Budget der Daten-Endpunkte nicht aufbraucht, und es antwortet auch bei einem Guthaben von null.
Beispielanfrage
curl "https://synthorai.io/api/v1/billing/balance" \
-H "Authorization: Bearer sk-syn-bill-..." Beispielantwort
{
"data": {
"available_usd": 1284.37,
"debt_usd": 0,
"source": "live",
"voucher": null,
"scheduled_credits": [
{ "amount_usd": 250, "release_at": "2026-10-01T00:00:00Z" }
],
"scheduled_credit_total_usd": 250
},
"meta": { "generated_at": "2026-09-24T06:00:02Z", "currency": "USD" }
} | Parameter | Beschreibung |
|---|---|
available_usd | Das allgemeine Guthaben, gegen das Anfragen gerade abgerechnet werden. Nie unter 0. Es kann kurz steigen, wenn laufende Anfragen abgerechnet werden; für Ausgaben /usage oder /records verwenden. |
debt_usd | Der offene Betrag: Nutzung über das aufgeladene Guthaben hinaus. 0, wenn nichts offen ist. Eine Aufladung begleicht ihn zuerst; nur der Rest wird zu available_usd. |
source | live: aus dem Echtzeit-Ledger gelesen. delayed: das Ledger war nicht erreichbar, der Wert stammt aus einer Datenbankkopie, die bis zu etwa 30 Sekunden hinterherhinken kann. |
voucher | Aktionsguthaben nur für Bildgenerierung (applies_to), für die aufgeführten Modellmuster und bis expires_at; andere Anfragen nutzen nur available_usd, und es ist nicht darin enthalten. null, wenn keines vorhanden ist; active ist nach Ablauf false. |
scheduled_credits | Bereits vereinbarte Gutschriften in Tranchen (amount_usd, release_at); jede wird innerhalb von etwa 10 Minuten nach release_at dem Guthaben zugeschlagen, nicht früher. scheduled_credit_total_usd ist ihre Summe. |
Fehler
Jeder Fehler ist {"error": {"type", "message", "hint"}}:
{
"error": {
"type": "range_too_large",
"message": "the requested range exceeds this endpoint's cap",
"hint": "narrow start/end to at most 31 days, or sync /records with a cursor instead"
}
} | Typ | HTTP-Status | Bedeutung |
|---|---|---|
invalid_parameter | 400 | Ein Query-Parameter fehlt, ist fehlerhaft oder außerhalb des gültigen Bereichs. |
range_too_large | 400 | Der angeforderte Zeitraum oder das id-Fenster ist größer als vom Endpoint erlaubt; der hint nennt die betroffene Grenze. |
start_too_recent | 400 | Ein start/end-Fenster beginnt nach safe_until, wo seine Startgrenze noch nicht feststeht. Nach der Zeit im Retry-After-Header erneut versuchen oder per cursor synchronisieren. |
wrong_key_kind | 401 | Die Anmeldedaten sind kein Billing-Schlüssel, oder ein Billing-Schlüssel wurde außerhalb dieser Endpoints verwendet. |
authentication_error | 401 | Der Schlüssel fehlt, ist ungültig, abgelaufen oder wird durch seine IP-Allowlist blockiert. |
key_owner_not_authorized | 403 | Der Ersteller dieses Schlüssels ist nicht mehr Workspace-Inhaber. Billing-Schlüssel sind nur für den Inhaber selbst und funktionieren nicht mehr, sobald der Besitz wechselt; der neue Inhaber muss einen eigenen erstellen. |
rate_limited | 429 | Mehr als 60 Anfragen pro Minute auf diesem Workspace. Versuchen Sie es nach der im Header Retry-After angegebenen Zeit erneut. |
too_many_concurrent_requests | 429 | Mehr als 3 gleichzeitige Anfragen in diesem Workspace, oder ein anderer Export läuft bereits. |
replica_unavailable | 503 | Für diesen Prozess ist keine Read-Replica konfiguriert; die API fällt niemals auf die Primary zurück. |
query_timeout | 503 | Die Abfrage hat das 10-Sekunden-Statement-Timeout oder die 15-Sekunden-Frist überschritten. Schränken Sie den Zeitraum ein und versuchen Sie es erneut. |
internal_error | 500 | Ein unerwarteter Serverfehler. Versuchen Sie es erneut und melden Sie es, falls das Problem weiter besteht. |
Rate-Limits und Obergrenzen
| Schutzmaßnahme | Wert |
|---|---|
| Rate-Limit | 60 Anfragen pro Minute pro Workspace, ein gleitendes Zeitfenster, das über alle Instanzen hinweg geteilt wird. |
| Nebenläufigkeit | 3 gleichzeitige Anfragen pro Workspace auf jedem Server und ein Export-Stream pro Workspace auf jedem Server. |
| Guthaben-Abfrage | /balance: 60 Anfragen pro Minute und 2 gleichzeitig pro Workspace, getrennt von den anderen Endpunkten gezählt. |
| Zeitraumgrenzen | /usage: 31 Tage bei Granularität hour, 366 Tage bei day. /summary: bis zu 366 Tage. /records und der Export: bis zu 31 Tage. |
| Seitengrenzen | /usage liefert bis zu 5.000 Zeilen pro Seite, /records bis zu 1.000. Der Export streamt Seiten zu 2.000 und stoppt bei 1.000.000 Zeilen - fortsetzbar mit cursor. Er stoppt außerdem nach 2.000.000 durchlaufenen Datensatz-ids (stopped_because=scan_cap) und drosselt sich passend zur Datenbank; mit cursor fortsetzen. |
| Caching | Jede Antwort trägt Cache-Control: no-store. |
Wird nie zurückgegeben: channel_id, upstream_request_id, usage_raw, other, content, ip_address, user_agent, cost_detail.
Zeitlücken vermeiden
Anfragen werden nach ihrem Abschluss asynchron in das Log geschrieben (normalerweise Sekunden, bei Rückstand länger), und das stündliche Rollup, aus dem /usage und /summary lesen, wird in Batches eingespielt. Die jüngsten Stunden sind immer etwas unvollständig. /usage und /summary ergänzen außerdem die seit dem letzten Import geschriebenen Anfragen (meta.live_tail ist true); liegt der Rollup dafür zu weit zurück, ist meta.live_tail false und die jüngsten Buckets sind unvollständig.
data_complete_until ist der frühere der beiden folgenden Zeitpunkte: der Wasserstand des stündlichen Rollups minus der aktuellen Pipeline-Verzögerung, oder die älteste noch nicht eingerollte Anfrage - minus einer Sicherheitsmarge von 30 Minuten, abgerundet auf die volle Stunde.
Ein finaler Bucket ist stabil, mit einer Ausnahme: der tägliche Abgleichsjob kann eine Stunde innerhalb von 48 Stunden noch korrigieren, falls er eine Abweichung findet. /records ist immer die Quelle der Wahrheit für die genauen Zahlen einer Anfrage.
Jede Zeile von /usage trägt ein final -Flag: true , das gilt, sobald sein Bucket vor oder bei data_complete_until (Wert von /freshness) endet. Ein finaler Bucket ändert sich nie wieder.
- Aggregate: upserten Sie jede Zeile anhand von (bucket_start, api_key_id, model) in Ihren eigenen Speicher, und holen Sie jeden Bucket erneut ab, solange er noch final: false ist. Leiten Sie niemals ein Delta ab, indem Sie eine alte Summe von einer neuen abziehen.
- Rohdaten-Zeilen: synchronisieren Sie nach cursor, niemals nach Zeit. Bewahren Sie next_cursor auf und setzen Sie beim nächsten Aufruf dort fort, und entfernen Sie Duplikate eingehender Zeilen anhand von record_id (eine stabile, undurchsichtige id pro Zeile), falls eine wiederholte Seite dieselbe Zeile erneut liefert. Zeilen, die jünger als etwa 5 Minuten sind, werden zurückgehalten - safe_until ist die Zeit der neuesten protokollierten Zeile minus 5 Minuten - sodass eine noch in Arbeit befindliche Zeile niemals an einer bereits ausgegebenen Cursor-Position vorbeirutschen kann und nichts in eine Lücke fällt. Zum Zählen von Anfragen zählen Sie eindeutige request_id.
- Begrenztes Fenster: wenn Sie einen start/end-Zeitraum abfragen, statt nach cursor zu synchronisieren, behandeln Sie ihn erst als vollständig, wenn window_final true ist (das ist nur der Fall, wenn Sie ein end angegeben haben und dieses bei oder vor safe_until liegt). Ist window_final false, rufen Sie später mit demselben Zeitraum erneut auf, oder wechseln Sie zur Synchronisierung per cursor. Ein Fenster muss spätestens bei safe_until beginnen; ein späterer Beginn liefert 400 start_too_recent mit Retry-After-Header.
Empfohlene Integration
- Nächtliche Abrechnung: rufen Sie /usage einmal täglich mit granularity=day auf, und holen Sie jeden Bucket erneut ab, der bei Ihrem letzten Lauf noch final: false war.
- Details pro Anfrage: rufen Sie /records stündlich mit cursor auf den zuletzt gespeicherten next_cursor gesetzt auf, paginieren Sie weiter, solange has_more true ist, und entfernen Sie Duplikate eingehender Zeilen anhand von record_id.
- Dashboards: rufen Sie für den sichtbaren Zeitraum /summary auf, statt /records selbst zu aggregieren - er enthält bereits die Anomalienliste.
Müssen Sie reguläre API-Schlüssel programmatisch erstellen oder verwalten, statt Abrechnungsdaten zu lesen? Siehe Provisioning-Schlüssel.