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.