Para desarrolladores
API de facturación electrónica REST para tu ERP, POS o e-commerce
Una API de facturación electrónica en JSON que se encarga de todo lo que exige SUNAT: el XML UBL 2.1, la firma digital, el envío, la lectura del CDR y el almacenamiento. Tu equipo solo integra unas pocas llamadas HTTPS.
Tu primera factura electrónica en cinco minutos
Crea tu cuenta y recibirás credenciales del ambiente de pruebas, conectado a SUNAT beta. Copia el ejemplo, reemplaza tus credenciales y ejecútalo: la respuesta trae el comprobante con su estado ante SUNAT.
Con "esperar_cdr": true la API espera la respuesta de SUNAT (hasta 20 segundos) y te devuelve el comprobante aceptado o rechazado en la misma llamada. Sin ese parámetro responde al instante y el envío sigue en la cola.
curl -X POST https://conectasunat.com/api/v1/facturas \
-H "X-Api-Key: $API_KEY" \
-H "X-Api-Secret: $API_SECRET" \
-H "Idempotency-Key: pedido-000123" \
-H "Content-Type: application/json" \
-d '{
"serie": "F001",
"fecha_emision": "2026-10-04",
"tipo_moneda": "PEN",
"cliente": {"tipo_doc": "6", "num_doc": "20131312955", "razon_social": "CLIENTE SAC"},
"items": [{"descripcion": "Servicio de soporte", "unidad": "ZZ", "cantidad": 1, "precio_unitario": 118}]
}'
$ch = curl_init('https://conectasunat.com/api/v1/facturas');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-Api-Key: ' . getenv('API_KEY'),
'X-Api-Secret: ' . getenv('API_SECRET'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'serie' => 'F001',
'fecha_emision' => date('Y-m-d'),
'cliente' => ['tipo_doc' => '6', 'num_doc' => '20131312955', 'razon_social' => 'CLIENTE SAC'],
'items' => [['descripcion' => 'Servicio de soporte', 'unidad' => 'ZZ', 'cantidad' => 1, 'precio_unitario' => 118]],
]),
]);
$factura = json_decode(curl_exec($ch), true);
echo $factura['datos']['sunat']['estado']; // enviado → aceptado
const res = await fetch('https://conectasunat.com/api/v1/facturas', {
method: 'POST',
headers: {
'X-Api-Key': process.env.API_KEY,
'X-Api-Secret': process.env.API_SECRET,
'Content-Type': 'application/json',
},
body: JSON.stringify({
serie: 'F001',
fecha_emision: '2026-10-04',
esperar_cdr: true,
cliente: { tipo_doc: '6', num_doc: '20131312955', razon_social: 'CLIENTE SAC' },
items: [{ descripcion: 'Servicio de soporte', unidad: 'ZZ', cantidad: 1, precio_unitario: 118 }],
}),
});
const { datos } = await res.json();
console.log(datos.sunat.estado); // "aceptado"
import os, requests
r = requests.post(
"https://conectasunat.com/api/v1/facturas",
headers={"X-Api-Key": os.environ["API_KEY"], "X-Api-Secret": os.environ["API_SECRET"]},
json={
"serie": "F001",
"fecha_emision": "2026-10-04",
"cliente": {"tipo_doc": "6", "num_doc": "20131312955", "razon_social": "CLIENTE SAC"},
"items": [{"descripcion": "Servicio de soporte", "unidad": "ZZ", "cantidad": 1, "precio_unitario": 118}],
},
)
print(r.json()["datos"]["sunat"]["estado"])
Autenticación y ambientes
Cada petición lleva las cabeceras X-Api-Key y X-Api-Secret de tu empresa. Tus credenciales de SUNAT (usuario SOL y certificado digital) quedan cifradas en el servidor y nunca viajan en tus peticiones.
- Credenciales de producción: envían a SUNAT con validez tributaria.
- Credenciales de prueba: envían a SUNAT beta. Tienen series, comprobantes, reportes y archivos separados de producción.
Endpoints principales de la API SUNAT
| Recurso | Ruta | Uso |
|---|---|---|
| Facturas | POST /facturas | Factura electrónica (01) con IGV, ISC, ICBPER, detracción, anticipos y cuotas |
| Boletas | POST /boletas | Boleta de venta electrónica (03), individual o por resumen diario |
| Notas | POST /notas-credito · /notas-debito | Notas de crédito (07) y débito (08) sobre una factura o boleta |
| Guías | POST /guias-remision | Guía de remisión electrónica remitente (09) y transportista (31) |
| Bajas y resúmenes | POST /anulaciones · /resumenes | Comunicación de baja (RA) y resumen diario (RC) con ticket |
| Retenciones y percepciones | POST /retenciones · /percepciones | Comprobantes 20 y 40 y su reversión |
| Consultas | POST /consultar-cdr · GET /consultar-cpe | CDR de un comprobante y validez de comprobantes |
| Reportes | GET /reportes/* | Registro de ventas y más, en JSON, CSV o PDF |
Webhooks firmados e idempotencia
Configura una URL y te avisaremos cuando SUNAT acepte o rechace cada comprobante. Cada aviso lleva la cabecera X-Webhook-Signature con un HMAC-SHA256 del cuerpo, para que verifiques que viene de nosotros.
Envía la cabecera Idempotency-Key al emitir: si tu sistema reintenta la misma petición, recibirás la misma respuesta sin duplicar el comprobante.
Errores claros y estados predecibles
Los comprobantes pasan por pendiente, enviado y terminan en aceptado o rechazado, siempre con el código y la descripción de SUNAT. Los errores de validación indican el campo exacto y el motivo, en español.
Integración con ERP, POS y tiendas online
Cualquier sistema que pueda hacer una petición HTTPS puede integrar la facturación electrónica: sistemas a medida, puntos de venta, plataformas de comercio electrónico o ERP. Si necesitas ayuda con tu caso, escríbenos.
Empieza a emitir comprobantes electrónicos hoy
Crea tu cuenta, prueba gratis en el ambiente beta de SUNAT y pasa a producción cuando estés listo.