Elige tu caso. Te mostramos qué entrega Ruka, qué construyes tú y por dónde partir.
Del total de la factura al costo de cada insumo.
Cruza el detalle de compras con tu modelo de negocio. Ruka entrega cantidades, importes, clasificaciones y centros de costo; tú eliges cómo analizarlos.
01Compras en Ruka
02Líneas y repartos
03Tu modelo de costos
Recibes las líneas que coinciden con tus filtros, sin multiplicarlas por centro de costo.
De tu lado. Tu integración normaliza unidades, guarda los datos y construye las métricas.
Primer registro de data. Tipos observados en esta respuesta sintética; no reemplazan el esquema del contrato.
id
number
line_number
number
name
string · texto
description
string · texto
quantity
string · texto
unit_price
string · texto
amount
string · texto
vat_amount
string · texto
additional_tax_amount
string · texto
discount
string · texto
surcharge
string · texto
product_id
number
unit
null · sin valor
classification
objeto
cost_center_allocations
array · 1 elementos
accounting
objeto
invoice
objeto
Variantes del contrato, no respuestas en vivo ni un esquema exhaustivo. Elegir una respuesta aquí no cambia los parámetros de la petición.
Lo importante de esta operación
Rango obligatorio: issued_from e issued_to en YYYY-MM-DD, ambos inclusivos; la diferencia entre ellos no puede superar 31 días. Los filtros se aplican antes de contar y paginar.
Filtra por emisión e incluye todos los estilos por defecto. date_basis=reporting usa mes de reporte completo; si falta, acuse y luego emisión.
Los filtros de estilo y centro devuelven sólo las líneas coincidentes; cost_center_allocations no multiplica filas. Orden: emisión, ID de factura e ID de línea.
Paginación con page y per_page (default 50, máximo 100). La respuesta trae data y meta con page, per_page, total y total_pages.
Incluye DTE 33 y 34. include_credit_notes agrega 61 y 56 con sus montos originales cuando existen, sin cambiar el signo.
Centro de costo por división, luego línea y luego factura. Los montos divididos ya son absolutos; IVA, impuestos, descuento y recargo se prorratean. DTE 34 y líneas exentas no generan IVA.
accounting trae mode, effective, resolved_from, dimensions y splits. Precedencia: línea, insumo, producto y factura. Una división usa mode: split. Porcentajes en escala humana: 75.0 es 75 %.
Montos y cantidades llegan como strings decimales. Los valores desconocidos pueden ser null.
Detalle del libro de compras con aprobación interna en Ruka. Incluye líneas, impuestos, referencias, clasificaciones y datos originales del libro; no incluye el XML.
Busca por folio, tipo DTE y RUT emisor. Devuelve el XML almacenado, su contenido convertido a JSON o el PDF generado por Ruka. Solo documentos aprobados internamente en Ruka.
Da de baja un webhook y cancela sus entregas pendientes. Una petición que ya comenzó puede finalizar.
Una integración confiable empieza por leer bien los datos.
No todos los reportes se recorren igual. Elige la ruta según la tarea y conserva sus filtros durante toda la extracción.
Facturas y líneas
Por número de página.
page=1page=2hasta meta.total_pages
Usa issued_from y issued_to. Ambos extremos se incluyen y su diferencia no puede superar 31 días. Continúa hasta meta.total_pages, con un máximo de 100 registros por página.
En facturas, los filtros de líneas seleccionan documentos, pero mantienen el total completo de la factura. En líneas, recibes solo las que coinciden.
Usa start_date y end_date. El final debe ser anterior al mismo día del mes siguiente al inicio. Envía meta.next_after_id como after_id hasta que el cursor sea null.
Con date_basis=updated puedes buscar cambios. El libro expone estado actual, no un historial de eliminaciones: solapa ventanas y reconcilia lo que ya guardaste.
Los importes y cantidades pueden llegar como strings decimales. Conserva su precisión y trata null como información desconocida, no como cero. cost_center_allocations no multiplica la línea original: no sumes su importe y sus repartos dos veces.
Notas de crédito y débito
include_credit_notes=true incorpora DTE 61 y 56 con sus montos originales, sin invertir el signo automáticamente. Define el tratamiento por tipo de documento antes de sumar; no restes una nota dos veces.
El documento correcto para cada uso
purchase_documents usa folio, dte_type y vendor_tax_id. Conserva ceros iniciales del folio y agrega company_id si hay ambigüedad. JSON representa el XML almacenado; XML entrega ese archivo; PDF es una representación generada por Ruka, no el original del proveedor.
Claves, identidades y migraciones
Una clave solo permite consultar el alcance de su cuenta. No asumas que los IDs de una integración anterior coinciden con V3. Comprueba equivalencias, permisos y empresas antes de migrar. No expongas la clave en un frontend.
Recibe el cambio. No pierdas el contexto.
Los webhooks evitan consultar todo el día. Tu receptor debe estar preparado para una entrega repetida, un retraso o una caída.
Ejemplo Node.js. No incluye almacenamiento ni un worker.
01Verificar firma
02Guardar evento
03Responder 2xx
04Procesar en cola
Primero guarda. Después confirma.
Si la firma es válida, persiste el evento y el trabajo pendiente antes del 2xx. Una respuesta rápida no sirve si el proceso se cae y el evento se pierde.
01Verificar firma
02Consultar identidad
03Confirmar persistencia
04No repetir efectos
Mismo evento, un solo efecto.
Deduplica por X-Ruka-Event-Id y cuenta o suscripción. Si ya está guardado, confirma su estado durable; no vuelvas a registrar la misma compra ni a aplicar el mismo movimiento.
01Verificar firma
02Rechazar entrega
03No guardar negocio
04No procesar
Sin autenticidad, no hay trabajo que ejecutar.
Rechaza firmas inválidas o timestamps fuera de cinco minutos. No interpretes la factura como confiable ni apliques cambios al negocio.
Cómo verificar la firma
Usa HMAC-SHA256 sobre timestamp + punto + cuerpo crudo, sin volver a serializar el JSON. Compara en tiempo constante y controla la antigüedad del timestamp. El verificador descargable muestra este paso; no incluye la cola ni la base de datos.
Guía de diseño del receptor, no una entrega en vivo. Considera eventos fuera de orden y reconcilia el histórico.
Necesitas una clave permanente de la persona dueña de la cuenta con administración y reportes, y un receptor HTTPS en el puerto 443 que responda al HEAD de comprobación con 2xx o 405. Guarda el signing_secret al crear: solo se muestra una vez. PATCH reemplaza la lista de eventos; agregar uno no recupera el pasado.
El estado HTTP es el comienzo, no el diagnóstico completo. Consulta también el código del cuerpo y la operación que llamaste.
Revisa la clave
Puede estar inválida, revocada o fuera del acceso habilitado. En administración de webhooks también importa que sea permanente. No repitas la misma petición indefinidamente.
No todos estos códigos corresponden a todas las operaciones. El enlace lleva al contrato de un endpoint que lo documenta.
Resuelve el conflicto
ambiguous_document requiere identificar la empresa receptora con company_id. webhook_exists indica una URL ya registrada. Lee el código de error de la operación.
El contrato público incluye facturas y líneas de compra, clasificaciones de productos, un libro de compras con revisión interna, documentos en JSON, XML o PDF y administración de webhooks. El acceso depende de la cuenta, sus permisos y las empresas autorizadas.
¿Dónde obtengo la clave y dónde debo guardarla?
Accede a la documentación con tu cuenta para revisar la habilitación y las credenciales disponibles. Usa Authorization: Bearer y guarda la clave en el servidor, fuera del código público y del navegador. Comprobar /api/v1/ping valida la clave, no concede permisos de reportes.
¿Puedo probar aquí con una clave real?
No. Este explorador muestra ejemplos del contrato y no envía peticiones. No solicita credenciales ni es una sandbox. Los ejemplos de respuesta son sintéticos; la validación con datos autorizados se hace desde tu entorno.
¿La API registra automáticamente compras en mi ERP?
La API permite consultar datos. Tu integración debe mapear identidades, decidir cómo persistir cada documento y reconciliar el resultado. No escribe automáticamente en un ERP externo. Si necesitas implementar el proceso, puedes evaluar su alcance con Ruka One.
¿Los webhooks reemplazan una carga histórica?
No. Los eventos pueden repetirse o llegar fuera de orden y agregar una suscripción no recupera el pasado. Combina un receptor con firma verificada, persistencia y deduplicación con consultas de reconciliación del histórico.
¿Esta documentación incluye emisión de DTE?
Esta referencia pública documenta compras y webhooks, no una API de emisión. RukaFactura es otra capacidad de Ruka; no asumas que compartir el dominio de la API habilita emisión de documentos en estos endpoints.
Referencia revisada el . Consulta el contrato enlazado para los campos y permisos vigentes. Los ejemplos de esta página no consultan datos de clientes.