Saltar al contenido principal

API de Berlinesa (0.1.0)

Download OpenAPI specification:Download

Emisión y constatación de comprobantes electrónicos de ARCA/AFIP: facturas, notas de débito y notas de crédito, en sus variantes local (letra A/B/C/M), de exportación (E) y de turismo (T) — para N usuarios, en modo contador (un certificado delegado por N CUITs) o autoservicio (certificado propio por usuario).

invoices

Emisión, consulta, reintento y constatación de comprobantes: facturas, notas de débito y notas de crédito, en sus variantes local, de exportación y de turismo — el corazón de la API.

Emite un comprobante — factura, nota de débito o nota de crédito, local (A/B/C/M), de exportación (E) o de turismo (T) según letter/kind

Authorizations:
api-clientuser-session
Request Body schema: application/json
required
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige a cuál. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

letter
required
string
Enum: "A" "B" "C" "M" "E" "T"

Letra del comprobante. A/B/C/M son facturas locales; E es exportación (requiere export); T es turismo (requiere tourism).

kind
required
string
Enum: "FACTURA" "NOTA_DEBITO" "NOTA_CREDITO"

FACTURA, NOTA_DEBITO o NOTA_CREDITO. Una nota de crédito/débito requiere associations apuntando al comprobante original (excepto en turismo).

sales_point_number
required
number

Punto de venta habilitado en ARCA para el CUIT que emite.

issue_date
required
string

Fecha de emisión (yyyy-mm-dd). Tiene que estar dentro de la ventana que ARCA exige respecto de hoy (400 si no).

total_amount
required
number >= 0

Total del comprobante, en centavos (ej. 12100 = $121,00).

required
object

A quién se le emite el comprobante.

Array of objects (InvoiceAssociationDto) non-empty

Comprobante(s) original(es) que esta nota ajusta — obligatorio para kind=NOTA_DEBITO/NOTA_CREDITO, salvo en turismo.

concept_type
string
Enum: "PRODUCTS" "SERVICES" "PRODUCTS_AND_SERVICES"

PRODUCTS/SERVICES/PRODUCTS_AND_SERVICES. Requerido para facturas locales (letter A/B/C/M). SERVICES/PRODUCTS_AND_SERVICES exigen serviceStartDate/serviceEndDate.

taxable_amount
number >= 0

Monto gravado, en centavos. Requerido para facturas locales (letter A/B/C/M).

non_taxable_amount
number >= 0

Monto no gravado, en centavos. Requerido para facturas locales.

exempt_amount
number >= 0

Monto exento, en centavos. Requerido para facturas locales.

vat_amount
number >= 0

IVA total, en centavos — debe coincidir con la suma de vatItems. Requerido para facturas locales.

other_taxes_amount
number >= 0

Otros tributos, en centavos — debe coincidir con la suma de taxItems. Requerido para facturas locales.

currency_code
string

Código de moneda (ver GET /catalogs/monedas) — PES para pesos. Requerido para facturas locales.

exchange_rate
number

Cotización de currencyCode contra pesos — 1 si currencyCode es PES. Requerido para facturas locales.

service_start_date
string

Fecha de inicio del servicio facturado. Requerido junto con serviceEndDate y paymentDueDate si conceptType es SERVICES o PRODUCTS_AND_SERVICES.

service_end_date
string

Fecha de fin del servicio facturado — ver serviceStartDate.

payment_due_date
string

Fecha límite de pago — ver serviceStartDate.

Array of objects (InvoiceLineItemDto) non-empty

Renglones de detalle (qué se vendió). Opcionales en el circuito estándar (solo se usan para el PDF); obligatorios y fiscalmente validados en el circuito itemizado (RG 2904).

Array of objects (InvoiceVatItemDto) non-empty

Desglose de IVA por alícuota. Requerido para facturas locales — la suma debe coincidir con vatAmount.

Array of objects (InvoiceTaxItemDto) non-empty

Otros tributos (además del IVA) — la suma debe coincidir con otherTaxesAmount.

object

Campos propios de una factura de exportación. Obligatorio si letter=E, ignorado en cualquier otro caso.

object

Campos propios de una factura de turismo. Obligatorio si letter=T, ignorado en cualquier otro caso.

Responses

Response Headers
Location
string
Example: "/invoices/b3f1c2a0-1234-4abc-9def-0123456789ab"

Path del comprobante recién creado (regla 180 de rest-api-guidelines).

Response Schema: application/json
id
required
string
represented_cuit_id
required
string
created_by_user_id
required
string
created_at
required
string <date-time>
status
required
string
Enum: "PENDING" "APPROVED" "REJECTED" "OBSERVED"
required
Array of objects (InvoiceProviderErrorResponseDto)

Errores/observaciones que devolvió ARCA, ya normalizados a un shape único — vacío si no hubo ninguno (comprobante APPROVED sin observaciones).

required
object (VoucherResponseDto)
issue_date
required
string <date-time>
total_amount
required
number
required
object or null

null mientras no hay CAE (PENDING/REJECTED).

required
object (InvoiceReceptorResponseDto)
required
Array of objects (InvoiceLineItemResponseDto)
required
Array of objects (InvoiceVatItemResponseDto)
required
Array of objects (InvoiceTaxItemResponseDto)
required
Array of objects (InvoiceAssociationResponseDto)
required
object or null

null únicamente en exportación (detail.type === "EXPORT").

required
any

Request samples

Content type
application/json
Example

Letra A/B/C/M sin adhesión a RG 2904 en el RepresentedCuit.

{
  • "represented_cuit_id": "{{represented_cuit_id}}",
  • "letter": "B",
  • "kind": "FACTURA",
  • "sales_point_number": 1,
  • "concept_type": "PRODUCTS",
  • "receptor": {
    },
  • "issue_date": "2026-09-09",
  • "total_amount": 12100,
  • "taxable_amount": 10000,
  • "non_taxable_amount": 0,
  • "exempt_amount": 0,
  • "vat_amount": 2100,
  • "other_taxes_amount": 0,
  • "currency_code": "PES",
  • "exchange_rate": 1,
  • "items": [
    ],
  • "vat_items": [
    ]
}

Response samples

Content type
application/json
Example

detail.type depende de voucher.letter/adhesión a RG 2904: STANDARD (este caso) o ITEMIZED para A/B/C/M, EXPORT para letter=E, TOURISM para letter=T. amounts es null únicamente en EXPORT.

{
  • "id": "b3f1c2a0-1234-4abc-9def-0123456789ab",
  • "represented_cuit_id": "b1a2c3d4-0000-4000-8000-000000000001",
  • "created_by_user_id": "a0f1e2d3-0000-4000-8000-000000000009",
  • "created_at": "2026-09-09T12:00:00.000Z",
  • "associations": [ ],
  • "voucher": {
    },
  • "issue_date": "2026-09-09T00:00:00.000Z",
  • "total_amount": 12100,
  • "authorization": {
    },
  • "status": "APPROVED",
  • "provider_errors": [ ],
  • "receptor": {
    },
  • "line_items": [
    ],
  • "vat_items": [
    ],
  • "tax_items": [ ],
  • "amounts": {
    },
  • "detail": {
    }
}

Objeto completo de una factura propia

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del comprobante.

Responses

Response Schema: application/json
id
required
string
represented_cuit_id
required
string
created_by_user_id
required
string
created_at
required
string <date-time>
status
required
string
Enum: "PENDING" "APPROVED" "REJECTED" "OBSERVED"
required
Array of objects (InvoiceProviderErrorResponseDto)

Errores/observaciones que devolvió ARCA, ya normalizados a un shape único — vacío si no hubo ninguno (comprobante APPROVED sin observaciones).

required
object (VoucherResponseDto)
issue_date
required
string <date-time>
total_amount
required
number
required
object or null

null mientras no hay CAE (PENDING/REJECTED).

required
object (InvoiceReceptorResponseDto)
required
Array of objects (InvoiceLineItemResponseDto)
required
Array of objects (InvoiceVatItemResponseDto)
required
Array of objects (InvoiceTaxItemResponseDto)
required
Array of objects (InvoiceAssociationResponseDto)
required
object or null

null únicamente en exportación (detail.type === "EXPORT").

required
any

Response samples

Content type
application/json
Example

detail.type depende de voucher.letter/adhesión a RG 2904: STANDARD (este caso) o ITEMIZED para A/B/C/M, EXPORT para letter=E, TOURISM para letter=T. amounts es null únicamente en EXPORT.

{
  • "id": "b3f1c2a0-1234-4abc-9def-0123456789ab",
  • "represented_cuit_id": "b1a2c3d4-0000-4000-8000-000000000001",
  • "created_by_user_id": "a0f1e2d3-0000-4000-8000-000000000009",
  • "created_at": "2026-09-09T12:00:00.000Z",
  • "associations": [ ],
  • "voucher": {
    },
  • "issue_date": "2026-09-09T00:00:00.000Z",
  • "total_amount": 12100,
  • "authorization": {
    },
  • "status": "APPROVED",
  • "provider_errors": [ ],
  • "receptor": {
    },
  • "line_items": [
    ],
  • "vat_items": [
    ],
  • "tax_items": [ ],
  • "amounts": {
    },
  • "detail": {
    }
}

Reintenta un REJECTED reconstruyendo la request original — crea una fila nueva

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del comprobante REJECTED a reintentar.

Responses

Response Headers
Location
string
Example: "/invoices/c4a2d3b1-5678-4def-8abc-1234567890cd"

Path del comprobante del reintento (regla 180 de rest-api-guidelines).

Response Schema: application/json
id
required
string
represented_cuit_id
required
string
created_by_user_id
required
string
created_at
required
string <date-time>
status
required
string
Enum: "PENDING" "APPROVED" "REJECTED" "OBSERVED"
required
Array of objects (InvoiceProviderErrorResponseDto)

Errores/observaciones que devolvió ARCA, ya normalizados a un shape único — vacío si no hubo ninguno (comprobante APPROVED sin observaciones).

required
object (VoucherResponseDto)
issue_date
required
string <date-time>
total_amount
required
number
required
object or null

null mientras no hay CAE (PENDING/REJECTED).

required
object (InvoiceReceptorResponseDto)
required
Array of objects (InvoiceLineItemResponseDto)
required
Array of objects (InvoiceVatItemResponseDto)
required
Array of objects (InvoiceTaxItemResponseDto)
required
Array of objects (InvoiceAssociationResponseDto)
required
object or null

null únicamente en exportación (detail.type === "EXPORT").

required
any

Response samples

Content type
application/json
Example

detail.type depende de voucher.letter/adhesión a RG 2904: STANDARD (este caso) o ITEMIZED para A/B/C/M, EXPORT para letter=E, TOURISM para letter=T. amounts es null únicamente en EXPORT.

{
  • "id": "b3f1c2a0-1234-4abc-9def-0123456789ab",
  • "represented_cuit_id": "b1a2c3d4-0000-4000-8000-000000000001",
  • "created_by_user_id": "a0f1e2d3-0000-4000-8000-000000000009",
  • "created_at": "2026-09-09T12:00:00.000Z",
  • "associations": [ ],
  • "voucher": {
    },
  • "issue_date": "2026-09-09T00:00:00.000Z",
  • "total_amount": 12100,
  • "authorization": {
    },
  • "status": "APPROVED",
  • "provider_errors": [ ],
  • "receptor": {
    },
  • "line_items": [
    ],
  • "vat_items": [
    ],
  • "tax_items": [ ],
  • "amounts": {
    },
  • "detail": {
    }
}

Constata que este comprobante coincide con lo que ARCA tiene registrado

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del comprobante a constatar.

Responses

Response Schema: application/json
result
required
string

'A' Autorizado / 'R' Rechazado / 'N' No encontrado — tal cual lo informa ARCA.

required
Array of objects (VerifyVoucherObservationDto)
required
Array of objects (VerifyVoucherObservationDto)

Response samples

Content type
application/json
{
  • "result": "A",
  • "observations": [ ],
  • "errors": [ ]
}

PDF del comprobante — no disponible para todos los tipos de factura

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del comprobante.

Responses

Response samples

Content type
application/problem+json
Example
{}

voucher-verification

Constatación de cualquier comprobante autorizado (con CAE/CAI/CAEA), incluido uno emitido fuera de este sistema — a diferencia de invoices, no depende de que el comprobante exista en esta base.

Constata cualquier comprobante autorizado (con CAE/CAI/CAEA), incluido uno emitido fuera de este sistema

Authorizations:
api-clientuser-session
Request Body schema: application/json
required
represented_cuit_id
string

Con cuya credential se autentica la consulta — no tiene por qué ser el emisor del comprobante que se está constatando (ver issuerCuit). Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el de la plataforma si no tiene uno propio.

issuer_cuit
required
string

CUIT del emisor del comprobante a constatar — no tiene por qué coincidir con representedCuitId.

sales_point_number
required
number

Punto de venta del comprobante a constatar.

voucher_type
required
number

Código de comprobante de ARCA (ver GET /catalogs/tipos-comprobante).

voucher_number
required
number

Número del comprobante a constatar.

issue_date
required
string

Fecha de emisión del comprobante (yyyy-mm-dd).

total_amount
required
number >= 0

Total del comprobante, en centavos.

authorization_code
required
string

CAE/CAI/CAEA del comprobante a constatar.

receptor_document_type
number

Tipo de documento del receptor (ver GET /catalogs/tipos-documento-receptor) — ARCA lo exige según el tipo de comprobante y su importe.

receptor_document_value
string

Identificación del receptor — ver receptorDocumentType.

Responses

Response Schema: application/json
result
required
string

'A' Autorizado / 'R' Rechazado / 'N' No encontrado — tal cual lo informa ARCA.

required
Array of objects (VerifyVoucherObservationDto)
required
Array of objects (VerifyVoucherObservationDto)

Request samples

Content type
application/json
{
  • "represented_cuit_id": "{{represented_cuit_id}}",
  • "issuer_cuit": "20222222223",
  • "sales_point_number": 1,
  • "voucher_type": 6,
  • "voucher_number": 124,
  • "issue_date": "2026-09-09",
  • "total_amount": 12100,
  • "authorization_code": "71234567890123"
}

Response samples

Content type
application/json
Example
{
  • "result": "A",
  • "observations": [ ],
  • "errors": [ ]
}

users

Perfil del usuario autenticado — solo el propio, sin CRUD de terceros.

Perfil del usuario autenticado, con los datos del padrón de ARCA si ya se consultaron para su CUIT

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
id
required
string
email
required
string
display_name
required
string or null
cuit
required
string or null
created_at
required
string <date-time>
tipo_persona
required
string or null
razon_social
required
string or null
nombre
required
string or null
apellido
required
string or null
domicilio_direccion
required
string or null
domicilio_localidad
required
string or null
domicilio_provincia
required
string or null
domicilio_cod_postal
required
string or null
condicion_iva_inferida_id
required
number or null
padron_consultado_at
required
string or null <date-time>
rg2904_adherent
required
boolean or null

Del RepresentedCuit propio (autoservicio, o el de la plataforma) — null si todavía no existe ninguno (nunca facturó como usuario final ni tiene su propio certificado), nunca inventado.

Response samples

Content type
application/json
{
  • "id": "string",
  • "email": "string",
  • "display_name": "string",
  • "cuit": "string",
  • "created_at": "2019-08-24T14:15:22Z",
  • "tipo_persona": "string",
  • "razon_social": "string",
  • "nombre": "string",
  • "apellido": "string",
  • "domicilio_direccion": "string",
  • "domicilio_localidad": "string",
  • "domicilio_provincia": "string",
  • "domicilio_cod_postal": "string",
  • "condicion_iva_inferida_id": 0,
  • "padron_consultado_at": "2019-08-24T14:15:22Z",
  • "rg2904_adherent": true
}

Carga o cambia el CUIT del usuario final para facturar sin certificado propio

Reenviar el mismo CUIT que ya tenía es un no-op idempotente. Cambiarlo a uno distinto da 409 una vez que el usuario ya facturó y el padrón de ARCA confirmó ese CUIT. rg2904_adherent es opcional: si viene, declara o corrige la adhesión a RG 2904 del CUIT propio del usuario.

Authorizations:
api-clientuser-session
Request Body schema: application/json
required
cuit
required
string^\d{11}$

CUIT para facturar con el certificado de la plataforma (11 dígitos, sin guiones). Reenviar el mismo que ya tenía es un no-op idempotente; cambiarlo a uno distinto da 409 una vez que ya facturaste con ese CUIT.

rg2904_adherent
boolean

Si el usuario está adherido a RG 2904 (factura con detalle de ítem) — cambia qué datos exige ARCA en sus comprobantes locales. Se aplica al CUIT propio (autoservicio, o el de la plataforma si factura sin certificado propio), creándolo ahí mismo si todavía no existe. Omitido: no cambia el valor actual.

Responses

Response Schema: application/json
id
required
string
email
required
string
display_name
required
string or null
cuit
required
string or null
created_at
required
string <date-time>
tipo_persona
required
string or null
razon_social
required
string or null
nombre
required
string or null
apellido
required
string or null
domicilio_direccion
required
string or null
domicilio_localidad
required
string or null
domicilio_provincia
required
string or null
domicilio_cod_postal
required
string or null
condicion_iva_inferida_id
required
number or null
padron_consultado_at
required
string or null <date-time>
rg2904_adherent
required
boolean or null

Del RepresentedCuit propio (autoservicio, o el de la plataforma) — null si todavía no existe ninguno (nunca facturó como usuario final ni tiene su propio certificado), nunca inventado.

Request samples

Content type
application/json
{
  • "cuit": "string",
  • "rg2904_adherent": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "email": "string",
  • "display_name": "string",
  • "cuit": "string",
  • "created_at": "2019-08-24T14:15:22Z",
  • "tipo_persona": "string",
  • "razon_social": "string",
  • "nombre": "string",
  • "apellido": "string",
  • "domicilio_direccion": "string",
  • "domicilio_localidad": "string",
  • "domicilio_provincia": "string",
  • "domicilio_cod_postal": "string",
  • "condicion_iva_inferida_id": 0,
  • "padron_consultado_at": "2019-08-24T14:15:22Z",
  • "rg2904_adherent": true
}

credentials

Alta y baja del certificado ARCA (cert + clave privada, cifrados) usado para autenticarse ante ARCA. El servidor siempre genera la clave privada — nunca se acepta una subida directa.

Genera un par de claves + CSR (paso 1 de 2) — pegar el CSR en ARCA para obtener el .crt

El servidor SIEMPRE genera la clave privada acá — nunca se acepta una subida directa de clave privada. Sin body: usa el CUIT ya configurado en el perfil (PATCH /users/me tiene que haberse llamado antes) y la razón social/nombre que haya en el padrón para ese CUIT.

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
id
required
string
cuit
required
string
csr_pem
required
string
status
required
string
Value: "PENDING_CERT"

Response samples

Content type
application/json
{
  • "id": "string",
  • "cuit": "string",
  • "csr_pem": "string",
  • "status": "PENDING_CERT"
}

Completa la credential con el .crt que devolvió AFIP (paso 2 de 2)

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Credential creada en el paso 1 (POST /credentials/csr).

Request Body schema: application/json
required
cert_pem
required
string

El .crt que devuelve AFIP al procesar el CSR de POST /credentials/csr.

Responses

Response Schema: application/json
id
required
string
owner_user_id
required
string or null

Null solo sería una credential de la plataforma — esa nunca se expone acá (no existe ningún endpoint HTTP que la devuelva), este campo es siempre string en la práctica.

cuit
required
string
status
required
string
Enum: "PENDING_CERT" "ACTIVE" "REVOKED"
csr_pem
required
string or null

Solo presente mientras status=PENDING_CERT — para volver a pegarlo en AFIP si se perdió.

expires_at
required
string or null <date-time>
revoked_at
required
string or null <date-time>
created_at
required
string <date-time>

Request samples

Content type
application/json
{
  • "cert_pem": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "owner_user_id": "string",
  • "cuit": "string",
  • "status": "PENDING_CERT",
  • "csr_pem": "string",
  • "expires_at": "2019-08-24T14:15:22Z",
  • "revoked_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Datos de una credential propia (nunca incluye la clave privada)

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id de la credential.

Responses

Response Schema: application/json
id
required
string
owner_user_id
required
string or null

Null solo sería una credential de la plataforma — esa nunca se expone acá (no existe ningún endpoint HTTP que la devuelva), este campo es siempre string en la práctica.

cuit
required
string
status
required
string
Enum: "PENDING_CERT" "ACTIVE" "REVOKED"
csr_pem
required
string or null

Solo presente mientras status=PENDING_CERT — para volver a pegarlo en AFIP si se perdió.

expires_at
required
string or null <date-time>
revoked_at
required
string or null <date-time>
created_at
required
string <date-time>

Response samples

Content type
application/json
{
  • "id": "string",
  • "owner_user_id": "string",
  • "cuit": "string",
  • "status": "PENDING_CERT",
  • "csr_pem": "string",
  • "expires_at": "2019-08-24T14:15:22Z",
  • "revoked_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

Revoca una credential — no se puede volver a usar para firmar contra ARCA

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id de la credential a revocar.

Responses

Response samples

Content type
application/problem+json
Example
{}

represented-cuits

CUITs en cuyo nombre se puede facturar bajo una credential — el propio (autoservicio) o delegados por un tercero (modo contador).

Agrega un CUIT delegado bajo una credential (modo contador)

El sistema no puede verificar que la delegación exista del lado de ARCA, solo la registra — si no está hecha, POST /invoices va a rechazar con "CUIT representada no incluida en token". Dispara best-effort (nunca bloquea esta respuesta si falla) la consulta al padrón de ARCA para este CUIT y persiste ese snapshot en el propio cliente, para que listarlos después no necesite volver a consultarlo.

Authorizations:
api-clientuser-session
Request Body schema: application/json
required
credential_id
required
string

Credential bajo la cual se registra este CUIT delegado.

cuit
required
string^\d{11}$

CUIT del cliente delegado (modo contador) — 11 dígitos, sin guiones.

label
string

Etiqueta descriptiva opcional (ej. nombre del cliente).

rg2904_adherent
boolean

Si este CUIT está adherido a RG 2904 (factura con detalle de ítem) — dato que ARCA no informa por ninguna vía consultable, se declara acá. Corregible después vía PATCH /represented-cuits/{id}.

Responses

Response Schema: application/json
id
required
string
credential_id
required
string
cuit
required
string
label
required
string or null
is_self
required
boolean
rg2904_adherent
required
boolean
default_sales_point_number
required
number or null

Punto de venta a preseleccionar en "Emitir factura" para este CUIT — pura conveniencia de UI, null si nunca se configuró.

created_at
required
string <date-time>
tipo_persona
required
string or null
razon_social
required
string or null
nombre
required
string or null
apellido
required
string or null
domicilio_direccion
required
string or null
domicilio_localidad
required
string or null
domicilio_provincia
required
string or null
domicilio_cod_postal
required
string or null
condicion_iva_inferida_id
required
number or null
padron_consultado_at
required
string or null <date-time>

Request samples

Content type
application/json
{
  • "credential_id": "string",
  • "cuit": "string",
  • "label": "string",
  • "rg2904_adherent": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "credential_id": "string",
  • "cuit": "string",
  • "label": "string",
  • "is_self": true,
  • "rg2904_adherent": true,
  • "default_sales_point_number": 0,
  • "created_at": "2019-08-24T14:15:22Z",
  • "tipo_persona": "string",
  • "razon_social": "string",
  • "nombre": "string",
  • "apellido": "string",
  • "domicilio_direccion": "string",
  • "domicilio_localidad": "string",
  • "domicilio_provincia": "string",
  • "domicilio_cod_postal": "string",
  • "condicion_iva_inferida_id": 0,
  • "padron_consultado_at": "2019-08-24T14:15:22Z"
}

Corrige la adhesión a RG 2904 y/o el punto de venta default de un CUIT (propio o delegado)

Los 2 campos editables después de crear, cada uno independiente (mandar solo uno deja el otro sin tocar). rg2904_adherent lo declara el usuario (ARCA no lo informa por ninguna vía consultable) y puede haberse cargado mal al alta — antes de este endpoint la única forma de corregirlo era borrar y crear de nuevo el CUIT delegado, pero eso es imposible en cuanto ya facturó algo (DELETE devuelve 409 REPRESENTED_CUIT_HAS_INVOICES); cambiarlo solo afecta comprobantes emitidos DESPUÉS de este PATCH. default_sales_point_number es pura conveniencia de UI (preseleccionar el punto de venta en "Emitir factura") — nunca se usa server-side, acepta null para quitarlo.

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del CUIT (propio o delegado) a corregir.

Request Body schema: application/json
required
rg2904_adherent
boolean

Si este CUIT está adherido a RG 2904 (factura con detalle de ítem). Cambiarlo solo afecta comprobantes emitidos DESPUÉS de este PATCH — los ya emitidos no se re-emiten ni cambian de circuito.

default_sales_point_number
number or null >= 1

Punto de venta a preseleccionar en "Emitir factura" para este CUIT — null para quitarlo. No se valida contra ARCA al setearlo.

Responses

Response Schema: application/json
id
required
string
credential_id
required
string
cuit
required
string
label
required
string or null
is_self
required
boolean
rg2904_adherent
required
boolean
default_sales_point_number
required
number or null

Punto de venta a preseleccionar en "Emitir factura" para este CUIT — pura conveniencia de UI, null si nunca se configuró.

created_at
required
string <date-time>
tipo_persona
required
string or null
razon_social
required
string or null
nombre
required
string or null
apellido
required
string or null
domicilio_direccion
required
string or null
domicilio_localidad
required
string or null
domicilio_provincia
required
string or null
domicilio_cod_postal
required
string or null
condicion_iva_inferida_id
required
number or null
padron_consultado_at
required
string or null <date-time>

Request samples

Content type
application/json
{
  • "rg2904_adherent": true,
  • "default_sales_point_number": 1
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "credential_id": "string",
  • "cuit": "string",
  • "label": "string",
  • "is_self": true,
  • "rg2904_adherent": true,
  • "default_sales_point_number": 0,
  • "created_at": "2019-08-24T14:15:22Z",
  • "tipo_persona": "string",
  • "razon_social": "string",
  • "nombre": "string",
  • "apellido": "string",
  • "domicilio_direccion": "string",
  • "domicilio_localidad": "string",
  • "domicilio_provincia": "string",
  • "domicilio_cod_postal": "string",
  • "condicion_iva_inferida_id": 0,
  • "padron_consultado_at": "2019-08-24T14:15:22Z"
}

Quita un CUIT delegado — nunca el propio (isSelf)

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del CUIT delegado a quitar.

Responses

Response samples

Content type
application/problem+json
{}

Marca un punto de venta para la modalidad "Factura A con leyenda Pago en CBU informada" (RG 5762/2025)

ARCA no informa esta relación por ninguna vía consultable — el contribuyente tiene que haber dado de alta este punto de venta para esta modalidad directamente en ARCA primero (servicio REAR/RECE/RFI); esto solo le dice a esta API qué punto de venta imprimir con esa leyenda en el PDF.

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del CUIT (propio o delegado).

Request Body schema: application/json
required
sales_point_number
required
number >= 1

Punto de venta ya dado de alta en ARCA para esta modalidad (ver GET /catalogs/puntos-venta para los puntos de venta habilitados en general).

cbu
string

CBU a imprimir en el PDF junto a la leyenda — opcional, recomendado por ARCA para facilitarle el pago al receptor. Sin esto, igual se imprime la leyenda, sin el número de cuenta.

Responses

Response Schema: application/json
id
required
string
sales_point_number
required
number
cbu
required
string or null
created_at
required
string <date-time>

Request samples

Content type
application/json
{
  • "sales_point_number": 1,
  • "cbu": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "sales_point_number": 0,
  • "cbu": "string",
  • "created_at": "2019-08-24T14:15:22Z"
}

Lista los puntos de venta marcados como CBU informada de un CUIT

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del CUIT (propio o delegado).

Responses

Response Schema: application/json
Array
id
required
string
sales_point_number
required
number
cbu
required
string or null
created_at
required
string <date-time>

Response samples

Content type
application/json
[
  • {
    }
]

Corrige el CBU de un punto de venta ya marcado como CBU informada

Único campo editable después de marcar un punto de venta — para cambiar el número de punto de venta en sí hay que desmarcarlo y marcar el nuevo. cbu acepta null para quitarlo sin desmarcar el punto (la leyenda se sigue imprimiendo igual, solo sin el número de cuenta).

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del CUIT (propio o delegado).

salesPointNumber
required
number

Número de punto de venta a corregir.

Request Body schema: application/json
required
cbu
required
string or null

CBU nuevo, o null para quitarlo (la leyenda se sigue imprimiendo igual, sin el número de cuenta).

Responses

Response Schema: application/json
id
required
string
sales_point_number
required
number
cbu
required
string or null
created_at
required
string <date-time>

Request samples

Content type
application/json
{
  • "cbu": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "sales_point_number": 0,
  • "cbu": "string",
  • "created_at": "2019-08-24T14:15:22Z"
}

Desmarca un punto de venta de la modalidad CBU informada

Authorizations:
api-clientuser-session
path Parameters
id
required
string

Id del CUIT (propio o delegado).

salesPointNumber
required
number

Número de punto de venta a desmarcar.

Responses

Response samples

Content type
application/problem+json
{}

catalogs

Catálogos de referencia (tipos de comprobante, alícuotas de IVA, tipos de documento, puntos de venta, monedas, etc.) para completar los campos codificados de POST /invoices y otros endpoints.

Provincias

Provincias argentinas (más CABA), con su código y nombre. Sin uso directo en esta API todavía — expuesto de referencia.

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Condición frente al IVA

1=Responsable Inscripto, 5=Consumidor Final, 6=Monotributo, etc. Usado en receptor.tax_condition de POST /invoices.

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Tipos de documento de identidad

CUIT, CUIL, DNI, Pasaporte, etc. Usado en receptor.identification.document_type de POST /invoices y receptor_document_type de POST /voucher-verifications.

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Idiomas del comprobante

Usado en export.invoice_language de POST /invoices (exportación).

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Incoterms

EXW, FOB, CIF, etc. Usado en export.incoterms de POST /invoices (exportación).

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Unidades de medida

Kg, metros, litros, etc. Usado en items[].unit_of_measure_id de POST /invoices (cualquier familia con renglones de detalle).

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

CUIT genérico por país

Identificador genérico que ARCA asigna a cada país para clientes del exterior. Usado en receptor.identification.value de POST /invoices cuando identification.category=FOREIGN_TAX_ID (exportación/turismo).

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
cuit_pais
required
string

CUIT genérico que ARCA asigna a este país para clientes del exterior.

descripcion
required
string
codigo_tipo_sujeto
required
number

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Condición IVA/operación (tabla legado)

Alícuotas y valores como "No Corresponde"/"Exento"/"Gravado". Tabla legado de AFIP, sin uso directo en esta API — expuesta de referencia.

Authorizations:
api-clientuser-session

Responses

Response Schema: application/json
Array
required
number or string
descripcion
required
string
observaciones
string or null

Solo en operacion-condicion-iva: aclaración de ARCA sobre el código (ej. que no aplica para factura electrónica).

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Tipos de comprobante

1=Factura A, 6=Factura B, 11=Factura C, etc. Usado en GET /invoices?voucher_type, associations[].related_voucher_type (nota de crédito/débito) y voucher_type de POST /voucher-verifications.

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Alícuotas de IVA

Usado en vat_items[].vat_rate_id de POST /invoices y en tourism.items[].vat_rate_id.

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Tipos de documento del receptor

80=CUIT, 96=DNI, etc. Usado en receptor.identification.document_type de POST /invoices y receptor_document_type de POST /voucher-verifications. Complementa GET /catalogs/tipos-documento (esa es una tabla local de mantenimiento manual; esta siempre está actualizada).

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Códigos de moneda

Usado en currency_code de POST /invoices (facturas locales, de exportación y de turismo).

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Puntos de venta

Puntos de venta habilitados para el CUIT consultado (se dan de alta en el portal de AFIP, no vía esta API). Usado en sales_point_number de POST /invoices, GET /invoices y POST /voucher-verifications.

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
number
required
number
emission_type
required
string
blocked
required
boolean
deactivated_at
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Conceptos

Productos/servicios/ambos. Esta API declara el concepto directo como concept_type (PRODUCTS/SERVICES/PRODUCTS_AND_SERVICES) en POST /invoices, sin pasar por este catálogo — expuesto solo de referencia.

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Tipos de tributo

Usado en tax_items[].tax_type_id de POST /invoices.

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Condición frente al IVA del receptor

Vigente desde RG 5616. Usado en receptor.tax_condition de POST /invoices. Complementa GET /catalogs/tipos-responsable (esa es la tabla legado de mantenimiento manual; esta siempre está actualizada).

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Campos opcionales del comprobante

Campos opcionales que ARCA admite en un comprobante. Sin uso directo en esta API todavía — expuesto de referencia para quien necesite mandar uno que esta API no modela explícitamente.

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Países

Usado en receptor.country_code y export.destination_country_code/export.permits[].destination_country_code de POST /invoices (exportación/turismo).

Authorizations:
api-clientuser-session
query Parameters
represented_cuit_id
string

Solo para un contador o usuario en autoservicio que factura por varios clientes — elige con cuál credential consultar el catálogo. Un usuario final nunca lo manda: se resuelve solo contra su propio certificado, o contra el certificado de la plataforma si no tiene uno propio.

Responses

Response Schema: application/json
Array
required
number or string
description
required
string
start_date
required
string or null <date>
end_date
required
string or null <date>

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

padron

Consulta pública y de solo lectura del padrón de ARCA (razón social, domicilio, condición frente al IVA) para previsualizar un CUIT antes de guardarlo en algún lado.

Consulta en vivo el padrón de ARCA para previsualizar los datos de un contribuyente

Público dentro de la plataforma: no está scoped al usuario autenticado, cualquiera puede consultar cualquier CUIT/CUIL. 404 si ARCA no reconoce ese CUIT como un contribuyente real.

Authorizations:
api-clientuser-session
path Parameters
cuit
required
string

CUIT o CUIL a consultar (11 dígitos, sin guiones).

Responses

Response Schema: application/json
cuit
required
string
tipo_persona
required
string or null
razon_social
required
string or null
nombre
required
string or null
apellido
required
string or null
domicilio_direccion
required
string or null
domicilio_localidad
required
string or null
domicilio_provincia
required
string or null
domicilio_cod_postal
required
string or null
condicion_iva_inferida_id
required
number or null

Condición frente al IVA inferida a partir de los datos del padrón — no es autoritativa. Mismo código que GET /catalogs/tipos-responsable.

consultado_at
required
string <date-time>

Response samples

Content type
application/json
{
  • "cuit": "string",
  • "tipo_persona": "string",
  • "razon_social": "string",
  • "nombre": "string",
  • "apellido": "string",
  • "domicilio_direccion": "string",
  • "domicilio_localidad": "string",
  • "domicilio_provincia": "string",
  • "domicilio_cod_postal": "string",
  • "condicion_iva_inferida_id": 0,
  • "consultado_at": "2019-08-24T14:15:22Z"
}

errors

Catálogo completo de errores que puede devolver esta API — pensado para generar documentación aparte o un diccionario de errores del lado del cliente. Sin autenticación, es metadata estática del contrato.

Catálogo completo de errores que puede devolver esta API

Todo ApiError declarado en el servicio (ver common/errors/api-error.ts), con su code compuesto ya resuelto contra el API_NUMBER real de este deployment. Orden estable por id ascendente.

Responses

Response Schema: application/json
Array
name
required
string

Nombre del miembro estático en ApiError (ej. "INVOICE_NOT_FOUND") — estable, es lo que hay que buscar en el código si hace falta ver dónde se tira.

id
required
number

Id estable del error dentro de ApiError — nunca se reordena/reusa.

status
required
number
code
required
number

status*100_000 + apiNumber*1_000 + id, ya resuelto contra el API_NUMBER real de este deployment — el mismo valor que aparece en el code de un error real.

message
required
string

Template crudo (util.format, soporta %s/%d) — sin resolver. Si no tiene ningún placeholder, exampleDetail es idéntico a este campo.

example_params
required
Array of strings

Valores de fallback para resolver message cuando ErrorHelper.throw se llama sin params explícitos.

example_detail
required
string

message ya resuelto con exampleParams — lo que un cliente vería en detail si este error se disparara con esos valores de ejemplo.

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

api-clients

Credenciales OAuth 2.0 (client_credentials) para acceso programático — integraciones server-to-server y agentes. Siempre se gestionan con un token de sesión de usuario, nunca con otro API Client.

Crea un API Client (credenciales OAuth 2.0 client_credentials)

Para integraciones server-to-server y agentes, no para uso humano interactivo. Requiere un token de sesión de usuario (no puede crearse con otro API Client). Devuelve client_id + metadata — el client_secret NO viaja acá, se pide aparte con GET /api-clients/{id}/secret.

Authorizations:
user-session
Request Body schema: application/json
required
label
required
string <= 120 characters

Nombre descriptivo para identificar este API Client (ej. "CI/CD", "Zapier").

Responses

Response Schema: application/json
id
required
string
label
required
string

Nombre descriptivo cargado al crear este API Client.

client_id
required
string

client_id OAuth 2.0 — se usa para el grant client_credentials.

created_at
required
string <date-time>
last_used_at
required
string or null <date-time>
revoked_at
required
string or null <date-time>

Request samples

Content type
application/json
{
  • "label": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "label": "string",
  • "client_id": "string",
  • "created_at": "2019-08-24T14:15:22Z",
  • "last_used_at": "2019-08-24T14:15:22Z",
  • "revoked_at": "2019-08-24T14:15:22Z"
}

Devuelve el client_secret de un API Client propio

A demanda, no "se ve una sola vez": se puede volver a pedir cuantas veces haga falta. Requiere un token de sesión de usuario (no puede pedirse con otro API Client).

Authorizations:
user-session
path Parameters
id
required
string

Id del API Client.

Responses

Response Schema: application/json
client_secret
required
string

Secreto en texto plano — junto con clientId, para el client_credentials grant.

Response samples

Content type
application/json
{
  • "client_secret": "string"
}

Revoca un API Client — deja de servir para autenticar

Authorizations:
user-session
path Parameters
id
required
string

Id del API Client a revocar.

Responses

Response samples

Content type
application/problem+json
Example
{}

health

Healthcheck sin autenticación.

Healthcheck sin autenticación

Responses