MenuFacile2.0

Codici di erroreDEV

Formato delle risposte di errore e codici HTTP più comuni.

L'API V1 di MenuFacile ritorna sempre JSON sugli endpoint applicativi e segue un envelope uniforme sia in caso di successo sia in caso di errore. Il dominio del tenant inesistente è l'unico caso che restituisce HTML (la 404 brandizzata della landing).

Envelope di successo

{
  "success": true,
  "data": { ... },
  "meta": {
    "generated_at": "2026-05-15T11:42:18+00:00",
    "locale": "it"
  }
}

Envelope di errore

{
  "success": false,
  "message": "Risorsa non trovata.",
  "errors": {
    "name": ["Il campo nome è obbligatorio."]
  }
}

Codici HTTP

Status Quando appare Cosa fare
200 OK Richiesta riuscita –
201 Created Risorsa creata (POST endpoint admin) –
202 Accepted Eventi analytics accettati per processing batch –
204 No Content Cancellazione riuscita (DELETE) –
401 Unauthorized Token mancante o invalido su endpoint admin Genera/aggiorna il token. Vedi Autenticazione
403 Forbidden Token valido ma scope insufficiente Genera token con lo scope corretto (es. menu:write)
404 Not Found Tenant inesistente (HTML branded) o risorsa cancellata (JSON) Verifica subdomain o l'ID
405 Method Not Allowed Verbo HTTP errato sull'endpoint Verifica metodo (GET vs POST, ecc.) in API Reference
422 Unprocessable Entity Validazione fallita su POST/PUT Leggi errors.{campo} e correggi
429 Too Many Requests Rate limit superato Vedi Rate limit
500 Internal Server Error Errore lato server Riprova dopo qualche secondo. Se persiste, scrivi a info@menufacile.it

Esempi pratici

401 — Token mancante su endpoint admin

curl https://ducatarocco.menufacile.it/api/v1/admin/items
{ "success": false, "message": "Unauthenticated." }

Fix: aggiungi header Authorization: Bearer <token>.

403 — Scope insufficiente

curl -X POST -H "Authorization: Bearer <token-menu-read>" \
     https://ducatarocco.menufacile.it/api/v1/admin/categories
{ "success": false, "message": "Invalid ability provided." }

Fix: rigenera il token spuntando lo scope menu:write (o analytics:read per gli endpoint analytics).

404 — Tenant inesistente

curl https://nonesisto.menufacile.it/api/v1/menu/it

Questo caso restituisce la landing 404 brandizzata del prodotto (HTML), non JSON. Verifica che il subdomain sia attivo (chiedi al cliente o al supporto).

404 — Risorsa cancellata

curl https://ducatarocco.menufacile.it/api/v1/items/9999
{ "success": false, "message": "Resource not found." }

Fix: l'ID 9999 non esiste o è stato cancellato. Lista gli item disponibili con GET /api/v1/items.

422 — Validazione fallita

curl -X POST -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     https://ducatarocco.menufacile.it/api/v1/admin/items \
     -d '{"price": -5}'
{
  "success": false,
  "message": "Il campo category id è obbligatorio. (and 3 more errors)",
  "errors": {
    "category_id": ["Il campo category id è obbligatorio."],
    "name": ["Il campo name è obbligatorio."],
    "name.it": ["Il campo name.it è obbligatorio."],
    "price": ["Il campo price deve essere almeno 0."]
  }
}

Fix: leggi errors, correggi i campi e ritenta. Le chiavi annidate (name.it) sono campi tradotti.

Best practice client

Hai bisogno di aiuto?

Scrivi a info@menufacile.it allegando: URL chiamato, status HTTP ricevuto, body della response, ora approssimativa.