Workspace-Kontingente
Ressourcenkontingente und verbleibende Kapazitaet eines Workspaces pruefen.
Kontingente auflisten
/v1/workspaces/{workspaceId}/quotasQuery-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
usageTypeKey | string | Nach Nutzungstyp filtern (z.B. images) |
page | integer | Seitennummer |
size | integer | Eintraege pro Seite |
Beispiel
Rufen Sie diesen Endpoint zu Beginn jedes Workflows auf, der Inhalte oder Bilder
generiert, um sicherzustellen, dass Ihr Workspace ueber ausreichend Kontingent
verfuegt. Das Feld availableAmount ist am nuetzlichsten fuer diese Pruefung — es
beruecksichtigt sowohl das monatliche Limit als auch Bonus- oder Uebertragungscredits.
Token- und Bildverbrauch ueber die REST-API, den MCP-Server oder jede andere Integration wird aus denselben Workspace-Kontingenten abgezogen wie die Nutzung ueber die neuroflash-App. Es gibt kein separates API-Kontingent.
- cURL
- Python
- Node.js
- Go
curl "https://app.neuroflash.com/api/usage-service/v1/workspaces/{workspace_id}/quotas" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
quotas = requests.get(
f"https://app.neuroflash.com/api/usage-service/v1/workspaces/{workspace_id}/quotas",
headers={"Authorization": f"Bearer {token}"},
).json()
for quota in quotas["data"]:
print(f"{quota['usageTypeKey']}: {quota['availableAmount']} remaining "
f"(used {quota['usedAmount']} of {quota['limitAmount']})")
const quotas = await fetch(
`https://app.neuroflash.com/api/usage-service/v1/workspaces/${workspaceId}/quotas`,
{ headers: { Authorization: `Bearer ${token}` } }
).then((r) => r.json());
quotas.data.forEach((q) =>
console.log(`${q.usageTypeKey}: ${q.availableAmount} remaining (used ${q.usedAmount} of ${q.limitAmount})`)
);
quotaURL := fmt.Sprintf("https://app.neuroflash.com/api/usage-service/v1/workspaces/%s/quotas", workspaceID)
req, _ := http.NewRequest("GET", quotaURL, nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var quotas struct {
Data []struct {
UsageTypeKey string `json:"usageTypeKey"`
AvailableAmount int `json:"availableAmount"`
UsedAmount int `json:"usedAmount"`
LimitAmount int `json:"limitAmount"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode("as)
for _, q := range quotas.Data {
fmt.Printf("%s: %d remaining (used %d of %d)\n",
q.UsageTypeKey, q.AvailableAmount, q.UsedAmount, q.LimitAmount)
}
Antwort
{
"data": [
{
"id": "quota-uuid-123",
"workspaceId": "workspace-uuid",
"usageTypeKey": "images",
"bonusAmount": 0,
"spilloverAmount": 0,
"usedAmount": 12,
"usedAmountDaily": 3,
"dailyRefreshed": "2024-06-15",
"availableAmount": 88,
"limitAmount": 100,
"limitAmountDaily": 50,
"fairUseLimitReached": false
}
],
"page": {
"size": 20,
"totalElements": 1,
"totalPages": 1,
"currentPage": 1
}
}
Antwortfelder
| Feld | Typ | Beschreibung |
|---|---|---|
usageTypeKey | string | Bezeichner des Nutzungstyps (z.B. tokens, images) |
limitAmount | integer | Monatliches Limit fuer diesen Nutzungstyp |
limitAmountDaily | integer | Taegliches Limit. Wird um Mitternacht UTC zurueckgesetzt. |
usedAmount | integer | Gesamtverbrauch im aktuellen Abrechnungszeitraum |
usedAmountDaily | integer | Verbraucht seit Mitternacht UTC heute |
availableAmount | integer | Verbleibende Kapazitaet im aktuellen Zyklus |
bonusAmount | integer | Bonus-Credits zusaetzlich zur Planbasis |
spilloverAmount | integer | Ungenutzte Credits aus dem vorherigen Zyklus uebertragen |
fairUseLimitReached | boolean | Ob die Fair-Use-Richtlinien-Schwelle erreicht wurde |
dailyRefreshed | string | Datum der letzten Zuruecksetzung des Tageszaehlers (ISO-Datum) |
Wenn usedAmountDaily den Wert von limitAmountDaily erreicht, schlagen Anfragen
bis Mitternacht UTC fehl, selbst wenn availableAmount noch positiv ist. Pruefen Sie
beide Felder bei der Diagnose unerwarteter Fehler.
Nutzungstypen auflisten
/v1/usage-typesGibt alle gemessenen Ressourcentypen zurueck, die im System verfuegbar sind. Verwenden
Sie dies, um gueltige usageTypeKey-Werte fuer die Filterung von Kontingentantworten
zu ermitteln.
Beispiel
- cURL
- Python
- Node.js
- Go
curl "https://app.neuroflash.com/api/usage-service/v1/usage-types" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
types = requests.get(
"https://app.neuroflash.com/api/usage-service/v1/usage-types",
headers={"Authorization": f"Bearer {token}"},
).json()
for t in types["data"]:
print(f"{t['key']}: {t['displayName']}")
const types = await fetch(
"https://app.neuroflash.com/api/usage-service/v1/usage-types",
{ headers: { Authorization: `Bearer ${token}` } }
).then((r) => r.json());
types.data.forEach((t) => console.log(`${t.key}: ${t.displayName}`));
req, _ := http.NewRequest("GET",
"https://app.neuroflash.com/api/usage-service/v1/usage-types", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var types struct {
Data []struct {
Key string `json:"key"`
DisplayName string `json:"displayName"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&types)
for _, t := range types.Data {
fmt.Printf("%s: %s\n", t.Key, t.DisplayName)
}
Antwort
{
"data": [
{
"id": "c01a5fac-89a9-49a6-9392-80c6bb3322a4",
"key": "images",
"displayName": "Images",
"fairUsePolicyLimit": null,
"permissionKeyDailyLimit": "maxImagesPerDay",
"permissionKeyMonthlyLimit": "maxImagesPerMonth"
},
{
"id": "2bfd44d4-700d-48b1-8c15-676f1cca0763",
"key": "tokens",
"displayName": "Tokens",
"fairUsePolicyLimit": null,
"permissionKeyDailyLimit": "maxAiOutputTokensPerDay",
"permissionKeyMonthlyLimit": "maxAiOutputTokensPerMonth"
}
],
"page": {
"size": 20,
"totalElements": 2,
"totalPages": 1,
"currentPage": 1
}
}