Guías rápidas
Tres formas de conectar
Empieza siempre con una clave c5_test_ (sandbox) y pasa a c5_live_ cuando funcione.
Añade siempre ?forceFunctionRegion= con la región UE del proyecto (la tienes en la referencia) para que tus peticiones se procesen en la UE.
1. Conecta tu programa de facturación (te manda los pedidos)
- Crea una clave test con los alcances
pedidos:escribirycontactos:escribir. - Da de alta el cliente con
POST /v1/contactos(o mándalo dentro del pedido). - Pide la factura con
POST /v1/pedidos: responde202conestado: pendiente_confirmacion. - Escucha
factura.emitidaen tu webhook. En el sandbox, simula al titular conPOST /v1/sandbox/pedidos/{id}/simular(confirmar,rechazarocambiar). - Pasa a una clave live: el titular recibirá el resumen por WhatsApp y solo se emite si lo confirma.
2. Recibe tus facturas y gastos en tu ERP
- Clave con
facturas:leerygastos:leer. - Webhook a
factura.emitidaygasto.registrado. Verifica la firma (abajo). - Al recibir el evento, pide
GET /v1/facturas/{id}y su PDF (/pdf, URL de 5 minutos). - Para la primera sincronización, recorre
GET /v1/facturasconcursorhasta quesiguienteseanull.
Verificar la firma (Node.js)
import crypto from 'node:crypto';
// El cuerpo CRUDO (tal cual llega, sin parsear) y la cabecera ConfIA5-Firma: "t=1760536800,v1=<hex>[,v1=<hex>]".
export function firmaValida(cabecera, cuerpoCrudo, secreto, toleranciaS = 300) {
const partes = cabecera.split(',').map((p) => p.trim().split('='));
const t = Number(partes.find(([k]) => k === 't')?.[1]);
if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > toleranciaS) return false;
const esperada = crypto.createHmac('sha256', secreto).update(`${t}.${cuerpoCrudo}`).digest('hex');
// Durante la rotación del secreto llegan dos firmas v1: vale cualquiera. Comparación en tiempo constante.
return partes
.filter(([k]) => k === 'v1')
.some(([, v]) => v && v.length === esperada.length && crypto.timingSafeEqual(Buffer.from(v), Buffer.from(esperada)));
}Los eventos llevan ConfIA5-Evento-Id para deduplicar. Reintentamos durante 24 h (1 min, 5 min, 30 min, 2 h, 6 h, 12 h); después el destino se desactiva y te avisamos. No seguimos redirecciones y solo enviamos a https con dominio público.
3. Exporta a tu contabilidad
- Clave con
exportaciones:crear. POST /v1/exportacionesconformato: "universal"y el periodo: ZIP con los PDF y los libros en CSV.- Escucha
exportacion.listao consultaGET /v1/exportaciones/{id}para la URL de descarga. - Los formatos de programa (a3, ContaPlus…) llegarán cuando los validemos con ficheros reales: nunca inventamos un formato.