Quickstart: de cero a un comprobante autorizado
Al final de esta guía vas a tener un comprobante con CAE de ARCA, su PDF, y la anulación hecha. Cuatro pedidos HTTP.
Todo lo que sigue —cada comando y cada respuesta— se ejecutó. Las respuestas son las que devolvió la API, sin retocar. Corrieron contra homologación, que es el entorno donde vas a empezar y donde ARCA entrega CAE real: no es un simulador.
Antes de empezar: lo que Emissa no te puede dar
Para emitir contra ARCA hacen falta tres cosas, y dos son trámites tuyos ante el organismo:
- Un certificado de ARCA (
.crt+ su clave privada), que se pide en el sitio de ARCA con un CSR. Emissa lo guarda cifrado y lo usa para firmar; no puede generarlo por vos. - Un punto de venta dado de alta para "Factura Electrónica – Webservice". No es el mismo alta que la del portal web de ARCA — ver Qué es un punto de venta.
- Una cuenta de Emissa con una API key.
Sé honesto con el reloj: si ya tenés el certificado y el punto de venta, lo que sigue son cinco minutos. Si no los tenés, el trámite ante ARCA es la parte larga y no depende de nosotros.
1 · La clave
Esto se hace en el panel, con el navegador. La API de integración es /v1; el
alta de cuenta y la creación de claves son del panel a propósito, porque entregar
una credencial de integración es de lo más sensible que hace el sistema.
- Creá tu cuenta en emissa.com.ar y verificá el correo.
- Activá el segundo factor. No es opcional: sin 2FA no se pueden crear API keys.
- Cargá tu contribuyente (CUIT, razón social, condición frente al IVA, punto de venta, domicilio).
- Subí el certificado y su clave privada.
- Generá una API key de prueba. Empieza con
emi_test_.
La clave se muestra una sola vez. Guardala en tu gestor de secretos.
Y el taxpayerId, que es el otro dato que vas a necesitar
Cada emisión lo pide, y no es el CUIT: es el id que Emissa le dio a tu
contribuyente. La forma de obtenerlo con la clave que acabás de crear es
GET /v1/consumo, que lista tus contribuyentes con su id:
curl https://api.emissa.com.ar/v1/consumo -H "X-API-Key: $EMISSA_API_KEY"
{
"period": "2026-07",
"plan": "SANDBOX",
"organization": {
"limite": 50,
"usada": 0,
"restante": 50,
"cuitActivos": 0
},
"taxpayers": [
{
"taxpayerId": "cms6q9ym80008ureocwo81ig2",
"cuit": "20437136697",
"billable": 0,
"total": 0
}
]
}
Ese taxpayerId es el que va en el cuerpo de la emisión. Alcanza con una clave que
declare invoice:read — verificado con una clave que sólo tenía ese scope.
2 · Emitir
Una Factura B a consumidor final por $1.000 + IVA.
curl -X POST https://api.emissa.com.ar/v1/invoices/authorize \
-H "X-API-Key: $EMISSA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: quickstart-6.1-primera" \
-d '{
"taxpayerId": "TU_TAXPAYER_ID",
"cbteTipo": 6,
"concepto": 1,
"receiverDocTipo": 99,
"receiverDocNro": "0",
"receiverName": "Consumidor Final",
"receiverVatConditionId": 5,
"issueDate": "2026-07-29",
"items": [
{
"description": "Plan Pro - julio 2026",
"unit": "UNIDADES",
"quantity": 1,
"unitPrice": 1000,
"tratamiento": "GRAVADO",
"vatRateId": 5
}
]
}'
201 Created, en 7,1 segundos:
{
"id": "cms6l4gnq0007ur04xl1dcqf0",
"environment": "HOMOLOGACION",
"cbteTipo": 6,
"cbteTipoNombre": "FACTURA_B",
"letra": "B",
"salePoint": 1,
"number": 131,
"comprobante": "0001-00000131",
"issueDate": "2026-07-29",
"totals": {
"netAmount": "1000.00",
"nonTaxedAmount": "0.00",
"exemptAmount": "0.00",
"vatAmount": "210.00",
"otherTaxesAmount": "0.00",
"totalAmount": "1210.00"
},
"vatBreakdown": [
{
"vatRateId": 5,
"vatRatePercent": 21,
"baseAmount": "1000.00",
"vatAmount": "210.00"
}
],
"status": "AUTHORIZED",
"cae": "86300696468093",
"caeExpiresAt": "2026-08-08",
"arcaMetadata": {
"service": "wsfev1",
"resultado": "A",
"authorized": true,
"observaciones": 0
}
}
(Recortado: la respuesta completa trae además emitter, receiver, items,
customer, taxes, associations, optionals y observations. Los campos de
arriba son textuales.)
Eso es un comprobante fiscal. resultado: "A" es ARCA diciendo aprobado.
El cae y el caeExpiresAt los emitió el organismo.
Los cuatro campos que más se eligen mal
| Campo | En este ejemplo | De qué depende |
|---|---|---|
cbteTipo | 6 = Factura B | La condición frente al IVA tuya y de tu cliente. Ver comprobantes A, B y C |
receiverDocTipo | 99 = consumidor final | 80 es CUIT, 96 DNI. Con 99 el receiverDocNro va en "0" |
receiverVatConditionId | 5 = consumidor final | Obligatorio desde la RG 5616. 1 es responsable inscripto |
vatRateId | 5 = 21 % | 4 es 10,5 %, 6 es 27 %, 3 es 0 %. 0 % no es exento ni no gravado |
Los importes viajan como string, no como número: "1210.00". Es a propósito
—un float no representa pesos— y tu cliente HTTP no tiene que redondear nada.
Idempotency-Key es obligatorio
Si lo omitís, el pedido se rechaza:
{
"statusCode": 400,
"errorCode": "IDEMPOTENCY_KEY_REQUIRED",
"message": "Falta el header Idempotency-Key. Es obligatorio en las operaciones que emiten un comprobante."
}
No es burocracia. Repetí el mismo pedido con la misma clave y mirá qué pasa:
# exactamente el mismo comando de arriba, otra vez
HTTP 201 · Idempotent-Replay: true · 0,02 segundos
id devuelto: cms6l4gnq0007ur04xl1dcqf0 | cae: 86300696468093 | number: 131
El mismo comprobante, el mismo CAE, el mismo número. No se emitió un segundo: verificado contando en la base, sigue habiendo uno con ese CAE. Y tardó 0,02 s en vez de 7,1 porque no salió a ARCA.
Un comprobante fiscal duplicado no se deshace: se anula con una nota de crédito y queda en tu historia. Por eso la clave es obligatoria y no un consejo.
3 · Consultar
curl https://api.emissa.com.ar/v1/invoices/cms6l4gnq0007ur04xl1dcqf0 \
-H "X-API-Key: $EMISSA_API_KEY" -i
HTTP 200 · 0,02 s
X-Request-Id: 17a81316-cd43-4f0f-b320-3c7a0e48ddfa
X-Emissa-Mode: test
Dos cabeceras que conviene loguear desde el primer día: X-Request-Id
identifica el pedido si tenés que reportar algo, y X-Emissa-Mode te dice si la
clave que usaste es test o live. Loguear la segunda evita la clase de sorpresa
que no se descubre hasta fin de mes.
4 · El PDF
curl https://api.emissa.com.ar/v1/invoices/cms6l4gnq0007ur04xl1dcqf0/pdf \
-H "X-API-Key: $EMISSA_API_KEY" -o comprobante.pdf
HTTP 200 · 0,08 s · 11696 bytes
$ head -c 8 comprobante.pdf | xxd
00000000: 2550 4446 2d31 2e37 %PDF-1.7
Trae el bloque del emisor, el detalle, las leyendas de transparencia fiscal y el QR de la RG 4892.
5 · Anular
En Argentina un comprobante autorizado no se borra: se anula emitiendo una nota de crédito que lo referencia. Emissa lo hace en un pedido.
curl -X POST https://api.emissa.com.ar/v1/invoices/cms6l4gnq0007ur04xl1dcqf0/cancel \
-H "X-API-Key: $EMISSA_API_KEY" \
-H "Idempotency-Key: quickstart-6.1-anular"
HTTP 200 · 0,35 s
tipo : 8 NOTA_CREDITO_B (letra B)
comprobante : 0001-00000033
cae NC : 86300696473229
status : AUTHORIZED
asociado : [{ "cbteTipo": 6, "salePoint": 1, "number": 131, "issueDate": "2026-07-29" }]
total : 1210.00
La nota de crédito tiene su propio CAE, distinto del de la factura: es un comprobante fiscal por derecho propio. Y la factura original queda así:
status: CANCELLED | cancelledByInvoiceId: cms6l58la000kur045qi0nfta | cae: 86300696468093
Conserva su CAE —fue válida y ARCA la autorizó— y ahora apunta a la nota que la anula.
Cuánto tarda de verdad
Tiempos medidos en la corrida de arriba, en el orden en que se hicieron:
| Paso | Tiempo | Por qué |
|---|---|---|
| Emitir (primera vez) | 7,09 s | Autentica contra WSAA y emite en WSFEv1 |
| Reintento idempotente | 0,02 s | No sale a ARCA: devuelve lo guardado |
| Consultar | 0,02 s | Lectura local |
| Bajar el PDF | 0,08 s | Se genera al pedirlo |
| Anular | 0,35 s | Emite en WSFEv1 con el ticket ya en caché |
Los cuatro pedidos suman menos de 8 segundos. El primero paga la autenticación contra ARCA, que dura 12 horas y queda cacheada: por eso anular —que también sale a ARCA— tardó 0,35 s y no 7.
Si tu primera emisión tarda parecido, está bien. Si tarda mucho más, mirá qué hacer cuando el CAE viene rechazado.
El error que casi todos cometen primero
La clave va en X-API-Key. En Authorization no funciona, y la API lo dice:
curl "https://api.emissa.com.ar/v1/invoices/search?taxpayerId=..." \
-H "Authorization: Bearer $EMISSA_API_KEY"
{
"statusCode": 401,
"errorCode": "API_KEY_WRONG_HEADER",
"message": "Las API keys van en el header X-API-Key, no en Authorization. Usá: X-API-Key: emi_...",
"details": "La key llego en Authorization; va en X-API-Key desde la version 1"
}
Sobre el sandbox y producción
La clave emi_test_ opera contra homologación, y homologación no consume
cuota: después de emitir la factura y la nota de crédito, GET /v1/consumo
seguía en cero.
{
"period": "2026-07",
"plan": "SANDBOX",
"organization": {
"limite": 50,
"usada": 0,
"restante": 50,
"cuitActivos": 0
},
"taxpayers": [{ "cuit": "20437136697", "billable": 0, "total": 2 }]
}
total: 2 son los dos comprobantes emitidos; billable: 0 es lo que se factura
por ellos.
El paso a producción, y una advertencia que conviene leer antes que cualquier
otra cosa: emitir en PRODUCCION está habilitado, y lo que emitís ahí es un
comprobante fiscal real. Entra en los registros del contribuyente ante ARCA,
pesa en su declaración de IVA, y no se borra — se revierte con una nota de crédito.
Todo lo que hiciste hasta acá fue en HOMOLOGACION, que emite con CAE real del
organismo y no tiene consecuencia fiscal. Es el lugar para probar; no hay
apuro en salir de ahí.
Lo que ARCA te va a exigir para producción, y que Emissa no verifica porque vive del otro lado: certificado productivo, punto de venta de tipo "Factura Electrónica – Web Service" —uno de Comprobantes en Línea no sirve— y el servicio autorizado. Si falta alguno, contesta ARCA con el motivo concreto.
Los controles que sí hace Emissa, medidos: con una clave test contra un
contribuyente en PRODUCCION la respuesta es 403 API_KEY_WRONG_MODE, y con una
live sin credencial cargada es 400 CREDENTIALS_REQUIRED. Los dos conjuntos
—test↔HOMOLOGACION, live↔PRODUCCION— son disjuntos a propósito: no podés
emitir un comprobante fiscal real con la clave con la que estabas probando.
Mientras tanto el sandbox ejercita el circuito completo con CAE real, que es lo que acabás de hacer.
Qué sigue
- Qué es un punto de venta — el alta que hay que hacer en ARCA antes de emitir.
- Por qué hay comprobantes A, B y C — elegir mal el tipo es el rechazo más común.
- Cómo se numera una serie — por qué un hueco importa.
- La referencia para el detalle de cada operación.