API · versión 1
Tus costes, desde tu propio programa
Lee tus recetas con su coste por ración, tu catálogo con los precios de compra reales, cómo ha ido cambiando cada precio y lo que te queda en el almacén. Solo lectura: esta API no puede cambiar ni borrar nada de tu cuenta.
Incluida en el plan Business. La clave se crea desde Ajustes, en Plan y facturación.
Autenticación
La clave va en una cabecera. Nunca en la URL: ahí quedaría escrita en los registros de cualquier intermediario y en el historial del navegador.
curl https://www.usegramo.app/api/v1/recetas \
-H "Authorization: Bearer gr_TU_CLAVE"
# o bien
curl https://www.usegramo.app/api/v1/recetas -H "X-API-Key: gr_TU_CLAVE"401 es que la clave no vale, un 403 es que el negocio ya no tiene plan Business activo, y un 429 es que has pasado de 1.000 llamadas en una hora.GET /recetas
Las recetas activas con su coste. El coste sale de los precios de compra reales de tus facturas, no de lo que pone la tarifa del proveedor.
{
"recetas": [
{
"id": "…",
"local": "…",
"nombre": "Croquetas de jamón",
"categoria": "Entrantes",
"raciones": 4,
"coste_total": 4.21,
"coste_por_racion": 1.05,
"precio_venta": 6.5,
"margen": 0.838,
"es_subreceta": false,
"actualizada": "2026-09-15T10:22:31Z"
}
]
}Parámetros: ?limite= (100 por defecto, 500 máximo) y ?local= si tu negocio tiene varios locales. Sin ese parámetro vienen los de todos.
GET /ingredientes
El catálogo con el precio por unidad y los alérgenos.
{
"ingredientes": [
{
"id": "…",
"local": "…",
"nombre": "Harina de trigo T-55",
"categoria": "Secos",
"unidad": "kg",
"precio_por_unidad": 0.79,
"alergenos": ["gluten"],
"stock_minimo": 10,
"actualizado": "2026-09-14T18:02:11Z"
}
]
}GET /precios
Cómo ha ido cambiando el precio de cada ingrediente, con su fecha. Es el dato que sale de leer tus facturas una a una, así que no lo tiene nadie más.
{
"cambios": [
{
"ingrediente_id": "…",
"ingrediente": "Harina de trigo T-55",
"unidad": "kg",
"local": "…",
"precio_anterior": 0.76,
"precio_nuevo": 0.79,
"variacion_pct": 3.95,
"cuando": "2026-09-14T18:02:11Z"
}
]
}Filtros: ?ingrediente=… para uno solo, ?desde=2026-01-01 para acotar en el tiempo, ?local=… si tienes varios.
GET /stock
Qué hay en el almacén ahora mismo, qué está por debajo del mínimo y qué caduca pronto.
{
"stock": [
{
"ingrediente_id": "…",
"nombre": "Harina de trigo T-55",
"unidad": "kg",
"existencias": 37.5,
"stock_minimo": 10,
"bajo_minimo": false,
"lotes_activos": 2,
"caduca_el": "2026-11-21",
"precio_unidad": 0.79
}
]
}Filtros: ?bajo_minimo=true y ?caduca_en=7 (días).
stock_minimo viene a null es que nadie ha dicho todavía cuánto es poco de ese ingrediente, no que sobre con cero. No avises de una falta que nadie ha definido.Lo que NO hace
- · No escribe. No se pueden crear ni modificar recetas, ingredientes ni facturas.
- · No hay webhooks: hoy se consulta, no avisa.
- · No se conecta a ningún TPV ni ERP por su cuenta: eso lo hace tu programa.
¿Te falta algo para tu integración? Escríbenos a hola@dfmsaas.solutions y nos lo cuentas. Es como se decidió lo que hay hoy.