WSFEv1 · homologación y producción

Facturá con ARCA mandando JSON.

Una API REST sobre la factura electrónica de ARCA (ex AFIP). Arcuadra resuelve WSAA, firmas, SOAP, numeración y reintentos. Vos recibís el CAE y el PDF con QR.

POST /v1/comprobantes

# Una Factura C de $ 100 a consumidor final, en homologación.
# API_URL es la dirección de la API; API_KEY, una clave con comprobantes:emitir.
# Idempotency-Key: una por comprobante: repetir el pedido con la misma no emite otro.
curl -X POST "$API_URL/v1/comprobantes" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Idempotency-Key: 6f1d2c3b-8a47-4e59-9b0a-1c2d3e4f5a6b" \
  -H "Content-Type: application/json" \
  -d '{
    "entorno": "homologacion",
    "representada": "30202020204",
    "ptoVta": 1,
    "cbteTipo": 11,
    "concepto": 1,
    "docTipo": 99,
    "docNro": "0",
    "condicionIvaReceptorId": 5,
    "items": [{ "cantidad": 1, "precioUnitario": 100 }]
  }'
// Una Factura C de $ 100 a consumidor final, en homologación. Módulo ES (.mjs o "type": "module").
// API_URL es la dirección de la API; API_KEY, una clave con comprobantes:emitir.
const res = await fetch(`${process.env.API_URL}/v1/comprobantes`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.API_KEY}`,
    // Una por comprobante: repetir el pedido con la misma no emite otro.
    'Idempotency-Key': '6f1d2c3b-8a47-4e59-9b0a-1c2d3e4f5a6b',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    entorno: 'homologacion',
    representada: '30202020204',
    ptoVta: 1,
    cbteTipo: 11,
    concepto: 1,
    docTipo: 99,
    docNro: '0',
    condicionIvaReceptorId: 5,
    items: [{ cantidad: 1, precioUnitario: 100 }],
  }),
});
const { comprobante } = await res.json();
console.log(comprobante.cae);
# Una Factura C de $ 100 a consumidor final, en homologación.
# API_URL es la dirección de la API; API_KEY, una clave con comprobantes:emitir.
import os
import requests

res = requests.post(
    f"{os.environ['API_URL']}/v1/comprobantes",
    headers={
        "Authorization": f"Bearer {os.environ['API_KEY']}",
        # Una por comprobante: repetir el pedido con la misma no emite otro.
        "Idempotency-Key": "6f1d2c3b-8a47-4e59-9b0a-1c2d3e4f5a6b",
    },
    json={
        "entorno": "homologacion",
        "representada": "30202020204",
        "ptoVta": 1,
        "cbteTipo": 11,
        "concepto": 1,
        "docTipo": 99,
        "docNro": "0",
        "condicionIvaReceptorId": 5,
        "items": [{"cantidad": 1, "precioUnitario": 100}],
    },
)
print(res.json()["comprobante"]["cae"])

← 200 OK

{
  "comprobante": {
    "id": "0f3c2a9e-5b1d-4c7a-9e2f-6a8b1c3d5e7f",
    "entorno": "homologacion",
    "representada": "30202020204",
    "ptoVta": 1,
    "cbteTipo": 11,
    "cbteNro": 8,
    "cbteFch": "20261023",
    "cae": "70000000000001",
    "caeFchVto": "20261102",
    "importes": {
      "impTotal": 100,
      "impNeto": 100,
      "impIVA": 0,
      "impOpEx": 0,
      "impTotConc": 0,
      "impTrib": 0,
      "iva": [],
      "tributos": []
    },
    "observaciones": [],
    "recuperado": false
  }
}

Factura

0001-00000008

Consumidor final

Total$ 100

CAE 70000000000001

Vto. 02/11/2026

La representada es una de las CUIT de prueba que publica ARCA; la tuya es la de tu certificado verificado. El CAE de la respuesta es de mentira.

Lo que dejás de hacer.

  • Firmar el TRA con CMS

    WSAA resuelto del lado del servidor

  • Armar sobres SOAP y XML

    JSON entra, JSON sale

  • Pedir FECompUltimoAutorizado

    Numeramos nosotros, sin carreras

  • Calcular ImpNeto, ImpIVA, ImpTotal

    Mandás ítems, calculamos importes

  • Generar el CSR con openssl

    Clave y CSR nuestros, cifrados

  • Reintentar y duplicar comprobantes

    Idempotency-Key: el reintento concilia con ARCA

  • Armar el PDF y el QR a mano

    GET /v1/comprobantes/{id}/pdf

  • Llevar tu propio libro

    Listado con filtros y resumen del mes

Factura electrónica, de punta a punta.

Rutas en español bajo /v1. entorno y representada viajan en el cuerpo: una organización, varias CUIT, los dos entornos.

WSFEv1

Comprobantes

Facturas y notas de crédito y de débito A, B y C, con tributos. El libro de lo emitido y su PDF con el QR de ARCA.

  • POST/v1/comprobantes
  • GET/v1/comprobantes
  • GET/v1/comprobantes/{id}/pdf
  • GET/v1/comprobantes/ultimo

Sin consumir cupo

Validación y parámetros

Calculá importes y revisá reglas sin llamar a ARCA ni numerar. Las 12 tablas de ARCA con los códigos de cada campo, y un comprobante por su número.

  • POST/v1/comprobantes/validacion
  • GET/v1/parametros/{tabla}
  • GET/v1/comprobantes/{ptoVta}/{cbteTipo}/{cbteNro}

Cuenta

Certificados y consumo

Alta de CUIT por entorno, punto de venta por defecto, datos del emisor para el PDF y el cupo del mes.

  • POST/v1/certificados
  • PUT/v1/certificados/{id}/punto-de-venta
  • PUT/v1/emisores/{cuit}
  • GET/v1/consumo
  • Validación previa

    El mismo cuerpo, sin ARCA: los importes o el error, sin gastar numeración.

  • Nunca inferimos datos fiscales

    Si falta la alícuota o la condición IVA del receptor, te lo decimos.

  • Punto de venta por defecto

    Lo fijás por CUIT y entorno, y ptoVta pasa a ser opcional.

  • Claves con scopes

    Una clave de solo lectura valida y consulta. Emitir exige comprobantes:emitir.

Cada error trae un código estable.

El HTTP dice de quién es el problema; el codigo, qué hacer. Ante la duda, reintentá con la misma Idempotency-Key: nunca emitimos dos veces.

{ "error": { "codigo", "mensaje", "detalles" } }

consume (en producción)no consume

EstadoQué pasóCupo
200

Autorizado. Tenés CAE.

402

Cupo del mes agotado. Frenamos antes de ARCA.

CUPO_DE_COMPROBANTES_AGOTADO

403

Falta el certificado de esa CUIT y entorno.

CERTIFICADO_NO_VERIFICADO

403

La clave no puede emitir.

SCOPE_INSUFICIENTE

409

Esa misma clave ya está emitiendo. Reintentá.

EMISION_EN_CURSO

422

El pedido no tiene la forma esperada o rompe una regla que se mira sin ARCA.

ENTRADA_INVALIDA

422

ARCA lo rechazó: vienen sus observaciones.

COMPROBANTE_RECHAZADO

429

30 rechazos en una hora: paramos antes de ARCA.

DEMASIADOS_RECHAZOS

503

No sabemos si ARCA autorizó. Reintentá con la misma clave.

RESULTADO_INCIERTO

503

ARCA no respondió. Reintentá con la misma clave.

ARCA_NO_DISPONIBLE

Certificado sin openssl.

Generamos la clave privada y el CSR del lado del servidor; la clave queda cifrada y nunca sale. En el panel, un asistente te guía paso a paso, retoma donde lo dejaste y en homologación termina con una factura de prueba.

  1. Alta de la CUIT

    Elegís la CUIT y el entorno. Generamos la clave y el CSR: POST /v1/certificados, o desde el panel.

  2. CSR en ARCA

    Lo pegás en WSASS (homologación) o en Administración de Certificados Digitales, y bajás el .crt.

  3. Autorizás wsfe

    Asociás el servicio al certificado desde el Administrador de Relaciones; en WSASS, «Crear autorización a servicio».

  4. Subís el .crt

    PUT /v1/certificados/{id}/crt. Lo verificamos contra ARCA: verificado, o requiere acción con el motivo exacto.

Pagás por CAE, no por intento.

Precios en pesos, con IVA. Todos los planes abren la API, y homologación no consume cupo en ninguno.

No pudimos leer los planes en este momento. Probá de nuevo en unos minutos.

  • Homologación es gratis

    Probá todo lo que quieras. Solo un CAE de producción consume.

  • Rechazos y reintentos no cuentan

    Un rechazo de ARCA, un error o un reintento con la misma clave no suman.

  • Mes calendario

    El cupo es por mes calendario (UTC) y se renueva el último día a las 21:00 de la Argentina. GET /v1/consumo dice cuántos van y cuándo renueva.

Personal · en el plan, sin fecha

¿No programás? Un agente fiscal que factura por vos.

Para monotributistas y pymes chicas: le pedís la factura con tus palabras, la revisás y la aprobás; nada se emite sin tu OK, sobre esta misma API. Es la fase P8 del plan de Arcuadra: todavía no existe y no tiene fecha.

Escribinos a contacto@arcuadra.com.ar y te avisamos cuando abra.

Próximamente en la API · en el plan, sin fecha

  • Padrón: constancia, A10 y A13 (P5)
  • Exportación WSFEX (P6)
  • Servidor MCP (P7)

Tu primera factura en homologación, hoy.

Sin tarjeta. Homologación no consume cupo.