Referencia
Servidor: https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica. El entorno sale de la clave: c5_test_ → sandbox, c5_live_ → real. Descarga el openapi.json.
Procesamiento en la UE: llama siempre con ?forceFunctionRegion=eu-central-1 (la región UE del proyecto), por ejemplo https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/empresas?forceFunctionRegion=eu-central-1. Sin ese parámetro, la petición se procesa en la región más cercana a tu servidor, que puede estar fuera de la UE. La cabecera x-sb-edge-region de la respuesta confirma dónde se ha procesado.
Empresas
GET/v1/empresasEmpresas de la claveempresas:leer
Una si la clave es de empresa; las autorizadas si es de asesoría.
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/empresas?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
{
"datos": [
{
"id": "8f1c…",
"nombre": "Transportes Valdeoca SL",
"nif": "B09000000"
}
]
}Facturas
GET/v1/facturasFacturas emitidasfacturas:leer
Importes en céntimos. Filtros por fecha, estado de cobro y NIF del cliente.
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
| desde | query | AAAA-MM-DD |
| hasta | query | AAAA-MM-DD |
| estado_cobro | query | cobrada · pendiente · vencida |
| cliente_nif | query | NIF del cliente |
| limite | query | Entre 1 y 100 (por defecto 50). |
| cursor | query | Cursor opaco de la página siguiente (`siguiente` de la respuesta anterior). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/facturas?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
{
"datos": [
{
"id": "b2e1…",
"numero": "F-2026-0142",
"fecha": "2026-10-14",
"cliente": {
"nombre": "Logística del Duero SL",
"nif": "B09111111"
},
"base_centimos": 65000,
"iva_centimos": 13650,
"retencion_centimos": 0,
"total_centimos": 78650,
"moneda": "EUR",
"estado_cobro": "pendiente"
}
],
"siguiente": null
}GET/v1/facturas/{id}Una facturafacturas:leer
Con sus importes y estado de cobro.
| id | ruta | Id de la factura |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/facturas/<id>?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
GET/v1/facturas/{id}/pdfPDF de una facturafacturas:leer
Devuelve una URL firmada que caduca en 5 minutos.
| id | ruta | Id de la factura |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/facturas/<id>/pdf?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
{
"url": "https://…",
"caduca_s": 300
}POST/v1/facturasNo existe: la emisión es del titular
Siempre `405 emision_requiere_titular`. Para pedir una factura usa `POST /v1/pedidos`.
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/facturas?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…' \ -H 'Idempotency-Key: 6f1d2c…'
{
"error": {
"codigo": "emision_requiere_titular",
"mensaje": "ConfIA5 no emite una factura sin que su titular la confirme. Usa POST /v1/pedidos.",
"doc_url": "…",
"peticion_id": "req_…"
}
}Presupuestos y albaranes
GET/v1/presupuestosPresupuestospresupuestos:leer
Lectura.
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
| limite | query | Entre 1 y 100 (por defecto 50). |
| cursor | query | Cursor opaco de la página siguiente (`siguiente` de la respuesta anterior). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/presupuestos?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
GET/v1/albaranesAlbaranespresupuestos:leer
Lectura.
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
| limite | query | Entre 1 y 100 (por defecto 50). |
| cursor | query | Cursor opaco de la página siguiente (`siguiente` de la respuesta anterior). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/albaranes?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
Gastos
GET/v1/gastosGastosgastos:leer
Gastos registrados con su categoría (provisional hasta que la valida la asesoría).
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
| desde | query | AAAA-MM-DD |
| hasta | query | AAAA-MM-DD |
| limite | query | Entre 1 y 100 (por defecto 50). |
| cursor | query | Cursor opaco de la página siguiente (`siguiente` de la respuesta anterior). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/gastos?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
DeCA
GET/v1/decaDeCA emitidosdeca:leer
Metadatos.
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
| limite | query | Entre 1 y 100 (por defecto 50). |
| cursor | query | Cursor opaco de la página siguiente (`siguiente` de la respuesta anterior). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/deca?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
Cobros
GET/v1/cobrosPendiente de cobrocobros:leer
Facturas con saldo pendiente.
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/cobros?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
POST/v1/facturas/{id}/cobrosRegistrar un cobrocobros:escribir
Sin importe salda lo pendiente. Nunca emite nada. Auditado.
| id | ruta | Id de la factura |
| Idempotency-Key | cabecera | Obligatoria. Misma clave y mismo cuerpo → misma respuesta; otro cuerpo → 409. |
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/facturas/<id>/cobros?forceFunctionRegion=eu-central-1' \
-H 'Authorization: Bearer c5_test_…' \
-H 'Idempotency-Key: 6f1d2c…' \
-H 'Content-Type: application/json' \
-d '{ "fecha": "2026-10-15" }'Esquema del cuerpo (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"fecha": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"importe_centimos": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"fecha"
],
"additionalProperties": false
}Contactos
GET/v1/contactosClientes y proveedorescontactos:leer
Lectura.
| empresa_id | query | Con claves de asesoría: la empresa (si la clave ve varias). |
| limite | query | Entre 1 y 100 (por defecto 50). |
| cursor | query | Cursor opaco de la página siguiente (`siguiente` de la respuesta anterior). |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/contactos?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
POST/v1/contactosAlta de un contactocontactos:escribir
Auditado. No toca el IBAN ni nada de un pedido pendiente.
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/contactos?forceFunctionRegion=eu-central-1' \
-H 'Authorization: Bearer c5_test_…' \
-H 'Idempotency-Key: 6f1d2c…' \
-H 'Content-Type: application/json' \
-d '{ "nombre": "Logística del Duero SL", "nif": "B09111111", "email": "admin@logistica.example" }'Esquema del cuerpo (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"nombre": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"nif": {
"type": "string",
"pattern": "^[A-Z0-9]{8,12}$"
},
"email": {
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"tipo": {
"default": "cliente",
"type": "string",
"enum": [
"cliente",
"proveedor"
]
}
},
"required": [
"nombre"
],
"additionalProperties": false
}Pedidos
POST/v1/pedidosPedir una facturapedidos:escribir
`202` con `estado: pendiente_confirmacion`. ConfIA5 prepara el borrador y Lola pide la confirmación al titular por WhatsApp. Solo entonces se emite y recibes `factura.emitida`.
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/pedidos?forceFunctionRegion=eu-central-1' \
-H 'Authorization: Bearer c5_test_…' \
-H 'Idempotency-Key: 6f1d2c…' \
-H 'Content-Type: application/json' \
-d '{ "contacto": { "nombre": "Logística del Duero SL", "nif": "B09111111" }, "lineas": [ { "concepto": "Porte Burgos-Valladolid", "cantidad": 3, "precio_unitario_centimos": 45000, "tipo_iva": 21 } ] }'Esquema del cuerpo (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"empresa_id": {
"description": "Solo con claves de asesoría: la empresa del pedido.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tipo": {
"default": "factura",
"type": "string",
"const": "factura"
},
"contacto_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"contacto": {
"type": "object",
"properties": {
"nombre": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"nif": {
"type": "string",
"pattern": "^[A-Z0-9]{8,12}$"
},
"email": {
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"tipo": {
"default": "cliente",
"type": "string",
"enum": [
"cliente",
"proveedor"
]
}
},
"required": [
"nombre"
],
"additionalProperties": false
},
"lineas": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"concepto": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"cantidad": {
"default": 1,
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000
},
"precio_unitario_centimos": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000
},
"tipo_iva": {
"default": 21,
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 10
},
{
"type": "number",
"const": 21
}
]
}
},
"required": [
"concepto",
"precio_unitario_centimos"
],
"additionalProperties": false
}
},
"retencion_irpf": {
"default": 0,
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 7
},
{
"type": "number",
"const": 15
},
{
"type": "number",
"const": 19
}
]
},
"observaciones": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"referencia_externa": {
"type": "string",
"maxLength": 80
}
},
"required": [
"lineas"
],
"additionalProperties": false
}{
"id": "6d0a…",
"estado": "pendiente_confirmacion",
"caduca_en": "2026-10-18T10:00:00Z"
}GET/v1/pedidos/{id}Estado de un pedidopedidos:escribir
recibido → validando → necesita_datos | pendiente_confirmacion → confirmado → emitido | rechazado | caducado | error.
| id | ruta | Id del pedido |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/pedidos/<id>?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
Exportaciones
POST/v1/exportacionesExportar a tu contabilidadexportaciones:crear
Formato `universal` (PDF + libros en CSV). Los formatos de programa solo cuando existan.
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/exportaciones?forceFunctionRegion=eu-central-1' \
-H 'Authorization: Bearer c5_test_…' \
-H 'Idempotency-Key: 6f1d2c…' \
-H 'Content-Type: application/json' \
-d '{ "formato": "universal", "desde": "2026-07-01", "hasta": "2026-09-30" }'Esquema del cuerpo (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"empresa_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"formato": {
"default": "universal",
"type": "string",
"const": "universal"
},
"desde": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"hasta": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"required": [
"desde",
"hasta"
],
"additionalProperties": false
}GET/v1/exportaciones/{id}Descargar una exportaciónexportaciones:crear
URL firmada de 5 minutos.
| id | ruta | Id de la exportación |
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/exportaciones/<id>?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
Webhooks
GET/v1/webhooksDestinoswebhooks:gestionar
Lista de destinos de la clave.
curl -X GET 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/webhooks?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
POST/v1/webhooksCrear un destinowebhooks:gestionar
Solo https, puerto 443 y dominio público. Devuelve el secreto de firma UNA vez. Con clave live, solo desde el portal (pide confirmación).
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/webhooks?forceFunctionRegion=eu-central-1' \
-H 'Authorization: Bearer c5_test_…' \
-H 'Idempotency-Key: 6f1d2c…' \
-H 'Content-Type: application/json' \
-d '{ "url": "https://erp.ejemplo.es/confia5", "eventos": [ "factura.emitida" ] }'Esquema del cuerpo (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 500,
"format": "uri"
},
"eventos": {
"minItems": 1,
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"enum": [
"factura.emitida",
"factura.cobrada",
"factura.vencida",
"pedido.necesita_datos",
"pedido.rechazado",
"pedido.caducado",
"presupuesto.aceptado",
"gasto.registrado",
"gasto.validado",
"deca.emitido",
"paquete.listo",
"exportacion.lista",
"autorizacion.concedida",
"autorizacion.revocada",
"empresa.baja",
"clave.caduca_pronto"
]
}
}
},
"required": [
"url",
"eventos"
],
"additionalProperties": false
}DELETE/v1/webhooks/{id}Borrar un destinowebhooks:gestionar
| id | ruta | Id del destino |
curl -X DELETE 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/webhooks/<id>?forceFunctionRegion=eu-central-1' \ -H 'Authorization: Bearer c5_test_…'
Sandbox
POST/v1/sandbox/pedidos/{id}/simularSimular la respuesta del titularpedidos:escribir
Solo con claves c5_test_ (con una live: 404).
| id | ruta | Id del pedido |
| Idempotency-Key | cabecera | Obligatoria. Misma clave y mismo cuerpo → misma respuesta; otro cuerpo → 409. |
curl -X POST 'https://qrdeuihavrwyxutyuejo.supabase.co/functions/v1/api-publica/v1/sandbox/pedidos/<id>/simular?forceFunctionRegion=eu-central-1' \
-H 'Authorization: Bearer c5_test_…' \
-H 'Idempotency-Key: 6f1d2c…' \
-H 'Content-Type: application/json' \
-d '{ "decision": "confirmar" }'Esquema del cuerpo (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"decision": {
"type": "string",
"enum": [
"confirmar",
"rechazar",
"cambiar"
]
}
},
"required": [
"decision"
],
"additionalProperties": false
}