For the complete documentation index, see llms.txt. This page is also available as Markdown.

Kostenstellen-Admin-API

Verwalten Sie die gültigen Projektcodes eines Tenants und den Schalter zur Kostenstellenvalidierung.

Bereich

Admin-API zum Verwalten der gültigen Projektcodes eines Mandanten und des Schalters zur Kostenstellenvalidierung: wie man sich authentifiziert, die CRUD-Endpunkte für Einzelcode und Batch, Massenimport per CSV/JSON mit Trockenlauf-Vorschau, Wertvalidierung und den Konfigurationsschalter.

Die Referenz pro Endpunkt ist hier absichtlich komprimiert. Die stets aktuelle Live-Referenz finden Sie unter analytics.theblockbrain.ai/docs (Scalar, automatisch aus der OpenAPI-Spezifikation gerendert). Diese Seite behandelt die Beschreibung, das Authentifizierungsmodell sowie Anfrage-/Antwortbeispiele.


Überblick

Die Cost Center Admin API verwaltet die Liste gültiger Projektcodes und den Schalter zur Kostenstellenvalidierung. Codes gelangen über den REST-Einzelcode-Endpunkt, die JSON-Batch-Endpunkte oder einen Massenimport per CSV/JSON hinein, und jeder mögliche Wert kann gegen die aktiven Codes des Mandanten geprüft werden.

Basis-URL: https://analytics.theblockbrain.ai

Basispfad: /api/v1/admin/cb-limit/cost-center

Eigenschaft
Wert

Basispfad

/api/v1/admin/cb-limit/cost-center

Host

https://analytics.theblockbrain.ai

Authentifizierung

Bearer JWT oder API-Schlüssel (sk-), Rolle admin. Der betroffene Mandant wird aus dem Token abgeleitet.

Wann wird Validierung erzwungen? Nur wenn der Validierungsschalter des Mandanten aktiviert ist (siehe PUT /config) und mindestens ein aktiver Code konfiguriert ist. Andernfalls wird jeder Wert akzeptiert. Jeder JSON-Batch-Endpunkt akzeptiert bis zu 10,000 Codes pro Anfrage. Verwenden Sie /import für größere Datenmengen.


API-Zusammenfassung

Jeder Endpunkt, den die Cost Center Admin API bereitstellt. Die Pfade sind relativ zum Basispfad /api/v1/admin/cb-limit/cost-center. Die vollständigen Anfrage- und Antwortdetails finden Sie in Scalar.

Gruppe
Methode
Endpunkt
Beschreibung

Codes

GET

/codes

Listet die Projektcodes des Mandanten auf (seitengesteuert, durchsuchbar, sortierbar).

Codes

POST

/codes

Einen einzelnen Projektcode hinzufügen oder aktualisieren (idempotentes Upsert).

Codes

DELETE

/codes

Einen Projektcode anhand seines Werts löschen.

Codes

POST

/codes/batch

Viele Codes in einer Anfrage hinzufügen oder aktualisieren.

Codes

POST

/codes/batch-set-active

Viele Codes aktivieren oder deaktivieren (pausieren oder fortsetzen).

Codes

POST

/codes/batch-delete

Viele Codes in einer Anfrage löschen.

Validierung

POST

/validate

Einen Wert gegen die aktiven Codes des Mandanten prüfen.

Import

POST

/import

Codes massenhaft aus einer CSV- oder JSON-Datei importieren.

Import

POST

/import/preview

Einen Import als Trockenlauf ausführen und jede Zeile klassifizieren.

Konfiguration

GET

/config

Den Validierungsschalter lesen.

Konfiguration

PUT

/config

Den Validierungsschalter ein- oder ausschalten.


Authentifizierung

Jeder Endpunkt erwartet ein Bearer-Token im Authorization -Header:

Es werden zwei Arten von Anmeldedaten akzeptiert, und beide laufen über denselben Header:

Anmeldedaten
Sieht aus wie
Wie es verifiziert wird

Zitadel JWT

ein JWT (header.payload.signature)

Gegen Zitadel verifiziert (JWKS, mit Token-Introspektion als Fallback). Dies ist der bestehende Access-Token-Pfad.

API-Schlüssel

sk- präfixierter Schlüssel

Per Introspektion über Blocky geprüft. Der Schlüssel autorisiert über seine eigene Rolle, daher muss er die admin Rolle tragen, dieselbe Hürde, die auch ein Benutzer-Token nehmen muss.

Jedes folgende Beispiel verwendet $TOKEN, der beide Anmeldedaten enthalten kann. Ein fehlendes oder fehlerhaftes Token gibt 401, und ein Token, dessen Rolle unter admin gibt zurück 403.


Gemeinsame Schemas

ProjectCode

Bezeichnung ist nullable. Quelle ist eines von rest-api, csv-import, json-import, admin-manual. Codes stimmen unabhängig von der Groß-/Kleinschreibung überein (getrimmt, kleingeschrieben), und die angezeigte Schreibweise ist die zuletzt gespeicherte.

Problem (422, application/problem+json)

Wird nur zurückgegeben von POST /validate wenn der Wert keinem aktiven Code entspricht. Alle anderen Fehler geben einen einfachen { "error": "…" } JSON-Body zurück.


Codes

GET /codes

Listet die Projektcodes des Mandanten auf. Seitengesteuerte Liste mit Gesamtanzahl. Die Admin-Ansicht zeigt auch pausierte Codes. Standardmäßig wird zuerst nach den neuesten sortiert.

Query-Parameter

Name
Typ
Erforderlich
Standard
Beschreibung

search

string

Nein

Groß-/Kleinschreibung-unabhängige Teilzeichenfolgenübereinstimmung auf Code oder Bezeichnung. Mindestlänge 1.

activeOnly

"true" | "false"

Nein

false

Übergeben Sie true um pausierte Codes auszublenden (das macht das Dropdown).

von

Datum (ISO)

Nein

Inklusive untere Grenze für createdAt.

bis

Datum (ISO)

Nein

Exklusive obere Grenze für createdAt.

page

Ganzzahl ≥ 1

Nein

1

Seitennummer ab 1.

pageSize

Ganzzahl 1..100

Nein

25

Zeilen pro Seite. Werte über 100 liefern 400 zurück.

sortBy

code | createdAt | active

Nein

createdAt

Sortierspalte.

sortOrder

asc | desc

Nein

desc

Sortierreihenfolge.

Antworten

Status
Body
Wann

200

{ items, totalCount, page, pageSize }

Seitengesteuerte Projektcodes.

400

{ error }

Ungültige Query-Parameter.

401

Fehlendes oder ungültiges Token.

403

Die Berechtigung cost-controls fehlt.

Anfrage

Antwort (200)

POST /codes

Einen einzelnen Projektcode hinzufügen oder aktualisieren. Idempotentes Upsert für den Code ohne Berücksichtigung der Groß-/Kleinschreibung. Dies ist der Endpunkt, den die Automatisierung eines Clients aufruft, um Codes synchron zu halten: beim Projektstart anlegen, mit active: falsepausieren. Das erneute Hinzufügen eines Codes aktualisiert seine Schreibweise, Bezeichnung und sein Active-Flag, behält aber seine ID und Audit-Spalten bei.

Das Weglassen von active setzt es zurück auf true, sodass ein erneutes Hinzufügen einen pausierten Code reaktiviert.

Body · application/json

Feld
Typ
Erforderlich
Beschreibung

code

string 1..256

Ja

Der Projektcode. Vor dem Speichern getrimmt.

Bezeichnung

string ≤ 512

Nein

Menschenlesbare Bezeichnung. Standardmäßig null.

active

boolean

Nein

Standardmäßig true. Setzen Sie false auf, um zu pausieren, ohne zu löschen.

Antworten

Status
Body
Wann

200

ProjectCode

Der per Upsert gespeicherte Code.

400

{ error }

Code fehlt, ist leer oder zu lang.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (200)

DELETE /codes

Einen Projektcode löschen. Löscht den passenden Code für den aufrufenden Mandanten hart (case-insensitive). Die Automatisierung des Clients ruft dies auf, wenn ein Projekt abgeschlossen wird. code Der zu löschende Codewert. Mindestlänge 1.

Query-Parameter

Name
Typ
Erforderlich
Beschreibung

code

string

Ja

{ "deleted": true }

Antworten

Status
Body
Wann

200

Eine Zeile wurde entfernt.

Eine Zeile wurde entfernt.

400

{ error }

Der code Query-Parameter fehlt.

404

{ error }

Kein Code stimmte überein.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

POST /codes/batch

Projektcodes in Batch hinzufügen oder aktualisieren. Das Mehrfach-Code-Pendant zu POST /codes. Upsertet viele Codes in einer einzigen JSON-Anfrage (idempotent, ohne Berücksichtigung der Groß-/Kleinschreibung). Jeder Eintrag trägt seine eigene Bezeichnung und active (Standard ist true). der erste gewinnt (genauso wie beim Dateiimport). Gibt die Anzahl der geschriebenen eindeutigen Codes zurück. Verwenden Sie /import für sehr große Dateiladungen.

Body · application/json

Feld
Typ
Erforderlich
Beschreibung

codes

Array 1..10000

Ja

Nicht leeres Array von Code-Einträgen.

codes[].code

string 1..256

Ja

Der Projektcode.

codes[].label

string ≤ 512

Nein

Menschenlesbare Bezeichnung.

codes[].active

boolean

Nein

Standardmäßig true.

Antworten

Status
Body
Wann

200

{ "upserted": number }

Anzahl der geschriebenen eindeutigen Codes.

400

{ error }

Leeres Array, mehr als 10.000 Einträge oder ein leerer/zu großer Code.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (200)

POST /codes/batch-set-active

Projektcodes in Batch aktivieren oder deaktivieren. Ändert nur das active Flag jedes aufgelisteten Codes (case-insensitive). Im Gegensatz zu POST /codesschreibt es niemals Bezeichnung oder Quelle neu, sodass ein Mehrfachauswahl-Pausieren oder -Fortsetzen die Anzeigemetadaten jedes Codes unverändert lässt. Durch Deaktivieren werden Codes pausiert: Sie hören auf zu validieren und bleiben im Dropdown, ohne gelöscht zu werden. Gibt die Anzahl der aktualisierten vorhandenen Codes zurück (nicht vorhandene Codes werden ignoriert).

Body · application/json

Feld
Typ
Erforderlich
Beschreibung

codes

Array[] 1..10000

Ja

Nicht leeres Array von Codewerten, jeweils 1..256 Zeichen.

active

boolean

Ja

true zum Aktivieren, false zum Pausieren.

Antworten

Status
Body
Wann

200

{ "updated": number }

Anzahl der aktualisierten vorhandenen Codes.

400

{ error }

Leeres Array, fehlender oder nicht-boolescher activeWert oder ein zu großer Code.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (200)

POST /codes/batch-delete

Projektcodes in Batch löschen. Löscht jeden aufgelisteten Code (case-insensitive) in einer Anfrage hart. Unterstützt das Mehrfachauswahl-Löschen der Admin-Oberfläche. Gibt die Anzahl der tatsächlich entfernten Codes zurück, die geringer sein kann als angefordert, wenn einige Codes nicht existierten.

Body · application/json

Feld
Typ
Erforderlich
Beschreibung

codes

Array[] 1..10000

Ja

Nicht leeres Array von Codewerten, jeweils 1..256 Zeichen.

Antworten

Status
Body
Wann

200

{ "deleted": number }

Anzahl der tatsächlich entfernten Codes.

400

{ error }

Leeres Array, mehr als 10.000 Einträge oder ein zu großer Code.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (200)


Validierung

POST /validate

Einen Projektcode validieren. Gibt { "valid": true } zurück, wenn der Wert einem der aktiven Codes des Mandanten entspricht. Die Übereinstimmung ist nicht case-sensitiv und trimmt Leerzeichen. Ein pausierter Code gilt als ungültig.

Body · application/json

Feld
Typ
Erforderlich
Beschreibung

Wert

string

Ja

Der zu prüfende Wert. Mindestlänge nach dem Trimmen 1.

Feld

string

Nein

Im Vertrag vorhanden. Derzeit wird nur project-code validiert.

Antworten

Status
Body
Wann

200

{ "valid": true }

Der Wert entspricht einem aktiven Code.

400

{ error }

Wert fehlt oder ist leer.

422

Problem (problem+json)

Der Wert ist kein gültiger Projektcode.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (422)


Import

POST /import

Projektcodes aus einer CSV- oder JSON-Datei importieren. Multipart-Upload. Codes werden getrimmt, leere Zeilen übersprungen und doppelte Einträge in der Datei case-insensitive zusammengeführt (der erste gewinnt). Jeder Code wird per Upsert gespeichert, sodass ein erneuter Import idempotent ist. Importierte Codes werden immer aktiviert. Eine Zeile, deren Code länger als 256 Zeichen ist oder deren Bezeichnung länger als 512 Zeichen ist, wird als Fehlerzeile gemeldet und nicht geschrieben (entspricht den API-Feldgrenzen). Maximal 5 MB und 200.000 Zeilen.

Body · multipart/form-data

Feld
Typ
Erforderlich
Beschreibung

Datei

binär

Ja

CSV (Kopfzeile mit einer code Spalte, optional Bezeichnung) oder JSON.

Format

"csv" | "json"

Ja

Wie die Datei geparst werden soll.

Akzeptierte JSON-Strukturen

Antworten

Status
Body
Wann

200

{ imported, duplicatesInFile, errors[] }

Importzusammenfassung. Jeder Fehler enthält { row, code, reason }.

400

{ error }

Datei fehlt, falsches Format oder nicht parsbar (keine code Spalte, ungültiges JSON, falsche Struktur).

413

{ error }

Die Datei überschreitet das Größen- oder Zeilenlimit.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (200)

POST /import/preview

Vorschau eines CSV/JSON-Imports, ohne etwas zu schreiben. Analysiert die Datei und klassifiziert jede Zeile in Dateireihenfolge (neu, Aktualisierung, Duplikat, Fehler) damit der Admin vor dem Import prüfen kann. Eine Zeile ist ein Fehler wenn ihr Code leer ist oder ihr Code/Label die Feldgrenzen überschreitet (256 / 512). Aktualisierung gegenüber neu wird gegen die vorhandenen Codes des Mandanten aufgelöst. Schreibt nichts. Die Einträge Array ist auf 2000 Zeilen begrenzt, aber die Zusammenfassung zählt jede Zeile.

Body · multipart/form-data

Feld
Typ
Erforderlich
Beschreibung

Datei

binär

Ja

Gleiche Dateistrukturen wie /import.

Format

"csv" | "json"

Ja

Wie die Datei geparst werden soll.

Antworten

Status
Body
Wann

200

{ entries[], totalRows, truncated, summary }

Klassifizierung pro Zeile plus eine Zusammenfassung über alle Zeilen.

400

{ error }

Datei fehlt, falsches Format oder nicht analysierbar.

413

{ error }

Die Datei überschreitet das Größen- oder Zeilenlimit.

401 / 403

Nicht autorisiert oder verboten.

Antwort (200)


Konfiguration

GET /config

Ruft den Schalter zur Kostenstellenvalidierung des Mandanten ab. Gibt zurück, ob die Validierung für den aufrufenden Mandanten aktiviert ist. Ein Mandant ohne Einstellungsdatensatz meldet false.

Antworten

Status
Body
Wann

200

{ "validationEnabled": boolean }

Schalterzustand.

401 / 403

Nicht autorisiert oder verboten.

Anfrage

Antwort (200)

PUT /config

Setzt den Schalter zur Kostenstellenvalidierung des Mandanten. Schaltet die Validierung ein oder aus. Wenn sie erstmals aktiviert wird, wird aus der Systemvorgabe ein Einstellungsdatensatz angelegt. Beim Deaktivieren oder erneuten Aktivieren werden nur dieser Schalter und die Audit-Spalten aktualisiert und alle anderen Konfigurationen bleiben erhalten. Die Validierung greift erst, wenn der Schalter aktiviert ist und mindestens ein aktiver Code konfiguriert ist.

Body · application/json

Feld
Typ
Erforderlich
Beschreibung

validationEnabled

boolean

Ja

Der neue Schalterzustand.

Antworten

Status
Body
Wann

200

{ "validationEnabled": boolean }

Aktualisierter Schalterzustand.

400

{ error }

validationEnabled fehlt oder ist kein boolescher Wert.

401 / 403

Nicht autorisiert oder verboten.

Anfrage


Zuletzt aktualisiert