Skip to content
Sprache: Deutsch

API für Entwickler

API-Fehlerformat und Fehlercodes

Aktualisiert am 1. November 2026 5 Min. Lesezeit

So sind Fehlerantworten der LinkHarbor-API aufgebaut, was die wichtigsten Fehlercodes bedeuten und wie dein Code darauf reagieren sollte.

Jede Fehlerantwort der API hat dasselbe Format. Dein Code sollte sich auf den Fehlercode im Feld error verlassen, nicht auf den Text in message – der Code bleibt stabil, der Text kann sich ändern und erscheint in der Kontosprache.

Aufbau einer Fehlerantwort

Beispiel: 422 validation_failed
{
  "error": "validation_failed",
  "message": "Some of the information provided is invalid. Please check and try again.",
  "details": [
    { "field": "title", "reason": "minLength", "message": "…" }
  ],
  "request_id": "6b1f0c2e-…"
}
error
Maschinenlesbarer Code, zum Beispiel not_found. Bei den meisten Fehlern steht er zusätzlich im Header X-Error-Code – verlass dich aber auf das Feld im Body.
message
Lesbare Beschreibung in der Kontosprache: mit API-Key die des Workspace-Eigentümers, mit einer verbundenen App die der Person, die sie verbunden hat. Ohne gültigen Token – etwa bei 401 aus der Token-Prüfung – richtet sich die Sprache nach Accept-Language, sonst Englisch. Der Header Content-Language nennt die Sprache.
details
Nur wenn es mehr zu sagen gibt. Bei 422 aus der Eingabeprüfung eine Liste mit field, reason und message pro Problem; bei 422 aus der Fachlogik und allen anderen Fehlern ein Objekt, etwa mit reason, retry_after_sec oder einer Liste von issues. Bei einer überschrittenen Größe enthält es field, reason und limit, bei 413 request_too_large max_bytes und max_kb. Prüfe also, ob details eine Liste ist.
request_id
Die ID der Anfrage. Sie steht auch im Header X-Request-Id. Gib sie bei Fragen an den Support mit an.

Ausnahmen: Die Antwort bei 429 rate_limited hat statt details das Feld retry_after_sec; bei 429 und 403 insufficient_scope fehlt request_id im Body. 401 aus der Token-Prüfung und 422 aus der Schema-Prüfung haben keinen Header X-Error-Code, und bei der Schema-Prüfung ist nur das oberste message übersetzt, die Texte in details bleiben englisch. Der Header X-Request-Id ist immer gesetzt.

Die wichtigsten Codes

HTTPerrorBedeutungWas tun
400invalid_jsonDer Body ist kein gültiges JSONJSON prüfen
400bad_requestFalscher Content-Type oder fehlerhafte AnfrageContent-Type: application/json setzen
401missing_bearer_tokenKein Token im Authorization-HeaderHeader Authorization: Bearer … setzen
401invalid_tokenToken abgelaufen, ungültig oder Key gelöschtNeues Token holen; hilft das nicht, Key prüfen
401invalid_api_keyKey-ID oder Secret beim Token-Tausch falschZugangsdaten prüfen
402plan_limit_reachedPlan-Limit erreicht, etwa bei Short LinksUpgrade oder Einträge löschen
403insufficient_scopeScope fehlt oder Endpunkt nicht für API-Keys freigegebenKey mit passendem Scope anlegen
403forbiddenKeine Berechtigung für diese AktionIm Dashboard erledigen
403feature_not_availableFunktion nicht im Plan enthaltenPlan prüfen
403block_type_requires_planBlocktyp erst in einem höheren PlanAnderen Blocktyp wählen oder upgraden
403template_lockedPremium-Template im aktuellen Plan nicht verfügbarTemplate aus GET /v1/templates/available wählen
403workspace_suspended, workspace_read_only, workspace_grace_expiredWorkspace wegen offener Zahlung gesperrt oder nur lesbarZahlung im Dashboard klären
404not_foundRessource existiert nicht oder gehört nicht zu deinem WorkspaceID prüfen
409conflictAllgemeiner Konflikt mit dem aktuellen ZustandZustand neu laden, Eingabe ändern
409workspace_template_in_useWorkspace-Template wird noch von Pages genutzt; die Zahl steht in details.countPages auf ein anderes Template umstellen, dann löschen
409handle_taken, slug_takenHandle bzw. Short-Link-Slug ist schon vergebenAnderen Wert wählen
409form_in_use, page_not_private, page_not_published, never_publishedKonflikt mit dem Zustand: Formular noch auf einer Page, Page nicht privat bzw. nicht veröffentlicht, noch nie veröffentlichtZustand ändern, dann erneut
409page_limit_reached, link_limit_reached, block_limit_reached, form_limit_reached, asset_limit_reached, asset_storage_limit_reached, workspace_template_limit_reachedMengen- oder Speicher-Limit des Plans erreichtEinträge entfernen oder upgraden
409draft_not_publishableDer Entwurf hat Probleme; die Liste steht in details.issuesProbleme beheben, dann erneut veröffentlichen
413request_too_largeBody größer als für diesen Endpunkt erlaubt (64 KB, 1 MB oder 2 MB); die Grenze steht in details.max_kbWeniger Daten pro Anfrage schicken, siehe Rate Limits
413payload_too_largeHochgeladene Datei größer als 10 MBDatei verkleinern
422validation_failedEingabe ungültig oder unbekanntes Feld; Einzelheiten in detailsFelder laut details korrigieren
422handle_reserved, target_url_invalid, target_url_scheme, target_url_hostHandle reserviert bzw. Ziel-URL ungültig oder nicht erlaubtAnderen Wert wählen
422workspace_template_disabledDas gewählte Workspace-Template ist deaktiviertTemplate unter „Domains & Templates“ aktivieren oder ein anderes wählen
422template_css_external, template_section_invalidWorkspace-Template: CSS lädt von fremden Servern bzw. ein {{#if}}/{{#unless}}/{{#each}}-Abschnitt ist falsch platziertExterne Adressen entfernen bzw. Abschnitt im selben Tag oder Text schließen
422custom_css_externalCustom CSS lädt etwas von fremden ServernExterne Adressen aus dem CSS entfernen
429rate_limited, api_key_lockedZu viele Anfragen bzw. Key nach Fehlversuchen gesperrtWarten laut Retry-After bzw. details.retry_after_sec
500internal_errorUnerwarteter FehlerSpäter erneut versuchen, request_id notieren
503service_unavailableDienst vorübergehend nicht erreichbarMit Pause erneut versuchen

Eingabefehler lesen

Bei 422 validation_failed nennt details jedes Problem einzeln: field ist der Pfad des Feldes (bei verschachtelten Objekten mit Schrägstrichen, etwa theme_config/button_style), reason die verletzte Regel wie required, minLength, maxLength, enum oder additionalProperties. Bei additionalProperties steht in der Meldung, welche Felder unbekannt sind – häufig ein Tippfehler im Feldnamen.

Empfohlene Reaktion im Code

  • 400, 413 und 422: nicht wiederholen, sondern die Anfrage korrigieren
  • 401 invalid_token: einmal ein neues Token holen und wiederholen
  • 403: nicht wiederholen; Scope, Plan oder Zuständigkeit prüfen
  • 404: ID prüfen; nach einem Löschen ist das normal
  • 409: Zustand neu laden und entscheiden, ob die Aktion noch nötig ist
  • 429: warten laut Retry-After und dann wiederholen – siehe Rate Limits
  • 500 und 503: mit wachsenden Pausen wenige Male wiederholen

Nichts gefunden?

Schreib uns dein Anliegen – unser Support hilft dir persönlich weiter.

Support kontaktieren