Introducción a la API
La API REST de Pro DTE emite facturas, notas, guías y boletas ante el SII desde tu sistema, sigue el estado de cada envío y entrega el PDF y el XML de cada documento.
URL base y formato
- Todas las rutas parten de
https://api.prodte.com. - Se envía y se recibe JSON (
Content-Type: application/json). El PDF respondeapplication/pdfy el XML firmado,application/xmlen ISO-8859-1. GET /healthresponde sin autenticación y sirve para comprobar que el servicio está arriba.
Autenticación
Crea una clave de API en el portal, en Configuración → Claves de API. Solo el administrador de la cuenta puede crearlas, y cada clave lleva un rol. La clave se muestra una sola vez: guárdala como un secreto de tu sistema y envíala en cada solicitud.
curl -s https://api.prodte.com/taxpayers \
-H "X-API-Key: $PRODTE_API_KEY"- También sirve
Authorization: Bearer pdte_…, si tu cliente HTTP solo maneja ese encabezado. - Si una clave se filtra, revócala en el mismo lugar: deja de funcionar en la siguiente solicitud.
| Rol | Qué puede hacer |
|---|---|
| OPERATOR | Emite cualquier documento, lo reenvía, consulta su estado en el SII y lo descarga. |
| CASHIER | Emite solo boletas, para una caja o un punto de venta, y consulta los documentos. |
| AUDITOR | Solo consulta: documentos, empresas, folios, PDF y XML. |
Los usuarios del portal tienen los mismos roles y uno más, el administrador (ver Roles y usuarios). Dale a cada sistema la clave con el rol mínimo que necesite.
Emitir un documento
rutEmisor es una de las empresas de tu cuenta. Pro DTE toma el folio, firma el documento con el certificado de la empresa, lo timbra y lo envía al SII:
curl -s https://api.prodte.com/dte \
-H "X-API-Key: $PRODTE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pedido-1042' \
-d '{
"rutEmisor": "76111111-1",
"tipoDte": 33,
"receptor": {
"rut": "76222222-2",
"razonSocial": "Cliente SpA",
"giro": "Comercio al por menor",
"direccion": "Av. Las Condes 9999",
"comuna": "Las Condes"
},
"items": [
{ "nombre": "Servicio de consultoría", "cantidad": 2, "precioUnitario": 50000 }
]
}'La respuesta, abreviada:
{
"id": "…",
"tipoDte": 33,
"folio": 1042,
"status": "SENT",
"env": "PROD",
"montoNeto": 100000,
"montoIva": 19000,
"montoTotal": 119000,
"trackId": "0255013377",
…
}- Sin duplicados: envía
Idempotency-Keycon un valor único por documento, como el número del pedido. Si repites la solicitud tras un corte de red, recibes el mismo documento y no se gasta otro folio. - Precios:
precioUnitariova neto, sin IVA, en facturas y notas; en boletas va con el IVA incluido, como lo paga el comprador. - Boletas:
tipoDte39 o 41. El receptor es opcional: sin él, la boleta va al consumidor final. El comprador la verifica en app.prodte.com/verificar con los datos impresos. - Ambiente: cada empresa emite en el ambiente en que está, certificación (
CERT) mientras se certifica y producción (PROD) cuando el SII la autoriza. Solo lo emitido en producción tiene validez tributaria.
Estados y seguimiento
| status | Qué significa |
|---|---|
| SIGNED | Firmado, pero el SII no lo recibió. Reenvíalo con POST /dte/{id}/enviar: usa el mismo folio. |
| SENT | Recibido por el SII y en revisión. POST /dte/{id}/estado consulta el resultado y actualiza el documento. |
| ACCEPTED | Aceptado por el SII. siiStatus trae el código del SII y siiGlosa su detalle. |
| REJECTED | Rechazado por el SII. siiGlosa explica el motivo. |
GET /dte lista lo emitido, del más reciente al más antiguo, y GET /dte/{id}/pdf y GET /dte/{id}/xml descargan cada documento (ver Ver y descargar el PDF).
Errores
Los errores responden con esta forma, y message viene en español, listo para mostrar a quien usa tu sistema:
{
"statusCode": 401,
"message": "Clave de API inválida o revocada",
"error": "Unauthorized"
}| statusCode | error | Cuándo |
|---|---|---|
| 400 | Bad Request | Los datos no son válidos. En este caso message es una lista con cada problema. |
| 401 | Unauthorized | Falta la clave, fue revocada o el token de la sesión expiró. |
| 403 | Forbidden | El rol de la clave no alcanza para esa acción, o el plan Gratis llegó a su tope del mes. |
| 404 | Not Found | El recurso no existe en tu cuenta. |
| 409 | Conflict | La operación choca con el estado actual, por ejemplo otra emisión tomó el mismo folio. Reintenta. |
| 429 | Too Many Requests | Pasaste el límite de solicitudes. Espera un momento y reintenta. |
Límites
Con una clave o una sesión: 25 solicitudes por segundo, 600 por minuto y 20.000 por hora por IP. Al pasarlos, la API responde 429.
Referencia
La referencia de la API describe cada endpoint, campo y respuesta del documento OpenAPI publicado en https://api.prodte.com/api/openapi.json. Para probar llamadas con tu clave, usa la versión interactiva en api.prodte.com/api.