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.
- Activá el modo tienda. Entrá a tramitito.app/tienda con tu cuenta y activalo con un clic.
- 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.
- Probala sin emitir nada. Un
GET /api/v1/yote devuelve el estado de la cuenta y confirma que la clave anda.
| Método | Ruta | Qué 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).
- Descargá tramitito-woocommerce.zip y subilo en Plugins → Añadir nuevo → Subir plugin. Activalo.
- En tramitito.app/tienda, sección Claves de API, creá una clave. Se muestra una sola vez: copiala ahí mismo.
- 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).
- 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
- 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.
- En tu panel de tienda, Conectar tienda → Shopify: poné un nombre y pegá ese secreto. Te devuelve la URL del webhook.
- 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.
- Creá una aplicación en partners.tiendanube.com (puede ser privada, para tu propia tienda). Anotá el Client ID y el Client Secret.
-
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ámetrocode. -
Canjeá ese código por el token:
La respuesta traecurl -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'access_tokenyuser_id. Ese user_id es el ID de tu tienda (store_id). - 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.
-
Registrá el webhook del evento
order/paidapuntando 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
| HTTP | Qué 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 es | Y mandás | Sale |
|---|---|---|
| Monotributo | cualquier cosa | Factura C |
| Responsable inscripto | sin doc | Factura B |
| Responsable inscripto | un CUIT en doc | Factura 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.
| Campo | Tipo | Para 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íntoma | Causa más común | Qué 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.