Public API für serverseitige Badge-Workflows
Alle Endpunkte, Parameter, Header und Resultate für Integrationen mit privatem API-Key. Der Vertragsstand wird direkt aus dem OpenAPI-Dokument der API erzeugt.
Schnellstart
Basis-URL: https://api.namensschild.io
- 1Privaten API-Key im Dashboard erzeugen und ausschließlich serverseitig speichern.
- 2Für Tooling und Automatisierung zuerst /openapi.json oder die Root-Discovery unter / abrufen.
- 3Mit GET /v1/templates und GET /v1/paper-presets kompatible IDs für Vorlage und Papierpreset ermitteln.
- 4Mit GET /v1/credits das verfügbare Guthaben und den Account-Status prüfen.
- 5Mit POST /v1/generate `template_id`, CSV, `slot_mapping` und entweder `paper_preset_id` oder `paper_layout` senden und das PDF direkt speichern.
- 6Die Export-ID persistieren und bei Bedarf später über GET /v1/exports oder GET /v1/exports/{id} weiterverwenden.
Authentifizierung & Header
Persönlicher API-Schlüssel im Format Bearer ns_live_… oder Bearer ns_test_…
AuthorizationheaderPrivater API-Schlüssel als Bearer-Token. Gehört ausschließlich in einen vertrauenswürdigen Server-Kontext.
Authorization: Bearer <api_key>Test vs. Livens_test_… / ns_live_…Beide Schlüsselarten sprechen denselben Vertrag an, trennen aber die Verarbeitungsumgebung.
X-Request-IdheaderJede Antwort enthält diese Korrelations-ID. Für Support- und Debug-Fälle in den eigenen Logs speichern.
Idempotency-KeyheaderBei POST /v1/generate immer mitsenden, wenn das System Requests automatisch wiederholt – verhindert Doppelabbuchung.
Discovery & Verträge
Für Agenten, SDKs und Integrations-Tooling veröffentlicht die API-Domain zusätzlich zur menschlichen Referenz mehrere maschinenlesbare Discovery-Artefakte.
https://api.namensschild.io/Maschinenlesbarer Einstieg mit Basis-URL, Auth-Hinweisen, Discovery-Artefakten und den wichtigsten Ressourcen.
https://api.namensschild.io/openapi.jsonKanonische Maschinenbeschreibung der Public API. /openapi/v1 bleibt als Kompatibilitätsalias erreichbar.
https://api.namensschild.io/llms.txtKuratierter KI-Hinweis für Agenten, der auf OpenAPI, Docs und die wichtigsten Endpunkte verweist.
https://api.namensschild.io/.well-known/api-catalogStandardisierte Discovery im Linkset-Format mit service-desc-, service-doc- und service-meta-Verweisen.
/v1/generateDer Export-Endpunkt nimmt eine explizite `template_id`, CSV, ein semantisches `slot_mapping` und genau eine Layoutquelle entgegen: entweder `paper_preset_id` oder `paper_layout`. Daraus rendert die API sofort ein PDF und belastet die benötigten Credits direkt im selben Request.
Scope: exports:write
- Erfolgsantwort: PDF-Datei im Body mit Export- und Credit-Headern.
- Pflichtfelder: `template_id`, `slot_mapping`, `csv` und genau eines von `paper_preset_id` oder `paper_layout`.
- Die Schildgröße kommt aus der Vorlage; Preset oder Direktlayout definieren nur Seite, Ränder, Lücken, Spalten und Zeilen.
- `slot_mapping` ist ein JSON-String im Format Slot -> CSV-Header.
- Optional: `Idempotency-Key` für sichere Retries bei Netzwerkabbrüchen.
Parameter
Idempotency-KeystringheaderoptionalOptionale UUID, um wiederholte Schreib-Requests 24 Stunden lang idempotent zu machen.
Format: uuid
Request Body
multipart/form-data · erforderlich
template_idstringerforderlichKonkrete Vorlagen-ID für das Badge-Layout.
paper_preset_idstringoptionalOptionale Papierpreset-ID. Sende entweder paper_preset_id oder paper_layout.
paper_layoutstringoptionalOptionaler JSON-String mit direktem Papierlayout. Sende entweder paper_layout oder paper_preset_id.
slot_mappingstringerforderlichJSON-String im Format {"first_name":"Vorname","last_name":"Nachname"}. Pflicht-Slots hängen von der gewählten Vorlage ab.
csvstringerforderlichFormat: binary
fontstringoptionalWerte: courier, helvetica, times · Standardwert: courier
colorstringoptionalPattern: ^#[0-9A-Fa-f]{6}$
logostringoptionalFormat: binary
webhook_urlstringoptionalFormat: uri
modestringoptionalWerte: live, test · Standardwert: live
Verfügbare Template-Slots
Klassisch
tpl_classic_default
Pflicht-Slots: first_name, last_name, company, role
Mit Logo
tpl_logo_default
Pflicht-Slots: first_name, last_name, company
Mit QR-Code
tpl_qr_default
Pflicht-Slots: first_name, last_name, company, qr_code
Minimal
tpl_minimal_default
Pflicht-Slots: first_name, last_name
Responses
200PDF erfolgreich erzeugt.application/pdf · string
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
X-Export-IdstringoptionalX-Credits-ChargedintegeroptionalMinimum: 0
X-Credits-RemainingintegeroptionalMinimum: 0
400Pflichtfeld fehlt oder ungültiger Wert.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
402Nicht genug Credits für den angeforderten Export.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
413CSV oder Logo ist größer als das erlaubte Limit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
422CSV oder slot_mapping konnten nicht verarbeitet werden.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Ein privater API-Key gehört ausschließlich in dein Backend oder in einen anderen vertrauenswürdigen Server-Kontext.
- Gültige Vorlagen und Papierpresets findest du über `GET /v1/templates` und `GET /v1/paper-presets`.
- `paper_layout` ist ein JSON-String. Verwende ihn, wenn du Seitengröße, Ränder, Lücken und Raster direkt pro Export festlegen willst.
- Logo-Dateien laufen außerhalb von `slot_mapping` über das separate Multipart-Feld `logo`.
- Die Antwort enthält immer `X-Export-Id`, `X-Credits-Charged` und `X-Credits-Remaining`.
curl https://api.namenschild.io/v1/generate \
-X POST \
-H "Authorization: Bearer ns_live_dein_privater_api_key" \
-H "Idempotency-Key: 9a4f3b8e-2c1d-4e7f-b0a1-1234567890ab" \
-F "template_id=tpl_classic_default" \
-F "paper_preset_id=ppt_badge_80x50_tech_sheet" \
-F 'slot_mapping={"first_name":"Vorname","last_name":"Nachname","company":"Firma","role":"Position"}' \
-F "font=helvetica" \
-F "color=#7836F4" \
-F "csv=@teilnehmende.csv;type=text/csv" \
-F "logo=@logo.png;type=image/png" \
-D headers.txt \
-o badges.pdf{
"sheet": { "width_mm": 210, "height_mm": 297 },
"margins": { "top_mm": 20, "right_mm": 15, "bottom_mm": 20, "left_mm": 15 },
"gaps": { "horizontal_mm": 20, "vertical_mm": 20 },
"grid": { "columns": 2, "rows": 4 },
"fill_direction": "row_major"
}HTTP/1.1 200 OK
Content-Type: application/pdf
X-Request-Id: 34f7251c-36e8-48a2-a34d-09a6515e64af
X-Export-Id: exp_8a0f4f17c56a4dbca28ee935
X-Credits-Charged: 48
X-Credits-Remaining: 152{
"type": "invalid_slot_mapping",
"message": "Für die gewählte Vorlage fehlen Pflicht-Slots: role.",
"docUrl": "https://docs.namenschild.io/api#errors"
}/v1/creditsDieser Endpunkt liefert den aktuellen Credit-Stand des Accounts, das nächste Verfallsdatum und die Auto-Refill-Einstellungen.
Scope: credits:read
- Typischer Einsatz: Vor einem Export die verfügbare Kapazität prüfen.
- Die Antwort ist immer JSON.
- `credits_remaining` ist die Zahl, die für metered Accounts tatsächlich verbraucht werden kann.
Responses
200Aktueller Credit-Stand.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
credits_remainingintegererforderlichMinimum: 0
credits_expire_atstring | nullerforderlichFormat: date-time
is_unlimitedbooleanerforderlichauto_refillbooleanerforderlichauto_refill_thresholdinteger | nullerforderlichMinimum: 0
auto_refill_packagestring | nullerforderlich401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Bei Unlimited-Accounts bleibt `credits_remaining` als technischer Saldo sichtbar, `is_unlimited` ist dann zusätzlich `true`.
- Die Daten kommen aus dem serverseitigen Ledger und nicht aus einer separat gepflegten Balance-Tabelle.
curl https://api.namenschild.io/v1/credits \
-H "Authorization: Bearer ns_live_dein_privater_api_key"{
"credits_remaining": 152,
"credits_expire_at": "2026-12-31T23:59:59.000Z",
"is_unlimited": false,
"auto_refill": true,
"auto_refill_threshold": 50,
"auto_refill_package": "200"
}/v1/templatesDieser Endpunkt listet alle verfügbaren Vorlagen des Accounts. Optional kannst du die Liste auf Vorlagen einschränken, die mit einem bestimmten Papierpreset kompatibel sind.
Scope: templates:read
- Typischer Einsatz: zuerst eine gültige `template_id` für den Export auswählen.
- Optionaler Filter: `paper_preset_id`.
- Die Antwort zeigt pro Vorlage die erforderlichen Public-API-Slots.
Parameter
paper_preset_idstringqueryoptionalOptionaler Kompatibilitätsfilter für ein bestimmtes Papierpreset.
Responses
200Verfügbare Vorlagen für den Account.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
dataarrayerforderlich401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Die Liste enthält Systemvorlagen und private Vorlagen des authentifizierten Accounts.
- Nutze die Slot-Liste direkt, um dein `slot_mapping` gegen die CSV-Header zu validieren.
curl "https://api.namenschild.io/v1/templates?paper_preset_id=ppt_badge_80x50_tech_sheet" \
-H "Authorization: Bearer ns_live_dein_privater_api_key"{
"data": [
{
"id": "tpl_classic_default",
"name": "Klassisch",
"design": "classic",
"badge_width_mm": 80,
"badge_height_mm": 50,
"default_paper_preset_id": "ppt_badge_80x50_tech_sheet",
"required_slots": ["first_name", "last_name", "company", "role"]
}
]
}/v1/templates/{id}Dieser Endpunkt liefert die Detailansicht einer einzelnen Vorlage, inklusive Status, Sichtbarkeit und erforderlicher Slots.
Scope: templates:read
- Typischer Einsatz: Detailvalidierung einer bereits ausgewählten `template_id`.
- Die Antwort bleibt JSON und enthält keine Binärdaten.
- Bei unbekannter oder nicht verfügbarer Vorlage liefert der Endpunkt `404`.
Parameter
idstringpatherforderlichResponses
200Vorlagen-Detailansicht.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
idstringerforderlichnamestringerforderlichdesignstringerforderlichWerte: classic, logo, qr, minimal
badge_width_mmnumbererforderlichbadge_height_mmnumbererforderlichdefault_paper_preset_idstringerforderlichrequired_slotsarrayerforderlichvisibilitystringerforderlichWerte: system, private
statusstringerforderlichWerte: draft, published
definition_versionintegererforderlichMinimum: 1
401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
404Ressource nicht gefunden.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Für den eigentlichen Export sendest du anschließend die `template_id` zusammen mit genau einer Layoutquelle: `paper_preset_id` oder `paper_layout`.
- Die Slot-Liste ist identisch zur Listenansicht und eignet sich für serverseitige Validierung.
curl https://api.namenschild.io/v1/templates/tpl_classic_default \
-H "Authorization: Bearer ns_live_dein_privater_api_key"/v1/paper-presetsDieser Endpunkt listet verfügbare Papierpresets mit ihren Layout-Voreinstellungen wie Seitengröße, Rändern, Lücken und Raster.
Scope: templates:read
- Typischer Einsatz: zuerst eine gültige `paper_preset_id` für den Export auswählen.
- Optionaler Filter: `template_id`.
- `paper_layout` beschreibt die Layout-Defaults, `badges_per_page` die Kapazität.
Parameter
template_idstringqueryoptionalOptionaler Filter auf Presets, deren Layout zur Schildgröße einer bestimmten Vorlage passt.
Responses
200Verfügbare Papierpresets für den Account.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
dataarrayerforderlich401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Die eigentliche Platzierung im PDF wird deterministisch aus Vorlage und `paper_layout` berechnet.
- Systempresets kommen von namensschild.io; private Presets sind nur für den jeweiligen Account sichtbar.
curl "https://api.namenschild.io/v1/paper-presets?template_id=tpl_classic_default" \
-H "Authorization: Bearer ns_live_dein_privater_api_key"{
"data": [
{
"id": "ppt_badge_80x50_tech_sheet",
"name": "Technischer A4-Bogen 80x50",
"description": "A4-Preset für 80x50-mm-Namensschilder.",
"purchase_url": null,
"visibility": "system",
"paper_layout": {
"sheet": { "width_mm": 210, "height_mm": 297 },
"margins": { "top_mm": 20, "right_mm": 20, "bottom_mm": 227, "left_mm": 20 },
"gaps": { "horizontal_mm": 10, "vertical_mm": 0 },
"grid": { "columns": 2, "rows": 1 },
"fill_direction": "row_major"
},
"badges_per_page": 2,
"created_at": "2026-06-03T10:00:00.000Z",
"updated_at": "2026-06-03T10:00:00.000Z"
}
]
}/v1/paper-presets/{id}Dieser Endpunkt liefert die Detailansicht eines einzelnen Papierpresets inklusive Name, Beschreibung, Kauf-Link und vollständigem `paper_layout`.
Scope: templates:read
- Typischer Einsatz: Layoutlogik und technische Maße eines Presets transparent nachvollziehen.
- Die Antwort enthält keine Badge-Größe; diese kommt immer aus der Vorlage.
- Bei unbekanntem oder nicht verfügbarem Papierpreset liefert der Endpunkt `404`.
Parameter
idstringpatherforderlichResponses
200Papierpreset-Detailansicht.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
idunbekannterforderlichnameunbekannterforderlichdescriptionunbekannterforderlichpurchase_urlunbekannterforderlichvisibilityunbekannterforderlichpaper_layoutobjecterforderlichbadges_per_pageunbekannterforderlichcreated_atunbekannterforderlichupdated_atunbekannterforderlichdefinition_versionintegererforderlichMinimum: 1
401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
404Ressource nicht gefunden.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Die konkrete Slot-Platzierung wird aus `paper_layout` und der gewählten Vorlage berechnet.
- Für die Exportanfrage genügt später die `paper_preset_id`; alternativ kannst du ein eigenes `paper_layout` direkt senden.
curl https://api.namenschild.io/v1/paper-presets/ppt_badge_80x50_tech_sheet \
-H "Authorization: Bearer ns_live_dein_privater_api_key"/v1/exportsDieser Endpunkt listet Exporte des authentifizierten Accounts mit Filtern und Keyset-Cursor-Pagination.
Scope: exports:read
- Standardmäßig werden alle Exporte des Accounts in absteigender Zeitreihenfolge geliefert.
- Filter verfügbar: `source`, `status`, `template_id`, `paper_preset_id`, `created_after`, `created_before`.
- Für die nächste Seite wird `next_cursor` aus der Antwort unverändert wieder an `cursor` übergeben.
Parameter
limitintegerqueryoptionalMinimum: 1 · Maximum: 100 · Standardwert: 20
cursorstringqueryoptionalOpaker Cursor für die nächste Seite.
sourcestringqueryoptionalWerte: app, public_api
statusstringqueryoptionalWerte: pending, processing, ready, failed
template_idstringqueryoptionalpaper_preset_idstringqueryoptionalcreated_afterstringqueryoptionalFormat: date-time
created_beforestringqueryoptionalFormat: date-time
Responses
200Exportliste für den Account.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
dataarrayerforderlichnext_cursorstring | nullerforderlich400Pflichtfeld fehlt oder ungültiger Wert.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- `download_available` ist `true`, sobald ein Export fertig ist und erneut heruntergeladen werden kann.
- Die Liste liefert bewusst keine Binärdaten. Für Re-Downloads nutzt du `GET /v1/exports/{id}`.
curl "https://api.namenschild.io/v1/exports?source=public_api&status=ready&limit=20" \
-H "Authorization: Bearer ns_live_dein_privater_api_key"{
"data": [
{
"id": "exp_8a0f4f17c56a4dbca28ee935",
"source": "public_api",
"status": "ready",
"template_id": "tpl_classic_default",
"paper_preset_id": "ppt_badge_80x50_tech_sheet",
"layout_source": "preset",
"badge_count": 48,
"credits_charged": 48,
"download_available": true,
"created_at": "2026-06-02T10:00:00.000Z",
"updated_at": "2026-06-02T10:00:04.000Z",
"expires_at": "2026-08-01T10:00:04.000Z"
}
],
"next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNi0wMlQxMDowMDowMC4wMDBaIiwiaWQiOiJleHBfOGEwZjRmMTdjNTZhNGRiY2EyOGVlOTM1In0"
}/v1/exports/{id}Über diesen Endpunkt lädst du ein bereits erzeugtes PDF erneut herunter. Verwende dafür die Export-ID aus dem Header von `POST /v1/generate` oder aus `GET /v1/exports`.
Scope: exports:read
- Response-Body: `application/pdf`.
- Funktioniert nur für Exporte, die bereits erfolgreich erzeugt wurden.
- `404` bedeutet entweder unbekannte Export-ID oder noch kein verfügbarer Export.
Parameter
idstringpatherforderlichResponses
200Vorhandenes Export-PDF.application/pdf · string
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
401Kein oder ungültiger API-Schlüssel.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
403Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
404Ressource nicht gefunden.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
429Zu viele Requests in kurzer Zeit.application/json · object
X-Request-IdstringoptionalKorrelation-ID zur Zuordnung von Client-Fehlern, Supabase-Logs und Sentry-Ereignissen.
Format: uuid
Retry-AfterintegeroptionalMinimum: 1
X-RateLimit-RemainingintegeroptionalMinimum: 0
X-RateLimit-ResetintegeroptionalMinimum: 0
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Hinweise für die Integration
- Der Download verbraucht keine zusätzlichen Credits.
- Für wiederholbare Kundendownloads solltest du die Export-ID dauerhaft in deinem System speichern.
curl https://api.namenschild.io/v1/exports/exp_8a0f4f17c56a4dbca28ee935 \
-H "Authorization: Bearer ns_live_dein_privater_api_key" \
-o badges.pdf{
"type": "not_found",
"message": "Der angeforderte Export wurde nicht gefunden oder ist noch nicht verfügbar.",
"docUrl": "https://docs.namenschild.io/api#errors"
}Fehlerantworten
Diese Sektion ist das Ziel der docUrl-Verweise aus den Fehlerantworten der API. Alle JSON-Fehler liefern mindestens type, message und docUrl.
BadRequest
Pflichtfeld fehlt oder ungültiger Wert.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Unauthorized
Kein oder ungültiger API-Schlüssel.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
Forbidden
Schlüssel vorhanden, aber ohne Berechtigung für diesen Endpunkt.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
NotFound
Ressource nicht gefunden.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
InsufficientCredits
Nicht genug Credits für den angeforderten Export.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
PayloadTooLarge
CSV oder Logo ist größer als das erlaubte Limit.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
UnprocessableCsv
CSV konnte nicht verarbeitet werden.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
InvalidSlotMapping
slot_mapping fehlt, ist ungültig oder passt nicht zur gewählten Vorlage.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
GenerateValidationError
CSV oder slot_mapping konnten nicht verarbeitet werden.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
RateLimited
Zu viele Requests in kurzer Zeit.
Header: X-Request-Id, Retry-After, X-RateLimit-Remaining, X-RateLimit-Reset
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0
NotImplemented
Scaffold vorhanden, Backend-Implementierung folgt.
Header: X-Request-Id
typestringerforderlichmessagestringerforderlichdocUrlstringerforderlichFormat: uri
creditsRemainingintegeroptionalMinimum: 0
creditsRequiredintegeroptionalMinimum: 0