X-Api-Key.
Prerequisitos
La empresa emisora debe estar dada de alta con certificado y folios cargados.1. Emitir el comprobante
Envía una peticiónPOST con los datos del comprobante. La emisión es asíncrona: Emify recibe el documento, lo genera, lo firma y lo envía al SII en segundo plano.
factura.json
La tasa de cada impuesto
Cada impuesto, sea deitems[].taxes, de global_taxes o de totals.taxes, lleva type y amount. La rate depende del tipo. Cada tipo de GET /api/tax-types trae rate_source, que dice de dónde sale su tasa:
CATALOG: la tasa es la del catálogo. Puedes omitirrate, y si la envías se ignora. Es el caso del IVA en todos los países y de los impuestos adicionales de Chile.CLIENT: la tasa depende de la operación y tienes que enviarla. Es el caso de las percepciones y de los tributos provinciales y municipales de Argentina. Sinrate, el documento queda enINVconTAX_RATE_REQUIREDenvalidation_errors, sobre el campo del impuesto, y no se emite.
CATALOG, es la del catálogo al momento de crear el documento, aunque hayas enviado otra.
Un tipo dado de baja en el catálogo deja de aparecer en GET /api/tax-types y no se acepta en un documento nuevo: en cualquiera de los tres grupos, el documento queda en INV con INACTIVE_TAX_TYPE en validation_errors y el mensaje Tax type '<code>' is inactive for this country sobre el campo, por ejemplo items[0].taxes[1].type. Los documentos que ya creaste con ese tipo no cambian.
La respuesta confirma la recepción e incluye el id del documento y su estado inicial.
Validar antes de emitir
Para saber si un documento pasa las validaciones de Emify sin emitirlo, envía el mismo cuerpo aPOST /api/invoices/validate. El documento no se registra, no consume folio, no se envía al SII ni a ARCA y no se factura.
200 con:
200, con todos los errores:
field, code y message, que reportaría la emisión de ese cuerpo. También aparecen acá los que en la emisión rechazan el documento con 422, como DUPLICATE_EXTERNAL_REFERENCE, CERTIFICATE_NOT_FOUND o CERTIFICATE_EXPIRED. Un cuerpo mal formado, una empresa suspendida o un tipo de documento inexistente responden igual que en la emisión (400 o 404), sin valid.
2. Consultar el estado
El estado se resuelve de forma asíncrona. Consulta el documento hasta que llegue a un estado final, o mejor, usa webhooks.status y fiscal_status, y qué significan, están en Ciclo de vida de un documento.
La respuesta incluye el comprobante completo tal como quedó persistido, incluyendo billing_reference: es la forma de consultar qué referencias declaraste en un documento ya creado, no solo de saber qué códigos son válidos para declarar uno nuevo (ver más abajo).
3. Descargar el PDF
Una vez aprobado, descarga la representación impresa. Formatos:A4, 80mm, 58mm.
download-base64/{formato}.
En Chile, el PDF A4 de las facturas (tipos 33 y 34) incluye por defecto la copia cedible: una segunda hoja con el recuadro de acuse de recibo (nombre, RUT, fecha y firma), la leyenda de la Ley 19.983 y la palabra “CEDIBLE”. Es la copia que se usa para ceder la factura, por ejemplo a una empresa de factoring. Si solo necesitas la original, agrega cedible=false, tanto en download-pdf/A4 como en download-base64/A4:
80mm y 58mm y los comprobantes de Argentina nunca llevan copia cedible: en ellos, el parámetro se ignora.
En Chile, si el comprobante tiene observations, el PDF las imprime en un recuadro “Observaciones” (en A4, con y sin copia cedible, en 58 mm, en 80 mm y en los documentos de exportación), con un renglón por cada salto de línea. Es el lugar para datos que tu cliente necesita ver en el documento, como la orden de compra. Las observaciones solo aparecen en el PDF: no viajan en el XML que se envía al SII.
4. Descargar el XML
Anular un comprobante
En Chile, un documento emitido no se “borra”: se anula emitiendo una nota de crédito que lo referencia. Envía unPOST a invoices con invoice_type de nota de crédito (NCV), el reason_code correspondiente y billing_reference apuntando al documento original.
El documento referenciado en
billing_reference no necesita haber sido emitido por Emify: puedes referenciar un documento emitido por otro proveedor o sistema y Emify lo acepta, enviando la referencia al SII tal cual la informas para que él la valide.Cuando el documento referenciado sí existe en Emify y lo que emites es una nota de crédito (el tipo que anula otro documento, como NCV o NCC), el tipo referenciado debe ser anulable y la nota debe ser de su tipo de anulación. Por ejemplo, una factura de exportación se anula con NCXC, no con NCV.Una nota de débito (NDV, NDC) o un documento que referencia una guía de despacho no anula lo que referencia, así que esas reglas no aplican: puedes referenciar un documento emitido en Emify con cualquiera de ellos.El folio de una referencia
billing_reference[].number es el folio del documento referenciado, el FolioRef del SII: un texto de hasta 18 caracteres. Cada dato de la referencia va en su propio campo: el tipo en invoice_type, el folio en number y la fecha del documento referenciado en invoice_date.
Los documentos de respaldo no tienen folio numérico. Una orden de compra de Mercado Público, por ejemplo, se referencia así:
- Documentos tributarios (facturas, notas, boletas, guías de despacho, y todo comprobante argentino): el folio es un número, y puedes enviarlo como string (
"772") o como número (772). Si trae otro carácter, el documento queda enINVconINVOICE_BILLING_REF_NUMBER_NOT_NUMERICsobrebilling_reference[i].numberenvalidation_errors, y no se envía al SII. - Documentos de respaldo (el rango 800 —orden de compra, DUS, contrato…— y los códigos alfabéticos como
HES): el folio va tal como lo envías, letras y guiones incluidos. - Un folio de más de 18 caracteres se rechaza con
400antes de consumir folio. No empaquetes la referencia en un solo campo (801#1057-482-SE26#2026-02-11#): eso no es un folio y supera el largo.
GET /api/document-reference-types?country=CHL.
Argentina: comprobantes Clase A y B
Argentina todavía no está habilitada en producción.
status: "PEN", sin number ni cae, y el CAE llega por webhook, salvo que lo pidas en la misma respuesta. Además de los tipos y receptores de cada clase, se validan estas reglas:
- Un tratamiento de IVA por ítem. Cada ítem lleva exactamente un impuesto de IVA: una alícuota, exento o no gravado. La alícuota es la del catálogo, así que
ratees opcional en el IVA. En los tributos deglobal_taxeses obligatoria. - Sin descuento global.
totals.discountva en 0. Si hay un descuento, va en el ítem (discount_amount), que reduce el neto de su alícuota. - La modalidad de la Clase A. Si ARCA te asignó la leyenda “PAGO EN CBU INFORMADA” o la de “OPERACIÓN SUJETA A RETENCIÓN”, declárala en
issuer.tax_informationconcbuo consubject_to_retention: true. La segunda se autoriza con los códigos 51/52/53 y numera en su propia serie. Ver modalidades de la Clase A. - Los totales cierran.
sub_totales la suma de los netos de los ítems, ytotalessub_totalmás el IVA de los ítems más los tributos.
AR_IMP_INT) se informan ahí como “Otros Impuestos Nacionales Indirectos”. En las dos clases, si el comprobante tiene tributos, el PDF A4 incluye la tabla “Otros Tributos” del modelo de ARCA: los renglones de Ganancias, IVA, Ingresos Brutos, Internos y Municipales, en cero si no hay tributos de ese tipo, cada tributo que enviaste con su description como detalle, y el total. Sin tributos, o si todos son de importe cero, la tabla no se imprime; el renglón Importe Otros Tributos de los totales sigue apareciendo, en cero. Los tickets de 58 y 80 mm listan solo los tributos que enviaste. Ver los tipos de tributo. Si una regla no se cumple, el comprobante queda en INV, sin enviarse a ARCA, con el código que la identifica en validation_errors: ver errores.
Representación impresa
El PDF sigue el modelo de comprobante de ARCA e incluye los datos que exige la RG 1415:- Ingresos Brutos: sale del
gross_income_numberde la empresa. Cárgalo al dar de alta la empresa; si falta, el renglón no se imprime. - Datos del emisor: si el comprobante se crea sin el bloque
issuer, el domicilio, la condición frente al IVA y el inicio de actividades salen de la empresa. - Modalidad de la Clase A: la leyenda “PAGO EN CBU INFORMADA” (con la CBU) o “OPERACIÓN SUJETA A RETENCIÓN” se imprime en la cabecera, junto a la letra, como exige la RG 5762.
- Ley 27.618: una Clase A a un monotributista (
MT,MTS,MTIP) lleva, a la derecha del QR, la leyenda del crédito fiscal computable solo en el Régimen de Sostenimiento e Inclusión Fiscal. - Leyenda 147: si la empresa tiene domicilio en CABA y el receptor es consumidor final (
CF), se imprime la leyenda del teléfono gratuito de Defensa del Consumidor, como exige la Ley 3.896 de la Ciudad.
Moneda extranjera
Un comprobante argentino de cualquier clase (A, B o C) se puede emitir en dólares ("code": "USD"). La cotización la envías tú en currency.exchange_rate, en pesos por dólar: Emify no la consulta ni la corrige. Si necesitas una referencia, la del BCRA está en GET /api/services/currencies?country=ARG¤cy=USD.
- En dólares la cotización es obligatoria y distinta de 1. Si falta o vale 1, el comprobante queda en
INVconEXCHANGE_RATE_REQUIRED_FOR_FOREIGN_CURRENCYsobrecurrency.exchange_rateenvalidation_errors. - En pesos la cotización falta o vale 1. Con otro valor queda en
INVconEXCHANGE_RATE_MUST_BE_ONE_FOR_LOCAL_CURRENCY. - Los importes van en dólares, sin convertir: ítems, impuestos y totales. ARCA los convierte con la cotización.
- El comprobante se declara cancelable en pesos. El PDF muestra la moneda y el tipo de cambio en el recuadro del receptor, e imprime: «El presente comprobante equivale a 1.234,50».
Concepto y vencimiento del pago
En cualquier clase (A, B o C), elpayment_due_date se informa a ARCA solo si concept es "2" (servicios) o "3" (productos y servicios), igual que service_start_date y service_end_date. Con "1" (productos) ARCA lo rechaza: Emify lo guarda y lo devuelve en la consulta, pero no se lo informa a ARCA ni lo imprime en el PDF.
CAE en la respuesta
Si necesitas el número y el CAE en la misma respuesta, por ejemplo para imprimir el comprobante en el momento, agregasync=true a la petición:
La respuesta también vuelve en
PEN, sin esperar, si ARCA está en una ventana de mantenimiento o si Emify está atendiendo demasiadas esperas a la vez. Revisa siempre el status: el modo sincrónico no reemplaza al webhook, lo adelanta cuando puede.
El parámetro solo existe para Argentina, donde ARCA autoriza en la misma llamada. Para una empresa de otro país la petición responde 400 con code: SYNC_AUTHORIZATION_NOT_SUPPORTED y no registra nada: el SII acepta los documentos en minutos u horas.