Skip to content
Lingua: Italiano

API per sviluppatori

Formato degli errori e codici di errore API

Aggiornato il 1 novembre 2026 5 min di lettura

Come sono strutturate le risposte di errore dell’API di LinkHarbor, cosa significano i codici di errore principali e come deve reagire il tuo codice.

Ogni risposta di errore dell’API ha lo stesso formato. Il tuo codice dovrebbe basarsi sul codice di errore nel campo error, non sul testo in message – il codice resta stabile, mentre il testo può cambiare e viene tradotto nella lingua dell’account.

Struttura di una risposta di errore

Esempio: 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
Codice leggibile dalle macchine, per esempio not_found. Per la maggior parte degli errori si trova anche nell’header X-Error-Code – ma basati sul campo nel corpo.
message
Descrizione leggibile nella lingua dell’account: con una chiave API quella del proprietario del workspace, con un’app collegata quella della persona che l’ha collegata. Senza un token valido – per esempio con 401 dal controllo del token – la lingua segue Accept-Language, altrimenti è l’inglese. L’header Content-Language indica la lingua.
details
Presente solo quando c’è altro da dire. Per 422 dalla validazione dell’input, un elenco con field, reason e message per ogni problema; per 422 dalla logica di business e per tutti gli altri errori, un oggetto, per esempio con reason, retry_after_sec o un elenco di issues. Quando una dimensione viene superata contiene field, reason e limit, e per 413 request_too_large max_bytes e max_kb. Quindi verifica se details è un elenco.
request_id
L’ID della richiesta. Si trova anche nell’header X-Request-Id. Indicalo quando contatti l’assistenza.

Eccezioni: la risposta 429 rate_limited ha il campo retry_after_sec invece di details; con 429 e 403 insufficient_scope, request_id manca nel corpo. 401 dal controllo del token e 422 dal controllo dello schema non hanno l’header X-Error-Code, e con il controllo dello schema viene tradotto solo il message di primo livello; i testi all’interno di details restano in inglese. L’header X-Request-Id è sempre presente.

I codici più importanti

HTTPerrorSignificatoCosa fare
400invalid_jsonIl corpo non è JSON validoControlla il JSON
400bad_requestContent-Type errato o richiesta malformataImposta Content-Type: application/json
401missing_bearer_tokenNessun token nell’header AuthorizationImposta l’header Authorization: Bearer …
401invalid_tokenToken scaduto o non valido, oppure chiave eliminataRichiedi un nuovo token; se non basta, controlla la chiave
401invalid_api_keyID o secret della chiave errati nello scambio del tokenControlla le credenziali
402plan_limit_reachedLimite del piano raggiunto, per esempio per i link breviAggiorna il piano o elimina delle voci
403insufficient_scopeScope mancante o endpoint non abilitato per le chiavi APICrea una chiave con lo scope giusto
403forbiddenNessuna autorizzazione per questa azioneEseguila nella dashboard
403feature_not_availableFunzione non inclusa nel pianoControlla il piano
403block_type_requires_planTipo di blocco disponibile solo in un piano superioreScegli un altro tipo di blocco o aggiorna il piano
403template_lockedModello premium non disponibile nel piano attualeScegli un modello da GET /v1/templates/available
403workspace_suspended, workspace_read_only, workspace_grace_expiredWorkspace bloccato o in sola lettura per un pagamento in sospesoRegola il pagamento nella dashboard
404not_foundLa risorsa non esiste o non appartiene al tuo workspaceControlla l’ID
409conflictConflitto generico con lo stato attualeRicarica lo stato, modifica l’input
409workspace_template_in_useIl modello del workspace è ancora usato da alcune pagine; il numero è in details.countPassa le pagine a un altro modello, poi eliminalo
409handle_taken, slug_takenHandle o slug del link breve già in usoScegli un altro valore
409form_in_use, page_not_private, page_not_published, never_publishedConflitto con lo stato: modulo ancora su una pagina, pagina non privata o non pubblicata, mai pubblicataCambia lo stato, poi riprova
409page_limit_reached, link_limit_reached, block_limit_reached, form_limit_reached, asset_limit_reached, asset_storage_limit_reached, workspace_template_limit_reachedRaggiunto il limite di quantità o di spazio del pianoRimuovi delle voci o aggiorna il piano
409draft_not_publishableLa bozza ha dei problemi; l’elenco è in details.issuesRisolvi i problemi, poi pubblica di nuovo
413request_too_largeCorpo più grande di quanto consentito per questo endpoint (64 KB, 1 MB o 2 MB); il limite è in details.max_kbInvia meno dati per richiesta, vedi Limiti di richieste
413payload_too_largeFile caricato più grande di 10 MBRiduci il file
422validation_failedInput non valido o campo sconosciuto; dettagli in detailsCorreggi i campi come descritto in details
422handle_reserved, target_url_invalid, target_url_scheme, target_url_hostHandle riservato, oppure URL di destinazione non valido o non consentitoScegli un altro valore
422workspace_template_disabledIl modello del workspace selezionato è disattivatoAttiva il modello in «Domini e modelli» o scegline un altro
422template_css_external, template_section_invalidModello del workspace: il CSS carica da server esterni, oppure una sezione {{#if}}/{{#unless}}/{{#each}} è posizionata in modo erratoRimuovi gli indirizzi esterni, oppure chiudi la sezione all’interno dello stesso tag o testo
422custom_css_externalIl CSS personalizzato carica qualcosa da server esterniRimuovi gli indirizzi esterni dal CSS
429rate_limited, api_key_lockedTroppe richieste, oppure chiave bloccata dopo tentativi fallitiAttendi quanto indicato da Retry-After o details.retry_after_sec
500internal_errorErrore imprevistoRiprova più tardi, annota il request_id
503service_unavailableServizio temporaneamente non disponibileRiprova dopo una pausa

Leggere gli errori di input

Con 422 validation_failed, details elenca ogni problema separatamente: field è il percorso del campo (con barre per gli oggetti annidati, per esempio theme_config/button_style), reason è la regola violata, come required, minLength, maxLength, enum o additionalProperties. Con additionalProperties, il messaggio dice quali campi sono sconosciuti – spesso è un errore di battitura nel nome del campo.

Gestione consigliata nel tuo codice

  • 400, 413 e 422: non ripetere, correggi invece la richiesta
  • 401 invalid_token: richiedi una volta un nuovo token e riprova
  • 403: non ripetere; controlla lo scope, il piano o chi è autorizzato a farlo
  • 404: controlla l’ID; dopo un’eliminazione è normale
  • 409: ricarica lo stato e decidi se l’azione serve ancora
  • 429: attendi quanto indicato da Retry-After, poi riprova – vedi Limiti di richieste
  • 500 e 503: riprova qualche volta con pause crescenti

Non hai trovato nulla?

Dicci di cosa hai bisogno e il nostro team di assistenza ti aiuterà personalmente.

Contatta l’assistenza