Factura desde tu propio sistema
Envía la venta por API REST y recibe el comprobante aceptado por SUNAT, con su PDF y XML.
Integración en cuatro pasos
Crea una API key
Desde tu panel, con los permisos que necesite y para el entorno de pruebas o de producción.
Emite el comprobante
Un POST a /comprobantes/emitir con el cliente, la moneda y los ítems.
Recibe el resultado
En la misma respuesta, o por webhook si prefieres el modo asíncrono.
Descarga PDF y XML
Consulta el comprobante y descarga sus archivos cuando los necesites.
Emite con una sola llamada
Con webhook: false (el valor por defecto) Facto valida los datos, crea el comprobante y lo envía a SUNAT en la misma petición, así que la respuesta ya trae el estado final.
- URL base
- https://api.facto.com.pe/api/v1
- Autenticación
- Header
Authorization: Bearer sk_…
En fechaEmision usa la fecha del día. Para el detalle de todos los campos y variantes (crédito, dólares, exportación…) consulta la documentación.
POST /comprobantes/emitirIdempotency-Key: 7d1f2c…{"webhook": false,"documento": {"tipoComprobante": "01","serie": "F001", "moneda": "PEN","cliente": { "numeroDocumento": "20600123450" },"items": [{ "cantidad": 2,"precioUnitario": 590, "tipoIgv": "10" }]}}→ estado: "ACEPTADA"correlativo: "F001-00000003"totales: { gravada: "1000",igv: "180", total: "1180" }hash: "xvQpVb…IPo8="CDR · código 0 · aceptadaXML · <ds:Signature> UBL 2.1
Ejemplos listos para copiar
La misma emisión en cURL y JavaScript, y la respuesta que recibes.
curl -X POST https://api.facto.com.pe/api/v1/comprobantes/emitir \
-H "Authorization: Bearer sk_test_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhook": false,
"documento": {
"fechaEmision": "AAAA-MM-DD",
"sunatTransaccion": "0101",
"tipoComprobante": "01",
"serie": "F001",
"moneda": "PEN",
"formaPago": "CONTADO",
"cliente": {
"tipoDocumento": "6",
"numeroDocumento": "20600123450",
"denominacion": "EMPRESA DE SERVICIOS S.A.C.",
"direccion": "AV. LIMA 123 - LIMA - LIMA - LIMA"
},
"items": [
{
"unidadMedida": "NIU",
"descripcion": "SERVICIO DE CONSULTORÍA",
"cantidad": 2,
"precioUnitario": 590,
"tipoIgv": "10"
}
]
}
}'Pensada para integrarse con confianza
API keys con permisos
Cada key (sk_live_… o sk_test_…) solo puede hacer lo que sus permisos le permitan y se puede revocar o rotar.
Entorno de pruebas aislado
Crea keys de entorno test para validar tu integración sin tocar los datos de producción.
Webhooks firmados
Con webhook: true recibes el resultado final por notificación, firmada con HMAC para que verifiques su origen.
Reintentos seguros
Envía un Idempotency-Key para que reintentar una emisión tras un corte de red no duplique el comprobante.
Límite de solicitudes por key
Configuras el límite por minuto de cada key. Al superarlo, la API responde 429 con Retry-After.
Estados claros
ACEPTADA o RECHAZADA. Un rechazo de SUNAT responde 200 y el motivo viene en data.documento.sunat.mensaje.
Endpoints principales
Una muestra de la API. La referencia completa está en la documentación.
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /comprobantes/emitir | Emite una factura o boleta y la envía a SUNAT en la misma llamada. |
| GET | /invoices/{id} | Consulta el estado y los datos de un comprobante. |
| GET | /invoices/{id}/pdf | Descarga el PDF del comprobante. |
| GET | /invoices/{id}/xml | Descarga el XML UBL 2.1 del comprobante. |
| POST | /comprobantes/anular | Anula un comprobante ya aceptado. |
| POST | /credit-notes | Emite una nota de crédito. |
| POST | /debit-notes | Emite una nota de débito. |
| GET | /lookup/ruc/{ruc} | Consulta los datos de un RUC para prellenar al cliente. |
| GET | /lookup/dni/{dni} | Consulta los datos de un DNI para prellenar al cliente. |
Documentación
- Guía rápida (se abre en una pestaña nueva)De cero a un comprobante aceptado en cuatro pasos.
- Autenticación (se abre en una pestaña nueva)Cómo enviar tu API key y qué entornos existen.
- API keys y permisos (se abre en una pestaña nueva)Crea, limita, rota y revoca tus keys.
- Webhooks (se abre en una pestaña nueva)Modo asíncrono y verificación de la firma.
- Estados de documento (se abre en una pestaña nueva)Qué significa cada estado y cuándo cambia.
- Errores (se abre en una pestaña nueva)Formato de errores y códigos de la API.
¿Prefieres un conector listo para tu plataforma? Mira las integraciones.
Cuéntanos cómo facturas hoy
Agenda una demo y vemos juntos cómo emitir, integrar y controlar tus comprobantes en Facto.