Autorizar un comprobante y obtener el CAE por API: POST /bill/receipts/authorize/{comprobante_id}/
Es el segundo paso del flujo en dos pasos: enviás a ARCA un comprobante que dejaste en borrador y recibís el CAE. Si ARCA lo rechaza, el comprobante queda rechazado y lo corregís antes de reintentar. Los ejemplos de esta página se capturaron en sandbox (token yf_test_): el CAE y el número son simulados, ARCA no los emitió y no valen como comprobante fiscal; lo reconocés por simulated: true y livemode: false. En sandbox toda factura nace autorizada, así que acá ves el mismo comprobante; con un token live y ambiente testing ves el paso real de borrador a autorizado.
Qué hace
Envía a AFIP un comprobante creado en borrador y obtiene su CAE. Con un token yf_test_* (sandbox) este endpoint no llama a AFIP: persiste un comprobante simulado (simulated: true, livemode: false, un CAE sintético) en la base sandbox aislada del tenant. Requiere scope invoices:write. En un tenant que factura con SIFEN (Paraguay) responde 409 con error_code: use_sifen_routes: emití con POST /sales/ y las notas con POST /sales/{sale_id}/credit_note/.
Parámetros
| Parámetro | Dónde | Requerido | Tipo | Descripción |
|---|---|---|---|---|
comprobante_id | path | sí | string |
Ejemplo real capturado
Los ejemplos se generaron en el entorno de pruebas: el CAE es simulado y no tiene validez fiscal.
Capturado el 2026-11-10 en el entorno de pruebas con un token yf_test_*: los datos personales están anonimizados y el CAE de un comprobante de prueba es sintético.
Request
{}Respuesta (HTTP 200)
{
"success": true,
"data": {
"tipo_comprobante": 6,
"punto_venta": 1,
"concepto": 1,
"tipo_documento": 99,
"numero_documento": "0",
"razon_social": "Empresa Demo SRL",
"items": [
{
"descripcion": "Camiseta basica",
"cantidad": 2,
"precio_unitario": 12100,
"iva_id": 5
}
],
"precios_con_iva": true,
"numero_comprobante": 62865608,
"cae": "59926089443433",
"cae_vencimiento": "20261120",
"fecha_comprobante": "20261110",
"estado": "autorizado",
"ambiente": "sandbox",
"livemode": false,
"sandbox": true,
"simulated": true,
"simulated_note": "Sandbox test-mode invoice: no AFIP call was made. This CAE is not issued by AFIP and is not valid for a real fiscal document.",
"created_at": "2026-11-10T03:56:42.730000",
"email": "[email protected]",
"id": "6af295faeb1c8b54b8284667"
},
"message": "Receipt authorized in sandbox mode (synthetic CAE)"
}Campos de la respuesta 200
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
success | boolean | no | |
data | object | no | |
data.id | string | no | |
data.tipo_comprobante | integer | no | |
data.punto_venta | integer | no | |
data.numero_comprobante | integer | no | |
data.cae | string | no | Código de Autorización Electrónico de AFIP (o sintético en sandbox). |
data.cae_vencimiento | string | no | |
data.fecha_comprobante | string | no | |
data.estado | string | no | |
data.ambiente | string | no | |
data.livemode | boolean | no | false cuando el comprobante fue emitido por un token yf_test_* (simulado, sin AFIP real). |
data.simulated | boolean | no | true en modo sandbox: el CAE tiene el formato correcto pero NO es válido para un comprobante fiscal real. |
data.iva_handling | object | no | |
data.iva_handling.incluye_iva_discriminado | boolean | no | |
data.iva_handling.tipo_comprobante_nombre | string | no | |
data.iva_handling.condicion_fiscal_emisor | string | no | |
data.idempotent_replay | boolean | no | true si esta respuesta es la reproducción de un request anterior idéntico. |
data.items | array de object | no | |
data.items[].Descripcion | string | no | |
data.items[].Cantidad | number | no | |
data.items[].Precio | number | no | Precio unitario (neto de IVA cuando el tipo discrimina IVA). |
data.items[].Bonificacion | number | no | |
data.items[].IvaId | integer | no | Alícuota AFIP (3=0%, 4=10.5%, 5=21%, 6=27%, 8=5%, 9=2.5%). |
data.items[].importe_neto_linea | number | no | Neto de la línea: Precio x Cantidad - Bonificacion, redondeado a 2 decimales (ROUND_HALF_UP). Calculado por el backend. |
data.items[].importe_iva_linea | number | no | IVA de la línea (0 si el tipo no discrimina IVA, 0% o exento). Calculado por el backend. |
data.items[].importe_total_linea | number | no | importe_neto_linea + importe_iva_linea. La suma de las líneas puede diferir de importe_total por el redondeo por línea y no incluye tributos. |
message | string | no | |
_links | object | no | Mapa HATEOAS: cada valor es un link accionable relativo a este recurso. |
Respuestas de error
Todo error tiene la forma {"success": false, "error": "...", "code": "..."}.
| Estado | Descripción | Código |
|---|---|---|
| 400 | Solicitud inválida (body ausente o con formato incorrecto). | VALIDATION_ERROR |
| 401 | Falta autenticación o el token es inválido/expiró. | UNAUTHORIZED |
| 403 | El token no tiene el/los scope(s) requeridos, o el plan del tenant no habilita el módulo. | FORBIDDEN |
| 404 | El recurso solicitado no existe (o no pertenece a este tenant). | NOT_FOUND |
| 429 | Se superó el rate limit del endpoint o del tenant. Ver headers X-RateLimit-* y Retry-After. | RATE_LIMITED |



