Entwickeln / Anleitungen
Request-Tags (Preview)
Wie Sie Anfragen mit X-Noirdoc-Tags nach Mandat, Kostenstelle oder Team kennzeichnen, eigene Budgets und Modelleinschränkungen je Tag vergeben und Tags über /v1/tags verwalten.
Mit Request-Tags ordnen Sie einzelne Anfragen über den Header X-Noirdoc-Tags einem Mandat, einer Kostenstelle, einem Team oder einem Mandanten Ihrer Anwendung zu – ohne für jedes Mandat einen eigenen API-Schlüssel auszustellen. Jedes Tag führt eigene Verbrauchszähler und kann ein eigenes Euro-Budget, eigene Modell- und Anbieter-Einschränkungen sowie einen eigenen Noirdoc-Shield-Modus (shield_mode) tragen.
-
Standard-Tag-Vorlage oder Tags im Portal anlegen
Nach der Freischaltung verwalten Admins Ihrer Organisation Tags unter Models → Tags.
Im Bereich Standard-Tag-Vorlage legen Sie fest, wie das Gateway mit noch unbekannten Tag-Namen im Header
X-Noirdoc-Tagsumgeht:- Unbekannte Tags bei erster Verwendung automatisch anlegen (Standard: eingeschaltet): Sendet Ihre Anwendung ein neues Tag, legt das Gateway es bei der ersten weitergeleiteten Anfrage automatisch an und übernimmt Budget, Modell- und Anbieter-Einschränkungen sowie
shield_modeaus der Vorlage. - Automatische Anlage ausgeschaltet: Unbekannte Tags im Header
X-Noirdoc-Tagslehnt das Gateway mit Statuscode 403 und Fehlercodetag_not_foundab. Legen Sie gültige Tags vorab über Neues Tag oder perPOST /v1/tagsan.
Für Tag-Namen gelten folgende Regeln:
- Format: 1 bis 64 Zeichen aus
a-z,A-Z,0-9sowie_,.,:und-, beginnend mit einem Buchstaben oder einer Ziffer (^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,63}$). - Reservierter Name:
_defaultist für den Vorlagen-Endpunkt/v1/tags/_defaultreserviert und darf nicht als Tag-Name verwendet werden. - Obergrenze: Jede Organisation kann bis zu 1.000 Request-Tags anlegen (
tag_limit_exceeded).
Ergebnis: Ihre Organisation hat eine Standard-Tag-Vorlage oder vorab angelegte Tags.
- Unbekannte Tags bei erster Verwendung automatisch anlegen (Standard: eingeschaltet): Sendet Ihre Anwendung ein neues Tag, legt das Gateway es bei der ersten weitergeleiteten Anfrage automatisch an und übernimmt Budget, Modell- und Anbieter-Einschränkungen sowie
-
Budget, Einschränkungen und Noirdoc Shield je Tag festlegen
Für die Standard-Tag-Vorlage und für jedes einzelne Tag können Sie dieselben Leitplanken setzen wie für einen API-Schlüssel (siehe Budgets je Schlüssel, Modelle & Anbieter einschränken und Noirdoc Shield einrichten):
- Ausgabenlimit (€) und Zurücksetzen: Nie, Täglich (00:00 UTC), Wöchentlich (montags 00:00 UTC) oder Monatlich (am 1. des Monats um 00:00 UTC). Leer bedeutet kein eigenes Limit für dieses Tag.
- Noirdoc Shield (
shield_mode): Standard ("inherit", gibt an Header und Organisations-Standard weiter), Aktiv ("on", schaltet Shield für Anfragen mit diesem Tag ein) oder Aus ("off", schaltet Shield aus, sofern weder die Organisations-Richtlinieenforcednoch Schlüssel oder ein weiteres mitgesendetes Tag Shield aktivieren). - Erlaubte Modelle: Alle Modelle oder Nur ausgewählte Modelle.
- Anbieter-Einschränkungen: Datenresidenz, Nur ohne CLOUD-Act-Exposition, Nur §203-abgedeckte Provider und eine Auswahl erlaubter Provider.
Ergebnis: Unter Models → Tags zeigt die Tabelle für jedes Tag Status (Aktiv oder Inaktiv), Verbrauch im laufenden Zeitraum, Gesamtausgaben und den Zeitpunkt der letzten Verwendung.
-
X-Noirdoc-Tags mit Anfragen senden
Übergeben Sie im Header
X-Noirdoc-Tags1 bis 5 durch Komma getrennte Tag-Namen. Mehrfach genannte Tags in derselben Anfrage fasst das Gateway zusammen. Vor dem Weiterleiten an den Anbieter entfernt das Gateway den Header.Auch
GET /v1/modelswertetX-Noirdoc-Tagsaus und gibt nur Modelle zurück, die sowohl für den Schlüssel als auch für alle genannten Tags erlaubt sind. Ebenso akzeptiertPOST /v1/shield/inspectden HeaderX-Noirdoc-Tagsfür Kostenzuordnung und Tag-Budgets.Ergebnis: Das Gateway prüft Budget und Einschränkungen der genannten Tags und verbucht die Anfrage nach der Antwort auf jedes Tag.
curl https://api.noirdoc.de/v1/chat/completions \ -H "Authorization: Bearer $NOIRDOC_API_KEY" \ -H "X-Noirdoc-Tags: mandat-2026-042,team-arbeitsrecht" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.8-27b", "max_tokens": 500, "messages": [{"role": "user", "content": "Hallo"}] }'import os from openai import OpenAI client = OpenAI( base_url="https://api.noirdoc.de/v1", api_key=os.environ["NOIRDOC_API_KEY"], ) response = client.chat.completions.create( model="qwen3.8-27b", max_tokens=500, messages=[{"role": "user", "content": "Hallo"}], extra_headers={ "X-Noirdoc-Tags": "mandat-2026-042,team-arbeitsrecht", }, )import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.noirdoc.de/v1", apiKey: process.env.NOIRDOC_API_KEY, }); const response = await client.chat.completions.create( { model: "qwen3.8-27b", max_tokens: 500, messages: [{ role: "user", content: "Hallo" }], }, { headers: { "X-Noirdoc-Tags": "mandat-2026-042,team-arbeitsrecht", }, }, );
Mehrere Tags und Zusammenspiel mit dem Schlüssel
Wenn Sie ein oder mehrere Tags in X-Noirdoc-Tags mitsenden, kombiniert das Gateway die Regeln der Organisation, des API-Schlüssels und aller genannten Tags:
- Erlaubte Modelle und Anbieter (Schnittmenge): Ein Modell und ein Anbieter kommen nur infrage, wenn sie für die Organisation (§ 203 StGB), für den aufrufenden API-Schlüssel und für jedes mitgesendete Tag erlaubt sind. Schließt ein Tag das Modell oder alle seine Anbieter aus, antwortet das Gateway mit 403
model_not_allowed_for_tagbzw.provider_not_allowed_for_tag. - Noirdoc Shield (
shield_modeund Vorrangfolge): Ob Shield eine Anfrage prüft, folgt der Reihenfolge Organisations-Richtlinieenforced> API-Schlüsselshield_mode("on"/"off") > Request-Tagshield_mode> HeaderX-Noirdoc-Shield> Organisations-Standard (default_on/default_off), siehe Richtlinie und Vorrangfolge. Sind mehrere Tags inX-Noirdoc-Tagsangegeben, gewinnt"on"vor"off", sobald mindestens ein angehängtes Tag auf"on"steht;"inherit"gibt an die nächste Stufe weiter. - Reihenfolge der Budgetprüfung: Vor der Anfrage prüft das Gateway zuerst das Guthaben der Organisation (
insufficient_credit), danach das Budget des API-Schlüssels (key_budget_exhausted) und anschließend die Budgets der Tags in der Reihenfolge ausX-Noirdoc-Tags. Ist das Budget eines Tags erschöpft oder kleiner als die Kostenschätzung der Anfrage, antwortet das Gateway mit 402tag_budget_exhausted;messagenennt das betroffene Tag. - Volle Kostenbuchung je Tag: Nach der Antwort bzw. Prüfung bucht das Gateway die vollen Kosten der Anfrage – von Noirdoc verwaltete Modelle mit Preis sowie die Prüfgebühr von Noirdoc Shield (0,40 € je 1 Mio. geprüfter Eingabe-Tokens, auch bei
POST /v1/shield/inspectund bei aktivem Shield auf eigenen Anbietern/BYOK) – sowohl auf den API-Schlüssel als auch auf jedes inX-Noirdoc-Tagsgenannte Tag. Damit können Sie unabhängige Dimensionen – etwa ein Mandatsbudget (mandat-2026-042) und ein Abteilungsbudget (team-arbeitsrecht) – gleichzeitig überwachen. Anfragen über eigene Anbieter (BYOK) ohne aktives Shield zählen wie beim Schlüssel-Budget mit 0 €.
Tags per API verwalten (/v1/tags)
Neben der Oberfläche unter Models → Tags können Sie Tags und die Standard-Tag-Vorlage über den Endpunkt /v1/tags verwalten – zum Beispiel automatisch beim Anlegen einer neuen Akte in Ihrer Kanzlei- oder Fachsoftware.
Berechtigung des API-Schlüssels
Standardmäßig darf ein API-Schlüssel /v1/tags nicht aufrufen (403 insufficient_key_permissions). Aktivieren Sie unter Models → API-Schlüssel beim Erstellen oder Bearbeiten des Schlüssels die Option Tag-Verwaltung erlauben (/v1/tags).
Endpunkte im Überblick
| Methode und Pfad | Wirkung |
|---|---|
GET /v1/tags | Listet die Tags der Organisation (optional mit limit, offset und Suchfilter q). |
POST /v1/tags | Legt ein neues Tag an (201 Created). Existiert der Name bereits, antwortet das Gateway mit 409 tag_already_exists. |
GET /v1/tags/_default | Liest die Standard-Tag-Vorlage der Organisation (tag_auto_create_enabled, shield_mode, Budget und Einschränkungen). |
PUT /v1/tags/_default | Aktualisiert die Standard-Tag-Vorlage der Organisation. |
GET /v1/tags/{name} | Liest ein einzelnes Tag samt shield_mode, aktuellem Verbrauch (budget_spent_eur), Gesamtausgaben (budget_spent_total_eur) und last_used_at. |
PUT /v1/tags/{name} | Legt das Tag an oder ersetzt seine Einstellungen; bestehende Verbrauchszähler bleiben erhalten. |
PATCH /v1/tags/{name} | Aktualisiert einzelne Felder eines bestehenden Tags; bestehende Verbrauchszähler bleiben erhalten. |
DELETE /v1/tags/{name} | Deaktiviert ein aktives Tag oder löscht ein bereits inaktives Tag ohne Abrechnungshistorie (204 No Content). |
Beim Aktualisieren per PUT /v1/tags/{name} oder PATCH /v1/tags/{name} bleiben budget_spent_eur, budget_spent_total_eur und last_used_at unverändert.
DELETE /v1/tags/{name} arbeitet zweistufig, damit Abrechnungsdaten nicht verloren gehen:
- Aktives Tag (
is_active: true): Der ersteDELETE-Aufruf setzt das Tag aufis_active: false(204 No Content). Anfragen mit diesem Tag erhalten danach 403tag_disabled. Sie können das Tag jederzeit perPATCH /v1/tags/{name}mit{"is_active": true}wieder aktivieren. - Bereits inaktives Tag (
is_active: false): Ein weitererDELETE-Aufruf löscht das Tag nur dann endgültig (204 No Content), wenn noch keine Kosten darauf verbucht wurden (budget_spent_total_eur == 0). Wurden bereits Kosten verbucht, antwortet das Gateway mit 409tag_has_spend_history.
curl -X PUT https://api.noirdoc.de/v1/tags/mandat-2026-042 \
-H "Authorization: Bearer $NOIRDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "Akte 2026/042 – Arbeitsrecht",
"budget_limit_eur": 25.0,
"budget_reset": "monthly",
"shield_mode": "on",
"allowed_residencies": ["DE", "EU"],
"require_no_cloud_act": true,
"require_section203": true
}'Fehler
| Status | Code | Bedeutung |
|---|---|---|
| 400 | invalid_request_tags | Der Header X-Noirdoc-Tags oder der Tag-Name im Pfad unter /v1/tags ist leer, enthält mehr als 5 Tags oder entspricht nicht dem Format ^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,63}$. |
| 402 | tag_budget_exhausted | Das Budget eines in X-Noirdoc-Tags genannten Tags ist für den laufenden Zeitraum aufgebraucht oder reicht für die geschätzten Kosten der Anfrage nicht aus; message nennt das Tag. |
| 403 | request_tags_disabled | Die Anfrage sendet X-Noirdoc-Tags oder ruft /v1/tags auf, aber Request-Tags (Preview) sind für diese Organisation nicht freigeschaltet. |
| 403 | tag_not_found | Das genannte Tag existiert nicht. Bei Anfragen mit X-Noirdoc-Tags ist die automatische Tag-Anlage ausgeschaltet (Statuscode 403); auf /v1/tags/{name} antwortet das Gateway mit Statuscode 404. |
| 403 | tag_disabled | Ein in X-Noirdoc-Tags genanntes Tag ist deaktiviert. |
| 403 | tag_limit_exceeded | Die Organisation hat die Obergrenze von 1.000 Request-Tags erreicht. |
| 403 | insufficient_key_permissions | Dem API-Schlüssel fehlt die Berechtigung für /v1/tags (can_manage_tags) oder /v1/shield/policy (can_manage_shield), ein Schlüssel mit fest aktiviertem Shield (shield_mode: on) versucht die Shield-Richtlinie oder shield_mode eines Tags abzuschwächen, oder das Tag soll weiter reichende Modelle, Anbieter oder Compliance-Regeln erhalten als der aufrufende Schlüssel selbst besitzt. |
| 403 | model_not_allowed_for_tag | Das Modell gehört nicht zu den erlaubten Modellen eines in X-Noirdoc-Tags genannten Tags. |
| 403 | provider_not_allowed_for_tag | Die Einschränkungen eines in X-Noirdoc-Tags genannten Tags (Anbieter, Datenresidenz, CLOUD Act, § 203) schließen jeden Anbieter dieses Modells aus. |
| 409 | tag_already_exists | Ein Tag mit diesem Namen existiert in der Organisation bereits. |
| 409 | tag_has_spend_history | Für das Tag wurden bereits Kosten verbucht; es lässt sich deshalb nicht endgültig löschen. |