📡 URL Base

Todas las peticiones deben realizarse a: https://api.foodposs.com/v2

1000
Solicitudes/min
100
Por endpoint/min
12h
Token TTL

Autenticación

Foodposs usa autenticación Bearer Token. Incluye el token en el header Authorization de todas tus peticiones.

POST /auth/login Obtener token de acceso

Request Body (JSON)

ParámetroTipoDescripción
emailstringEmail de usuario (requerido)
passwordstringContraseña (requerido)

Ejemplo de Respuesta

{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "Bearer", "expires_in": 43200, "restaurant_id": "rest_abc123" }

Productos

GET /products Listar productos

Parámetros de Query

ParámetroTipoDescripción
categorystringFiltrar por categoría (opcional)
activebooleanSolo productos activos (default: true)
pageintegerPágina de resultados (default: 1)
limitintegerResultados por página (max: 100)

Ejemplo de Respuesta

{ "data": [ { "id": "prod_xyz789", "name": "Ceviche Clásico", "price": 12990, "category": "Entradas", "description": "Salmón fresco con limón", "available": true, "modifiers": ["Sin ост", "Extra limón"] } ], "pagination": { "page": 1, "total": 45, "pages": 3 } }
POST /products Crear producto

Request Body (JSON)

ParámetroTipoDescripción
name *stringNombre del producto
price *integerPrecio en CLP (sin decimales)
categorystringCategoría del producto
descriptionstringDescripción del producto
modifiersarrayLista de modificadores disponibles

Pedidos

GET /orders Listar pedidos

Parámetros de Query

ParámetroTipoDescripción
statusstring Filtrar por estado: pending, preparing, ready, delivered, cancelled
from_datedateFecha inicio (YYYY-MM-DD)
to_datedateFecha fin (YYYY-MM-DD)
table_idstringFiltrar por mesa específica
POST /orders Crear pedido

Request Body (JSON)

{ "table_id": "table_05", "waiter_id": "user_xyz", "items": [ { "product_id": "prod_abc", "quantity": 2, "modifiers": ["Sin cebolla"], "notes": "Salsas separadas" } ], "customer_name": "Carlos M.", "source": "pos" // pos, delivery, api }

Mesas

GET /tables Obtener mapa de mesas

Estados Posibles

EstadoDescripción
availableMesa libre
occupiedMesa con pedido activo
waitingClientes esperando
reservedReservada
PUT /tables/{id}/status Actualizar estado de mesa

Request Body

{ "status": "available" // available | occupied | waiting | reserved }

Usuarios

GET /users Listar usuarios del restaurante

Roles Disponibles

RolDescripción
Zona ClientesAdministrador con acceso total
managerGerente con permisos de gestión
waiterGarzón con acceso a ventas
kitchenPersonal de cocina

Reportes

GET /reports/sales Reporte de ventas

Parámetros de Query

ParámetroTipoDescripción
from *dateFecha inicio (YYYY-MM-DD)
to *dateFecha fin (YYYY-MM-DD)
group_bystringAgrupar por: day, week, month, product, category
GET /reports/closings Reporte de arqueos de caja

Códigos de Error

Estructura de Errores

{ "error": { "code": "VALIDATION_ERROR", "message": "El campo 'price' debe ser un número entero", "field": "price" } }
CódigoHTTP StatusDescripción
AUTH_INVALID401Credenciales inválidas
AUTH_EXPIRED401Token expirado
FORBIDDEN403Sin permisos para este recurso
NOT_FOUND404Recurso no encontrado
VALIDATION_ERROR400Datos de entrada inválidos
RATE_LIMIT429Demasiadas solicitudes
SERVER_ERROR500Error interno del servidor