API

Que tu tienda facture sola

Una clave, un pedido HTTP por venta y la factura sale con CAE de ARCA. Funciona con Tiendanube, Shopify, WooCommerce, Zapier o tu propio desarrollo.

¿Sin ganas de leer todo, o trabado con la conexión?

Copiá este texto y pegáselo a cualquier IA (ChatGPT, Claude, Gemini): va a leer esta documentación y guiarte paso a paso.

Quiero conectar mi tienda online con Tramitito para que cada venta se facture sola en ARCA (Argentina). Leé la documentación en https://tramitito.app/api-facturacion y guiame paso a paso según mi plataforma (Tiendanube, Shopify, WooCommerce, Zapier/Make o desarrollo propio). Los datos de conexión (URL del webhook, secreto y claves de API) salen de mi panel en https://tramitito.app/tienda. Primero preguntame qué plataforma uso y si ya tengo cuenta en Tramitito, y de ahí llevame de la mano hasta que la primera venta salga facturada.

Empezar

Hay dos maneras de conectarse, y no necesitás las dos

  • Conexión de plataforma (Tiendanube, Shopify, WooCommerce): tu tienda le avisa a Tramitito con un webhook y no escribís una línea de código. Se configura en Conectar tu plataforma.
  • API con clave (Zapier, Make, desarrollo propio): tu sistema llama a nuestra API con una clave tk_live_.... Es el resto de esta página.
  1. Activá el modo tienda. Entrá a tramitito.app/tienda con tu cuenta y activalo con un clic.
  2. Creá una clave. Una por integración, así podés cortar el acceso de una sin tocar las demás. El secreto se muestra una sola vez: guardalo ahí mismo.
  3. Probala sin emitir nada. Un GET /api/v1/yo te devuelve el estado de la cuenta y confirma que la clave anda.
MétodoRutaQué hace
POST /api/v1/facturas Emite la factura de una venta
GET /api/v1/facturas/{id} Estado de un comprobante
GET /api/v1/facturas?idempotencia={pedido} ¿Este pedido ya se facturó?
POST /api/v1/facturas/{id}/nota-credito Anula una factura (devolución)
GET /api/v1/clientes/{doc} Datos del cliente por DNI o CUIT (padrón de ARCA)
GET /api/v1/yo Verifica la clave y el estado de la cuenta

Autenticación

Todos los pedidos llevan la clave en el header Authorization. Guardamos solo su hash: si la perdés, no se puede recuperar — se revoca y se crea otra.

Authorization: Bearer tk_live_9f2a...

Conectá tu plataforma, paso a paso

Para las tres plataformas el circuito es el mismo: creás la conexión en tu panel de tienda, el panel te da una URL de webhook y un secreto, y los pegás en tu plataforma. Desde ahí, cada venta pagada se factura sola. Lo que cambia entre plataformas es dónde se pegan y de dónde sale el secreto.

WooCommerce

La forma más fácil es el plugin oficial: no tocás webhooks y suma extras (el resultado anotado en cada pedido, el campo DNI/CUIT en el checkout y el botón "facturar ahora" para reintentos).

  1. Descargá tramitito-woocommerce.zip y subilo en Plugins → Añadir nuevo → Subir plugin. Activalo.
  2. En tramitito.app/tienda, sección Claves de API, creá una clave. Se muestra una sola vez: copiala ahí mismo.
  3. En WooCommerce → Tramitito, pegá la clave y elegí cuándo facturar: Procesando (apenas se acredita el pago) o Completado (cuando marcás el pedido como terminado).
  4. Listo. La próxima venta queda facturada y anotada en el pedido, con el link al PDF.

¿Preferís el webhook nativo de Woo, sin plugin? En el panel creá la conexión WooCommerce (te da URL y secreto) y en WordPress andá a WooCommerce → Ajustes → Avanzado → Webhooks → Añadir webhook: estado Activo, tema Pedido actualizado, la URL en "URL de entrega", el secreto en "Secreto", versión de la API v3. Facturamos cuando el pedido está en Procesando o Completado; el resto de los estados se ignora.

Shopify

  1. En tu admin de Shopify: Configuración → Notificaciones → Webhooks. Al pie de esa pantalla está el secreto de firma ("Tus webhooks estarán firmados con..."). Copialo — ojo: es ese, no la clave de API de Shopify.
  2. En tu panel de tienda, Conectar tienda → Shopify: poné un nombre y pegá ese secreto. Te devuelve la URL del webhook.
  3. De vuelta en Shopify, Crear webhook: evento Pago de pedido (orders/paid), formato JSON, y pegá la URL de Tramitito. Guardá.

Cuidado con "Enviar notificación de prueba"

Ese botón de Shopify manda un pedido de EJEMPLO que, si viene como pagado, se factura de verdad en ARCA. Para probar, mejor hacé un pedido real de monto chico y después anulalo desde el panel con su nota de crédito.

Tiendanube

Es la única que pide tres datos, y hay una razón: el aviso de Tiendanube no trae el pedido (solo el número), así que Tramitito tiene que leerlo de su API con un token de tu tienda. Ese token sale de una aplicación de Tiendanube, aunque sea privada y solo tuya.

  1. Creá una aplicación en partners.tiendanube.com (puede ser privada, para tu propia tienda). Anotá el Client ID y el Client Secret.
  2. Instalala en tu tienda: entrá a https://www.tiendanube.com/apps/TU_CLIENT_ID/authorize, autorizá, y de la URL de retorno copiá el parámetro code.
  3. Canjeá ese código por el token:
    curl -X POST https://www.tiendanube.com/apps/authorize/token \
      -d 'client_id=TU_CLIENT_ID' \
      -d 'client_secret=TU_CLIENT_SECRET' \
      -d 'grant_type=authorization_code' \
      -d 'code=EL_CODE_DEL_PASO_2'
    La respuesta trae access_token y user_id. Ese user_id es el ID de tu tienda (store_id).
  4. En tu panel, Conectar tienda → Tiendanube: nombre, el ID de la tienda (user_id), el token (access_token) y el secreto (client_secret). Te devuelve la URL del webhook.
  5. Registrá el webhook del evento order/paid apuntando a esa URL:
    curl -X POST https://api.tiendanube.com/v1/TU_STORE_ID/webhooks \
      -H 'Authentication: bearer TU_ACCESS_TOKEN' \
      -H 'Content-Type: application/json' \
      -d '{"url": "LA_URL_QUE_TE_DIO_TRAMITITO", "event": "order/paid"}'

Si esto te suena a chino: es un trámite de 15 minutos para cualquier desarrollador — pasale esta página. Y si no tenés uno, escribinos por el chat de soporte y te acompañamos.

Zapier, Make o tu propio sistema

No usan conexiones: usan la API con clave. Creá la clave en el panel y armá un paso HTTP con el trigger "nueva venta pagada" de tu tienda: método POST a /api/v1/facturas, header Authorization: Bearer tu_clave y el body de la sección Emitir una factura. No te olvides de idempotencia con el número de pedido.

¿Qué pasa después de conectar?

  • La primera venta pagada sale con factura en segundos. La ves en tu panel con su PDF.
  • Si ARCA está caído, la factura queda en cola y se emite sola cuando vuelve.
  • Si una venta no se puede facturar (por ejemplo, supera el tope de consumidor final y no vino el DNI), te avisamos por WhatsApp con el motivo y podés emitirla a mano.
  • Las devoluciones se resuelven con la nota de crédito, desde el panel o por API.

Emitir una factura

Un pedido por venta. La respuesta ya trae el CAE y el link al PDF: no hay que esperar nada ni consultar después.

curl -X POST https://tramitito.app/api/v1/facturas \
  -H "Authorization: Bearer tk_live_9f2a..." \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencia": "pedido-1234",
    "doc": "20111111112",
    "nombre": "Juan Pérez",
    "items": [
      { "descripcion": "Zapatillas running", "importe": 80000 },
      { "descripcion": "Envío", "importe": 5000 }
    ]
  }'

Respuesta

{
  "ok": true,
  "factura": {
    "id": "clx8y2m4k0001",
    "numero": 143,
    "cae": "75123456789012",
    "estado": "EMITIDA",
    "concepto": "Venta online (2 productos)",
    "urlPdf": "https://tramitito.app/facturas/clx8y2m4k0001/pdf"
  },
  "repetida": false,
  "error": null
}

Lo que se completa solo

  • El monto sale de sumar los items.
  • El concepto se arma con los items: uno solo usa su descripción, varios quedan como "Venta online (N productos)".
  • El tipo es productos, que es lo normal en un ecommerce.

Podés mandar monto e items juntos, pero tienen que coincidir: si no cierran devuelve 400 y no crea nada, porque el PDF mostraría un detalle que no suma el total declarado a ARCA.

Idempotencia: lo más importante

Los webhooks de ecommerce reintentan. Si tardás en responder, Tiendanube vuelve a avisar; Shopify también. Sin protección, una venta se factura tres veces y tenés que emitir dos notas de crédito.

Por eso mandá siempre idempotencia con el número de pedido. Con eso:

  • Un reintento devuelve la factura que ya se emitió, con "repetida": true, y no vuelve a llamar a ARCA.
  • Dos avisos simultáneos terminan los dos con la misma factura: el que pierde la carrera recupera la del otro en vez de fallar.

Si necesitás saber después si un pedido ya se facturó, GET /api/v1/facturas?idempotencia=pedido-1234 te lo dice.

Qué significa cada respuesta

HTTPQué hacer
200 Emitida La factura tiene CAE. Guardá el id y el urlPdf.
202 En cola ARCA no responde. La factura existe y se emite sola: no reintentes.
400 Datos inválidos Falta un campo o los items no suman el monto. Es un error de la integración.
401 Clave inválida Falta la clave, tiene mal formato, no existe o fue revocada.
403 Sin modo tienda La cuenta apagó "Vendo online". Las claves dejan de autenticar hasta que se reactive.
409 Cuenta incompleta Falta cargar CUIT o punto de venta en el panel.
422 Rechazada ARCA la rechazó, se acabó el tope del plan o falta el documento del comprador. El motivo viene en error.
429 Demasiados pedidos Pasaste el límite de 120 por minuto. Esperá y reintentá.

El 202 es el que más se malinterpreta

No es un error: la factura ya existe y se va a emitir sola cuando ARCA vuelva. Si tu integración lo trata como fallo y reintenta con la misma clave de idempotencia, recibe esa misma factura — no se duplica nada, pero tampoco hace falta.

Qué letra de factura sale

No se elige desde la API: sale de la condición fiscal de la cuenta cruzada con el documento del comprador.

Si la cuenta esY mandásSale
Monotributocualquier cosaFactura C
Responsable inscriptosin docFactura B
Responsable inscriptoun CUIT en docFactura A

El tope de consumidor final

Sin doc, las ventas de más de $417.288 devuelven 422: ARCA exige identificar al comprador por encima de ese monto. Si tu checkout no pide DNI, esos pedidos no se van a poder facturar. Conviene hacerlo obligatorio, al menos para compras grandes.

Devoluciones

ARCA no permite borrar un comprobante que ya tiene CAE. Una devolución se factura al revés: con una nota de crédito que anula la original.

curl -X POST https://tramitito.app/api/v1/facturas/clx8y2m4k0001/nota-credito \
  -H "Authorization: Bearer tk_live_9f2a..."

Respuesta

{
  "ok": true,
  "notaCredito": {
    "id": "clx9a1b2c0002",
    "letra": "NC-C",
    "numero": 12,
    "urlPdf": "https://tramitito.app/facturas/clx9a1b2c0002/pdf"
  }
}

La nota de crédito no cuenta contra el tope mensual del plan. Una factura no se puede anular dos veces, y una nota de crédito no se anula.

Consultar comprobantes

# Por el id que devolvió la emisión
curl https://tramitito.app/api/v1/facturas/clx8y2m4k0001 \
  -H "Authorization: Bearer tk_live_9f2a..."

# Por número de pedido: sirve para reconciliar
curl "https://tramitito.app/api/v1/facturas?idempotencia=pedido-1234" \
  -H "Authorization: Bearer tk_live_9f2a..."

Devuelven el comprobante con su estado, el CAE, si está anulado y el link al PDF. Si el pedido todavía no se facturó, la búsqueda por idempotencia da 404.

Datos del cliente por DNI o CUIT

Con el documento del comprador, el padrón de ARCA devuelve quién es: nombre, condición frente al IVA y domicilio fiscal. Sirve para autocompletar el checkout o mostrar a quién le estás facturando. Acepta DNI (7 u 8 dígitos) o CUIT/CUIL (11).

curl https://tramitito.app/api/v1/clientes/20111111112 \
  -H "Authorization: Bearer tk_live_9f2a..."

Respuesta

{
  "ok": true,
  "cliente": {
    "doc": "20111111112",
    "nombre": "PÉREZ JUAN",
    "condicionIva": "MONOTRIBUTO",
    "domicilio": "AV SIEMPRE VIVA 742, CÓRDOBA, CÓRDOBA, CP 5000"
  }
}

404 si el documento no está en el padrón. Límite: 30 consultas por minuto (el padrón de ARCA es lento; conviene cachear del lado de la tienda). Al emitir la factura no hace falta llamar antes a este endpoint: el nombre y el domicilio se completan solos.

Campos de la emisión

Todos son opcionales salvo que mandes al menos monto o items.

CampoTipoPara qué
idempotencia texto El número de pedido de tu tienda. Evita que un reintento facture dos veces. Mandalo siempre.
items lista Renglones del pedido: descripcion e importe. Aparecen en el detalle del PDF. Hasta 50.
monto número Total del comprobante. Si mandás items y no lo ponés, se calcula sumándolos.
doc texto DNI o CUIT del comprador. Si no lo mandás, sale a consumidor final (hasta el tope de ARCA).
nombre texto Nombre del comprador identificado: sale en el PDF junto al documento ("Cliente: Juan Pérez — DNI ..."). Solo tiene efecto si mandás doc.
medioPago efectivo · tarjeta · transferencia · mercadopago · otro Cómo se cobró la venta: se imprime como "Condición de venta" en el PDF de esa factura.
concepto texto Descripción del comprobante. Si no lo mandás, se arma con los items.
alicuotaIva 21 · 10.5 · 27 Solo para responsables inscriptos. En factura C se ignora.
conceptoArca 1 · 2 · 3 1 productos, 2 servicios, 3 ambos. Por defecto 1, que es lo normal en un ecommerce.
observaciones texto Texto libre que se imprime en el PDF de esta factura.

También aceptamos fechaComprobante, servicioDesde y servicioHasta para casos donde la fecha de la venta no es la de hoy o estás facturando un período de servicio.

Límites

  • 120 pedidos por minuto. Una tienda normal factura decenas por hora: el límite está para frenar un bucle de webhooks mal configurado antes de que llegue a ARCA.
  • El tope del plan. Se aplica igual que en el bot y el panel. Una cuenta Gratis emite 5 facturas por mes y después recibe 422.
  • Hasta 10 claves activas por cuenta, y 50 items por factura.

Si algo no anda

SíntomaCausa más comúnQué hacer
La plataforma marca el webhook como fallado El secreto no coincide (firma inválida). Copialo de nuevo, exacto. En Shopify es el de "estarán firmados con...", no la clave de API. En el panel podés volver a ver el secreto de cada conexión.
No llega ninguna venta URL mal pegada o evento equivocado. La URL tiene que terminar con el código largo de tu conexión. El evento correcto: Pago de pedido (Shopify), order/paid (Tiendanube), Pedido actualizado (Woo).
La venta llegó pero no hay factura El pedido no está en un estado cobrado, o faltó un dato. Solo se facturan ventas pagadas (paid / Procesando / Completado). Si faltó algo (DNI sobre el tope, CUIT sin cargar), te llegó el motivo por WhatsApp: corregilo y emitila desde el panel.
Figura "en cola" ARCA no responde. Nada: se emite sola cuando ARCA vuelve. No la reintentes.
¿Se puede facturar dos veces? No. Cada pedido factura una sola vez aunque el aviso llegue repetido: el reintento devuelve la factura original.

¿Otra cosa? Escribinos por el chat de soporte de tramitito.app y lo vemos.

Preguntas frecuentes

¿Qué necesito para usar la API de Tramitito?

Una cuenta de Tramitito con el modo tienda activado, el CUIT y el punto de venta cargados, y una clave creada desde tu panel de tienda (tramitito.app/tienda). La API está incluida en los planes de tienda, y el plan Gratis permite emitir 5 facturas por mes para probar la integración.

¿Cómo evito facturar dos veces el mismo pedido?

Mandá siempre el campo "idempotencia" con el número de pedido de tu tienda. Si el webhook se reintenta, Tramitito devuelve la factura que ya emitió en lugar de emitir una nueva, y lo marca con "repetida": true. Funciona incluso si dos avisos llegan al mismo tiempo.

¿Qué pasa si ARCA está caído cuando llega una venta?

La API responde 202 y la factura queda en cola. Un proceso automático la reintenta con backoff hasta que ARCA responde. No hay que reintentar el pedido desde la tienda: la factura ya existe y se emite sola.

¿Puedo facturar sin el DNI o CUIT del comprador?

Sí, hasta el tope de consumidor final que fija ARCA ($417.288). Por encima de ese monto ARCA exige identificar al comprador, y la API devuelve 422 pidiendo el documento. Si tu checkout no pide DNI, conviene hacerlo obligatorio para las compras grandes.

¿Cómo se factura una devolución?

Con POST /api/v1/facturas/{id}/nota-credito. ARCA no permite borrar un comprobante que ya tiene CAE, así que la devolución se hace emitiendo una nota de crédito que anula la factura original.

¿Con qué plataformas de ecommerce funciona?

Con cualquiera que pueda hacer un pedido HTTP cuando se aprueba una venta: Tiendanube, Shopify, WooCommerce, VTEX o un desarrollo propio. También se puede conectar sin programar usando Zapier o Make.

Conectá tu tienda hoy

Activá el modo tienda, creá tu clave y probala con una venta de prueba.