# Restaurant storefront API

> Menu, table QR ordering, waiter calls, table reservations, delivery and pickup orders of one restaurant.

Menu, table QR ordering, waiter calls, table reservations, delivery and pickup orders of one restaurant.

| Field | Value |
| --- | --- |
| Base URL | `https://fina.do/api/restaurant/v1` |
| Authentication | `X-Restaurant-App-Key` + customer bearer token on private routes |
| OpenAPI 3.1 | [/api/restaurant/v1/openapi.json](https://fina.do/api/restaurant/v1/openapi.json) |
| Built for | Custom customer apps and websites for a restaurant |

Shared rules (app key, envelope, /config, delivery quotes): [Storefront APIs](https://fina.do/developers/storefront-apis.md).

### Endpoints

Base URL: `https://fina.do/api/restaurant/v1`

| Method | Path | Summary | Auth |
| --- | --- | --- | --- |
| GET | `/config` | Identidad de la granja y lo que la app necesita para arrancar | App key |
| GET | `/locations` | Sucursales activas donde se puede recoger | App key |
| GET | `/catalog` | La carta: categorías del menú y platos con sus tamaños, extras y alérgenos | App key |
| GET | `/plans` | Planes del restaurante: «Te lo llevamos» y «Úsalo cuando quieras» (sin sesión) | App key |
| GET | `/windows` | Franjas de una fecha para una modalidad | App key |
| GET | `/me` | Perfil del cliente en esta granja | App key + Customer token |
| PATCH | `/me` | Editar nombre y teléfono | App key + Customer token |
| DELETE | `/me` | Baja de cuenta | App key + Customer token |
| GET | `/addresses` | Libreta de direcciones | App key + Customer token |
| POST | `/addresses` | Guardar una dirección | App key + Customer token |
| PATCH | `/addresses/{id}` | Editar una dirección | App key + Customer token |
| DELETE | `/addresses/{id}` | Borrar una dirección | App key + Customer token |
| GET | `/geocode/reverse` | Dirección escrita de un punto («usar mi ubicación») | App key |
| POST | `/delivery/estimate` | Costo de envío a una dirección | App key + Customer token |
| POST | `/discount-codes/validate` | Vista previa de un cupón: `{ code, subtotal_minor }` → `{ valid, discount_minor, … }` | App key |
| GET | `/orders` | Pedidos del cliente | App key + Customer token |
| POST | `/orders` | Crear un pedido | App key + Customer token |
| GET | `/orders/{id}` | Detalle y seguimiento de un pedido | App key + Customer token |
| POST | `/orders/{id}/cancel` | Cancelar un pedido | App key + Customer token |
| GET | `/tracking` | Pedidos en curso | App key + Customer token |
| GET | `/subscriptions` | Planes del cliente | App key + Customer token |
| POST | `/subscriptions` | Contratar un plan | App key + Customer token |
| GET | `/subscriptions/{id}` | Un plan del cliente con sus créditos del ciclo y sus ciclos | App key + Customer token |
| DELETE | `/subscriptions/{id}` | Cancelar el plan | App key + Customer token |
| POST | `/subscriptions/{id}/pause` | Pausar (los créditos ya dados siguen valiendo hasta que caduquen) | App key + Customer token |
| POST | `/subscriptions/{id}/resume` | Reanudar | App key + Customer token |
| POST | `/subscriptions/{id}/skip` | Saltar la entrega (o renovación) siguiente | App key + Customer token |
| POST | `/subscriptions/fina-pay/checkout` | Checkout de Fina Pay para pagar un plan | App key + Customer token |
| GET | `/subscriptions/fina-pay/{id}` | Estado del pago con Fina Pay de un plan | App key + Customer token |
| GET | `/payment-methods` | Tarjetas guardadas | App key + Customer token |
| DELETE | `/payment-methods/{id}` | Borrar una tarjeta | App key + Customer token |
| GET | `/announcements/active` | Anuncios vigentes del negocio para quien abre la app | App key + Customer token (or App key) |
| POST | `/announcements/{id}/events` | Registrar que un anuncio se vio, se tocó un botón o se cerró | App key + Customer token (or App key) |
| GET | `/loyalty` | Programa de fidelidad, recompensas y tarjeta del cliente | App key + Customer token (or App key) |
| POST | `/loyalty/redemptions` | Canjear una recompensa con puntos | App key + Customer token |
| POST | `/loyalty/redemptions/{id}/cancel` | Cancelar un canje propio pendiente | App key + Customer token |
| POST | `/loyalty/check-in` | Check-in de autoservicio con el QR del mostrador | App key + Customer token |
| GET | `/advisory` | Advisory service, request form and my cases | App key + Customer token (or App key) |
| POST | `/advisory/requests` | Request advisory | App key + Customer token |
| GET | `/advisory/cases/{id}` | Case detail | App key + Customer token |
| GET | `/advisory/cases/{id}/activities` | Case timeline visible to the client | App key + Customer token |
| POST | `/advisory/cases/{id}/messages` | Send a message to the advisor | App key + Customer token |
| GET | `/advisory/cases/{id}/dossiers` | Document folders of the case | App key + Customer token |
| POST | `/advisory/uploads` | Upload a file (raw bytes) | App key + Customer token |
| POST | `/advisory/dossier-items/{id}/files` | Attach an uploaded file to a document | App key + Customer token |
| DELETE | `/advisory/files/{id}` | Delete one of my files | App key + Customer token |
| GET | `/advisory/files/{id}/url` | Signed URL of a file | App key + Customer token |
| GET | `/advisory/cases/{id}/visits` | Visits of the case | App key + Customer token |
| POST | `/advisory/cases/{id}/visit-requests` | Request a visit | App key + Customer token |
| GET | `/advisory/visits/{id}/report-pdf` | Signed URL of the published report PDF | App key + Customer token |
| POST | `/advisory/visits/{id}/cancel` | Cancel a visit | App key + Customer token |
| POST | `/advisory/visits/{id}/acknowledge` | Acknowledge a published visit report | App key + Customer token |
| GET | `/advisory/cases/{id}/metrics` | Indicators of the case with their series | App key + Customer token |
| POST | `/advisory/metrics/{id}/records` | Record a measurement | App key + Customer token |
| GET | `/advisory/cases/{id}/market` | My offers and the opportunities shared with me | App key + Customer token |
| POST | `/advisory/cases/{id}/offers` | Propose an offer | App key + Customer token |
| POST | `/advisory/opportunities/{id}/respond` | Respond to a shared opportunity | App key + Customer token |
| GET | `/blog` | Datos del blog del negocio | App key + Customer token (or App key) |
| GET | `/blog/posts` | Posts publicados (sin cuerpo) | App key + Customer token (or App key) |
| GET | `/blog/posts/{id}` | Un post con su cuerpo según el acceso del cliente | App key + Customer token (or App key) |
| POST | `/blog/posts/{id}/purchase` | Comprar un post de pago con Fina Pay | App key + Customer token |
| POST | `/blog/posts/{id}/tips` | Dejar una propina con Fina Pay | App key + Customer token (or App key) |
| POST | `/blog/membership/checkout` | Unirse a la membresía del blog (checkout de suscripción) | App key + Customer token |
| POST | `/devices` | Registrar el token push del dispositivo | App key + Customer token |
| POST | `/devices/ping` | Enviar un aviso de prueba a mis dispositivos | App key + Customer token |
| DELETE | `/devices/{id}` | Revocar el token | App key + Customer token |
| GET | `/me/pricing` | Mayoreo / B2B: los precios de este cliente | App key + Customer token |
| GET | `/quotes` | Mayoreo / B2B: cotizaciones del cliente | App key + Customer token |
| POST | `/quotes/request` | Mayoreo / B2B: pedir una cotización | App key + Customer token |
| GET | `/quotes/{id}` | Mayoreo / B2B: detalle de una cotización | App key + Customer token |
| POST | `/quotes/{id}/accept` | Mayoreo / B2B: aceptar una cotización (crea el pedido) | App key + Customer token |
| POST | `/quotes/{id}/decline` | Mayoreo / B2B: rechazar una cotización | App key + Customer token |
| POST | `/ar-events` | Eventos anónimos de «Platos en AR» (vista, giro, lanzar AR, colocado, fallo, añadir al pedido) | App key |
| GET | `/tables/{token}` | La mesa detrás de un QR de este restaurante | App key |
| GET | `/tables/{token}/calls` | Cómo van las llamadas de la mesa (abierta o atendida) | App key |
| POST | `/tables/{token}/calls` | «Llamar al mesero» (`waiter`) o «Pedir la cuenta» (`bill`) | App key |
| GET | `/status` | Estado en vivo: `{ busy: { active, extra_min }, open: { configured, is_open, closes_at, opens_at, closing_soon } }` | App key |
| GET | `/reservations/info` | ¿Acepta reservas de mesa desde la app? Reglas: días hacia adelante, duración, grupo máximo y zonas elegibles | App key |
| GET | `/reservations/slots` | Horas libres de un día para un grupo (minutos desde medianoche, hora de RD) | App key |
| GET | `/reservations` | Mis reservas (requiere sesión) | App key |
| POST | `/reservations` | Reservar una mesa: `{ date, start_min, party_size, notes?, phone?, zone_id? }` | App key |
| POST | `/reservations/{id}/cancel` | Cancelar una reserva propia que aún no empezó | App key |
| GET | `/tables/{token}/orders` | Pedidos abiertos de la mesa (de la app o del mesero) y su avance en cocina | App key |
| GET | `/credits` | Créditos vigentes del cliente, los que caducan antes primero | App key + Customer token |
| GET | `/tables/{token}/round` | La ronda abierta de la mesa (o la enviada hace < 10 min), o `null` | App key |
| POST | `/tables/{token}/round` | Abre la ronda o me une a la abierta (idempotente): `{ name? }` | App key + Customer token |
| PUT | `/tables/{token}/round/me` | Reemplaza MIS líneas y mi estado: `{ items, ready?, name? }` | App key + Customer token |
| DELETE | `/tables/{token}/round/me` | Salgo de la ronda (mis líneas se van) | App key + Customer token |
| POST | `/tables/{token}/round/submit` | Envía la ronda a la cocina: UN pedido para toda la mesa | App key + Customer token |
| POST | `/uploads/sign` | Permiso para subir una foto de referencia del pedido | App key + Customer token |

Source: https://fina.do/developers#api-restaurant