API Reference
Todo lo que necesitás para integrar facturación electrónica AFIP/ARCA en tu aplicación.
Base URL
https://api.lafactureadora.com.arVersión
v1 (estable)Inicio rápido
Emití tu primera factura en 3 pasos.
1. Obtené una API key
Generala desde el dashboard. Las de testing arrancan con
lf_test_y las de producción conlf_live_.2. Configurá tu certificado AFIP/ARCA
Generá un CSR, subilo a ARCA (WSASS para testing, Administración de Certificados Digitales para producción), descargá el .crt y subilo. Ver Certificados.
3. Emití tu primera factura
curl -X POST https://api.lafactureadora.com.ar/api/v1/invoices \ -H "Authorization: Bearer lf_test_tu_api_key" \ -H "Content-Type: application/json" \ -d '{ "cuit": "20359403616", "punto_venta": 1, "tipo_comprobante": 11, "cliente": { "tipo_documento": 96, "numero_documento": "12345678", "razon_social": "Juan Perez" }, "items": [{ "descripcion": "Servicio web", "cantidad": 1, "precio_unitario": 50000 }] }'
Autenticación
La API soporta dos métodos. Los endpoints públicos (/health, /plans, /billing/webhook, /chat) no requieren auth.
Opción 1 — API Key (recomendada para integraciones)
# Authorization header
Authorization: Bearer lf_live_tu_api_key
# O X-API-Key
X-API-Key: lf_live_tu_api_keyOpción 2 — Firebase ID Token (dashboard web)
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...Ambientes y prefijos
Ambiente homologación. Se fuerza ambiente: "testing". Facturas sin validez fiscal.
Facturas reales. Requiere certificado de producción validado.
Emitir factura
/api/v1/invoicesEmite una factura electrónica y obtiene el CAE de AFIP/ARCA. Si el comprobante es rechazado por race condition (10016) la API reintenta automáticamente hasta 5 veces con backoff.
Body (raíz)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor (11 dígitos). Debe estar configurado y tener cert validado. |
| punto_venta | number | SÍ | Punto de venta tipo RECE (1-99999). |
| tipo_comprobante | number | No | Default: 11 (Factura C). Ver tabla más abajo. |
| concepto | number | No | 1: Productos, 2: Servicios, 3: Productos y Servicios. Default: 1. |
| ambiente | string | No | "testing" o "production". Si la key es lf_test_*, se fuerza testing. |
| moneda | string | No | "PES" (ARS), "DOL" (USD), "EUR". Default: "PES". |
| cotizacion | number | No | Tipo de cambio si moneda != PES. Default: 1. |
| condicion_pago | number | No | 1: Contado, 2: Tarjeta crédito, etc. Default: 1. |
| observaciones | string | No | Notas internas (no van a AFIP). |
| fecha_servicio_desde | string | No | YYYY-MM-DD. Requerido si concepto es 2 o 3. |
| fecha_servicio_hasta | string | No | YYYY-MM-DD. Requerido si concepto es 2 o 3. |
| fecha_vencimiento_pago | string | No | YYYY-MM-DD. Opcional para servicios. |
Body > cliente (objeto, requerido)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| tipo_documento | number | SÍ | 80: CUIT, 86: CUIL, 96: DNI, 94: Pasaporte, 99: Consumidor Final. |
| numero_documento | string | SÍ | Número del documento (sin guiones). |
| razon_social | string | SÍ | Nombre o razón social del receptor. |
| domicilio | string | No | Dirección del receptor. |
| string | No | Email del receptor. | |
| condicion_iva | number | No | 1: RI, 4: Exento, 5: CF, 6: Monotributo, 11: RI Agente Percep., 13: Monot. Social. Default: 5. |
Body > items[] (array, requerido, mín. 1)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| descripcion | string | SÍ | Descripción del item. |
| cantidad | number | No | Cantidad. Default: 1. |
| precio_unitario | number | SÍ | Precio unitario en la moneda del comprobante. |
| alicuota_iva | number | No | Porcentaje IVA: 0, 2.5, 5, 10.5, 21, 27. Default: 0. |
| bonificacion | number | No | Porcentaje de descuento (0-100). Default: 0. |
| gravado | boolean | No | Si el item está gravado con IVA. Default: true. |
Body > comprobante_asociado (objeto, solo NC/ND)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| tipo | number | SÍ | Tipo del comprobante original. |
| punto_venta | number | SÍ | PV del comprobante original. |
| numero | number | SÍ | Número del comprobante original. |
| cuit | string | No | CUIT del emisor original. |
| fecha | string | No | Fecha del comprobante original (YYYY-MM-DD). |
Body > tributos[] (array, opcional — IIBB, percepciones)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| id | number | SÍ | ID del tributo según AFIP. |
| descripcion | string | No | Descripción del tributo. |
| base_imponible | number | No | Base imponible. |
| alicuota | number | No | Alícuota del tributo. |
| importe | number | No | Importe del tributo. |
curl -X POST https://api.lafactureadora.com.ar/api/v1/invoices \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"cuit": "20359403616",
"punto_venta": 1,
"tipo_comprobante": 11,
"concepto": 1,
"cliente": {
"tipo_documento": 96,
"numero_documento": "12345678",
"razon_social": "Juan Perez"
},
"items": [{
"descripcion": "Servicio de desarrollo web",
"cantidad": 1,
"precio_unitario": 50000
}]
}'{
"success": true,
"data": {
"id": "5f3a8b9c1e7d4a2b8c1e7d4a",
"cae": "75044220307741",
"cae_vencimiento": "20260405",
"numero_comprobante": 12,
"tipo_comprobante": 11,
"punto_venta": 1,
"fecha": "2026-03-26",
"total": 50000,
"neto": 50000,
"iva": 0,
"tributos": 0,
"qr_data": null,
"observaciones": null,
"emisor": {
"cuit": "20359403616",
"razon_social": "Mi Empresa SRL",
"punto_venta": 1
},
"cliente": {
"tipo_documento": 96,
"numero_documento": "12345678",
"razon_social": "Juan Perez"
}
}
}Listar facturas
/api/v1/invoicesLista las facturas emitidas por el usuario, ordenadas por fecha desc. Filtros opcionales. Paginación con cursor (no offset).
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | No | Filtrar por CUIT emisor. |
| ambiente | string | No | "testing" o "production". |
| limit | number | No | Resultados por página. Default: 50. Max: 200. |
| cursor | string | No | Para paginar: pasar `next_cursor` de la respuesta anterior. Si no se pasa, devuelve la primera página. |
# Primera página
curl "https://api.lafactureadora.com.ar/api/v1/invoices?cuit=20359403616&limit=50" \
-H "Authorization: Bearer lf_test_tu_api_key"
# Páginas siguientes (usando next_cursor de la respuesta anterior)
curl "https://api.lafactureadora.com.ar/api/v1/invoices?cuit=20359403616&limit=50&cursor=abc123" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"invoices": [
{
"id": "abc123",
"cuit_emisor": "20359403616",
"ambiente": "testing",
"tipo_comprobante": 11,
"punto_venta": 1,
"numero_comprobante": 12,
"cae": "75044220307741",
"cae_vencimiento": "20260405",
"total": 50000,
"neto": 50000,
"iva": 0,
"tributos": 0,
"cliente": {
"tipo_documento": 96,
"numero_documento": "12345678",
"razon_social": "Juan Perez"
},
"fecha_emision": "2026-03-26",
"created_at": "2026-03-26T15:30:00.000Z"
}
],
"count": 1,
"next_cursor": "abc123",
"has_more": true
}
}Resumen fiscal mensual
/api/v1/invoices/summaryTotales facturados del mes en curso, IVA, tributos y desglose por tipo de comprobante.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | No | Filtrar por CUIT emisor. |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/invoices/summary?cuit=20359403616" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"mes": "2026-05",
"total_comprobantes": 12,
"total_facturado": 685000,
"total_neto": 566115.7,
"total_iva": 118884.3,
"total_tributos": 0,
"por_tipo": [
{ "tipo_comprobante": 1, "nombre": "Factura A", "cantidad": 8, "total": 580000 },
{ "tipo_comprobante": 6, "nombre": "Factura B", "cantidad": 4, "total": 105000 }
],
"por_estado": { "aprobadas": 12, "rechazadas": 0 }
}
}Último comprobante autorizado
/api/v1/invoices/last-authorizedConsulta el último número de comprobante autorizado en AFIP/ARCA para un PV y tipo específicos.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor. |
| punto_venta | number | SÍ | Punto de venta. |
| tipo_comprobante | number | SÍ | Tipo de comprobante. |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/invoices/last-authorized?cuit=20359403616&punto_venta=1&tipo_comprobante=11" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"CbteNro": 12,
"PtoVta": 1,
"CbteTipo": 11
}
}Consultar comprobante en AFIP
/api/v1/invoices/queryConsulta un comprobante específico en AFIP/ARCA por su número.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor. |
| punto_venta | number | SÍ | Punto de venta. |
| tipo_comprobante | number | SÍ | Tipo de comprobante. |
| numero | number | SÍ | Número del comprobante. |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/invoices/query?cuit=20359403616&punto_venta=1&tipo_comprobante=11&numero=12" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"FeCabResp": {
"Cuit": "20359403616",
"PtoVta": 1,
"CbteTipo": 11,
"Resultado": "A"
},
"FeDetResp": {
"FECAEDetResponse": {
"Concepto": 1,
"DocTipo": 96,
"DocNro": 12345678,
"CbteDesde": 12,
"CbteHasta": 12,
"CbteFch": "20260326",
"ImpTotal": 50000,
"ImpNeto": 50000,
"ImpIVA": 0,
"CAE": "75044220307741",
"CAEFchVto": "20260405"
}
}
}
}Tipos de comprobante disponibles
/api/v1/invoices/typesLista los tipos de comprobante habilitados para el CUIT en AFIP/ARCA.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor. |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/invoices/types?cuit=20359403616" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": [
{ "Id": 1, "Desc": "Factura A", "FchDesde": "20100901", "FchHasta": "20990101" },
{ "Id": 6, "Desc": "Factura B", "FchDesde": "20100901", "FchHasta": "20990101" },
{ "Id": 11, "Desc": "Factura C", "FchDesde": "20100901", "FchHasta": "20990101" }
]
}Generar PDF de comprobante
/api/v1/invoices/:id/pdfGenera el PDF (formato AFIP con QR) de una factura ya emitida. Lookup por :id interno de Firestore (caso común) o por (cuit, punto_venta, tipo_comprobante, numero) en el body como fallback. Devuelve un binario application/pdf.
Path parameter
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| :id | string | No | ID interno de Firestore (el que viene en `data.id` del response de POST /invoices). Si no lo tenés, mandalo como cualquier string (ej. "factura") y la API hace fallback al lookup por body. |
Body (JSON) — fallback si :id no es ID interno válido
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | No | CUIT del emisor. Requerido si :id no es ID interno. |
| punto_venta | number | No | Punto de venta. Requerido si :id no es ID interno. |
| tipo_comprobante | number | No | Tipo de comprobante. Requerido si :id no es ID interno. |
| numero | number | No | Número del comprobante. Requerido si :id no es ID interno. |
# Caso normal: usar el id que viene en data.id del response de POST /invoices
curl -X POST https://api.lafactureadora.com.ar/api/v1/invoices/5f3a8b9c1e7d4a2b8c1e7d4a/pdf \
-H "Authorization: Bearer lf_test_tu_api_key" \
--output factura.pdf
# Fallback si no tenés el id interno: mandalo cualquier cosa en :id y pasá los identificadores en body
curl -X POST https://api.lafactureadora.com.ar/api/v1/invoices/x/pdf \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"cuit": "30718954149",
"punto_venta": 2,
"tipo_comprobante": 6,
"numero": 1
}' \
--output factura.pdf(application/pdf — binario)Generar CSR (Certificate Signing Request)
/api/v1/certs/generateGenera un CSR + clave privada RSA 2048 para un CUIT. El CSR se pega en ARCA (WSASS para testing, Administración de Certificados Digitales para producción).
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT (11 dígitos). |
| razon_social | string | SÍ | Razón social o nombre. |
| condicion_iva | number | No | Código AFIP (1, 4, 6, 11, 13). |
| domicilio_fiscal | string | No | Domicilio fiscal. |
| ambiente | string | No | "testing" o "production". Default: "testing". |
curl -X POST https://api.lafactureadora.com.ar/api/v1/certs/generate \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"cuit": "20359403616",
"razon_social": "Mi Empresa SRL",
"condicion_iva": 1,
"ambiente": "testing"
}'{
"success": true,
"data": {
"csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIIC...\n-----END CERTIFICATE REQUEST-----",
"alias": "lafactureadora_20359403616_1716598123456",
"cuit": "20359403616",
"ambiente": "testing"
}
}Subir certificado .crt firmado por ARCA
/api/v1/certs/uploadSube el certificado .crt firmado por ARCA y lo valida contra la clave privada guardada previamente.
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT (11 dígitos). |
| certificate | string | SÍ | Contenido del .crt en formato PEM (con BEGIN/END CERTIFICATE). |
| ambiente | string | No | "testing" o "production". Default: "testing". |
curl -X POST https://api.lafactureadora.com.ar/api/v1/certs/upload \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"cuit": "20359403616",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIE...\n-----END CERTIFICATE-----",
"ambiente": "testing"
}'{
"success": true,
"data": {
"cuit": "20359403616",
"ambiente": "testing",
"status": "certificado_activo",
"validation": {
"valid": true,
"validFrom": "2026-03-01T00:00:00Z",
"validTo": "2028-03-01T00:00:00Z",
"subject": "CN=20359403616"
}
}
}Listar CSRs sin completar
/api/v1/certs/pendingLista los CSRs generados que aún no fueron completados con un .crt subido. Útil para retomar onboarding a medias.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| ambiente | string | No | Filtrar por "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/certs/pending?ambiente=testing" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"pending": [
{
"id": "abc123",
"cuit": "20359403616",
"ambiente": "testing",
"alias": "lafactureadora_20359403616_1716598123456",
"created_at": "2026-05-24T18:30:00.000Z"
}
]
}
}Limpiar CSR pendiente
/api/v1/certs/pendingBorra atómicamente: cert no validado + tokens AFIP cacheados. Si no queda cert validado en ningún ambiente, desvincula también el CUIT del perfil.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT a limpiar. |
| ambiente | string | SÍ | "testing" o "production". |
curl -X DELETE "https://api.lafactureadora.com.ar/api/v1/certs/pending?cuit=20359403616&ambiente=testing" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"cuit": "20359403616",
"ambiente": "testing",
"deleted_certs": 1,
"removed_from_profile": true,
"message": "Se limpió el CSR pendiente y se desvinculó el CUIT 20359403616 del perfil."
}
}Regenerar certificado
/api/v1/certs/regenerateBorra todos los certificados de un CUIT+ambiente (incluso validados) para poder generar uno nuevo desde cero.
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT (11 dígitos). |
| ambiente | string | No | "testing" o "production". Default: "testing". |
curl -X POST https://api.lafactureadora.com.ar/api/v1/certs/regenerate \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "cuit": "20359403616", "ambiente": "testing" }'{
"success": true,
"data": {
"message": "Se eliminaron 1 certificado(s) para CUIT 20359403616 en testing. Ahora podés generar uno nuevo.",
"cuit": "20359403616",
"ambiente": "testing"
}
}Estado del certificado
/api/v1/certs/:cuit/statusConsulta el estado actual del certificado de un CUIT.
URL parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| :cuit | string | SÍ | CUIT (11 dígitos) en la URL. |
curl https://api.lafactureadora.com.ar/api/v1/certs/20359403616/status \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"cuit": "20359403616",
"status": "CERTIFICADO_VALIDADO",
"ambiente": "production",
"alias": "lafactureadora_20359403616_1716598123456"
}
}Listar CUITs configurados
/api/v1/cuitsLista todos los CUITs vinculados a la cuenta con info fiscal y puntos de venta configurados.
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/cuits \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"cuits": [
{
"cuit": "20359403616",
"razon_social": "Mi Empresa SRL",
"condicion_iva": 1,
"condicion_iva_label": "IVA Responsable Inscripto",
"status": "active",
"puntos_venta": [
{ "numero": 1, "tipo": "electronico" }
]
}
]
}
}Actualizar datos fiscales de un CUIT
/api/v1/cuits/:cuitActualiza condición frente al IVA y/o razón social del CUIT. Al menos uno de los dos campos.
URL parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| :cuit | string | SÍ | CUIT (11 dígitos) en la URL. |
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| condicion_iva | number | No | 1: RI, 4: Exento, 5: CF, 6: Monotributo, 8: Prov.Exterior, 9: Cliente Exterior, 10: Ley 19640, 11: RI Agente Percep., 13: Monot. Social. |
| razon_social | string | No | Razón social o nombre. |
curl -X PUT https://api.lafactureadora.com.ar/api/v1/cuits/20359403616 \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "condicion_iva": 1, "razon_social": "Mi Empresa SRL" }'{
"success": true,
"data": {
"cuit": "20359403616",
"condicion_iva": 1,
"condicion_iva_label": "IVA Responsable Inscripto",
"razon_social": "Mi Empresa SRL"
}
}Consultar padrón AFIP (A13)
/api/v1/afip/padronObtiene datos completos de un contribuyente: razón social, condición frente al IVA, domicilio fiscal, actividad principal y estado. Cache 24h por CUIT consultado + ambiente.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit_consulta | string | SÍ | CUIT que querés consultar (puede ser el propio o el de un cliente). |
| cuit_emisor | string | No | CUIT del emisor que firma. Si no se pasa, usa el primero del usuario. |
| ambiente | string | No | "testing" o "production". Default: "production". |
curl "https://api.lafactureadora.com.ar/api/v1/afip/padron?cuit_consulta=30712345678&ambiente=production" \
-H "Authorization: Bearer lf_live_tu_api_key"{
"success": true,
"data": {
"ok": true,
"data": {
"cuit": "30712345678",
"razon_social": "Empresa SA",
"tipo_persona": "JURIDICA",
"estado": "ACTIVO",
"condicion_iva": 1,
"condicion_iva_label": "IVA Responsable Inscripto",
"monotributo_categoria": null,
"domicilio_fiscal": {
"direccion": "Av. Corrientes 1234",
"localidad": "CABA",
"cod_postal": "1043",
"provincia": "CIUDAD AUTONOMA BUENOS AIRES"
},
"actividad_principal": "Servicios de consultoría informática"
}
}
}Listar puntos de venta
/api/v1/afip/puntos-ventaLista los puntos de venta habilitados del CUIT en AFIP. Si AFIP no devuelve datos (común en testing), hace fallback a los PVs ya usados en facturas locales.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor. |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/afip/puntos-venta?cuit=20359403616&ambiente=production" \
-H "Authorization: Bearer lf_live_tu_api_key"{
"success": true,
"data": {
"puntos_venta": [
{ "numero": 1, "emision_tipo": "CAE", "bloqueado": false, "fecha_baja": null, "origen": "afip" },
{ "numero": 2, "emision_tipo": "CAE", "bloqueado": false, "fecha_baja": null, "origen": "afip" }
],
"total": 2
}
}Último número autorizado
/api/v1/afip/ultimo-comprobanteConsulta el último número autorizado para un PV. Si no se pasa tipo_comprobante, consulta los 6 más comunes (1, 6, 11, 3, 8, 13).
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor. |
| punto_venta | number | SÍ | Número de PV. |
| tipo_comprobante | number | No | Tipo específico. Si se omite, consulta los más comunes. |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/afip/ultimo-comprobante?cuit=20359403616&punto_venta=1" \
-H "Authorization: Bearer lf_test_tu_api_key"{
"success": true,
"data": {
"punto_venta": 1,
"comprobantes": [
{ "tipo_comprobante": 1, "nombre": "Factura A", "ultimo_numero": 12 },
{ "tipo_comprobante": 11, "nombre": "Factura C", "ultimo_numero": 47 }
]
}
}Health check de AFIP/ARCA
/api/v1/afip/estadoHealth check de los servicios AFIP/ARCA (WSFEv1). Útil para verificar que AFIP está operativo antes de emitir.
Query parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor (para firmar el dummy). |
| ambiente | string | No | "testing" o "production". |
curl "https://api.lafactureadora.com.ar/api/v1/afip/estado?cuit=20359403616&ambiente=production" \
-H "Authorization: Bearer lf_live_tu_api_key"{
"success": true,
"data": {
"servicios": {
"app_server": "OK",
"db_server": "OK",
"auth_server": "OK"
},
"online": true,
"ambiente": "production",
"timestamp": "2026-05-30T22:10:33.000Z"
}
}Wrapper SOAP genérico
/api/v1/afip/:service/:methodLlama cualquier método SOAP de AFIP de la whitelist. Útil para operaciones de consulta avanzadas no cubiertas por endpoints específicos.
URL parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| :service | string | SÍ | Nombre del servicio. Ej: "wsfev1". |
| :method | string | SÍ | Método SOAP. Debe estar en la whitelist. |
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | SÍ | CUIT del emisor. |
| ambiente | string | No | "testing" o "production". |
| params | object | No | Parámetros del método SOAP. Default: {}. |
curl -X POST "https://api.lafactureadora.com.ar/api/v1/afip/wsfev1/FEDummy" \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "cuit": "20359403616", "ambiente": "testing" }'{
"success": true,
"data": {
"success": true,
"service": "wsfev1",
"method": "FEDummy",
"result": {
"AppServer": "OK",
"DbServer": "OK",
"AuthServer": "OK"
}
}
}Crear una nueva API key
/api/v1/keysGenera una API key. La key completa se muestra UNA SOLA VEZ en la respuesta. Después se ve solo el prefijo.
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| name | string | SÍ | Nombre descriptivo (ej: "Integración WooCommerce"). |
| environment | string | No | "test" (genera lf_test_*) o "production" (genera lf_live_*). Default: "test". |
curl -X POST https://api.lafactureadora.com.ar/api/v1/keys \
-H "Authorization: Bearer <firebase_id_token>" \
-H "Content-Type: application/json" \
-d '{ "name": "Mi integración", "environment": "production" }'{
"success": true,
"data": {
"key": "lf_live_a1b2c3d4e5f6...",
"id": "abc123",
"name": "Mi integración",
"key_prefix": "lf_live_a1b2c3...",
"environment": "production",
"created_at": "2026-03-26T15:30:00Z",
"warning": "Guardá esta key de forma segura. No se puede recuperar."
}
}Listar API keys
/api/v1/keysLista todas las keys del usuario. Solo se muestra el prefijo (no la key completa).
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/keys \
-H "Authorization: Bearer <firebase_id_token>"{
"success": true,
"data": {
"keys": [
{
"id": "abc123",
"name": "Mi integración",
"environment": "production",
"key_prefix": "lf_live_a1b2c3...",
"active": true,
"created_at": "2026-03-26T15:30:00Z",
"last_used_at": "2026-05-30T22:10:00Z",
"usage": {
"total_requests": 12450,
"month_requests": 1850,
"month_invoices": 47,
"current_month": "2026-05"
}
}
]
}
}Revocar una API key
/api/v1/keys/:keyIdLa key deja de funcionar inmediatamente. No es reversible — hay que crear una nueva.
URL parameters
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| :keyId | string | SÍ | ID de la key (no la key completa). |
curl -X DELETE https://api.lafactureadora.com.ar/api/v1/keys/abc123 \
-H "Authorization: Bearer <firebase_id_token>"{
"success": true,
"data": { "revoked": true }
}Crear suscripción en MercadoPago
/api/v1/billing/subscribeCrea una suscripción en MercadoPago y devuelve la URL de pago para redirigir al usuario.
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| plan | string | SÍ | "emprendedor" ($6.990), "profesional" ($14.990), "empresa" ($29.990) o "corporativo" ($49.990). |
curl -X POST https://api.lafactureadora.com.ar/api/v1/billing/subscribe \
-H "Authorization: Bearer <firebase_id_token>" \
-H "Content-Type: application/json" \
-d '{ "plan": "profesional" }'{
"success": true,
"data": {
"init_point": "https://www.mercadopago.com.ar/subscriptions/checkout?preapproval_id=...",
"subscription_id": "mp_sub_abc123"
}
}Estado de la suscripción
/api/v1/billing/statusConsulta el plan actual y el estado de la suscripción del usuario.
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/billing/status \
-H "Authorization: Bearer <firebase_id_token>"{
"success": true,
"data": {
"plan": "profesional",
"subscription": {
"mp_id": "mp_sub_abc123",
"status": "authorized",
"plan_requested": "profesional",
"created_at": "2026-03-01T00:00:00Z"
}
}
}Cambiar de plan
/api/v1/billing/change-planUpgrade o downgrade. Cancela la suscripción actual de MP y crea una nueva. Si es downgrade, suspende CUITs excedentes proactivamente.
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| plan | string | SÍ | "emprendedor", "profesional", "empresa" o "corporativo". |
curl -X PUT https://api.lafactureadora.com.ar/api/v1/billing/change-plan \
-H "Authorization: Bearer <firebase_id_token>" \
-H "Content-Type: application/json" \
-d '{ "plan": "empresa" }'{
"success": true,
"data": {
"init_point": "https://www.mercadopago.com.ar/subscriptions/checkout?...",
"subscription_id": "mp_sub_xyz789",
"previous_plan": "profesional",
"new_plan": "empresa",
"is_downgrade": false,
"suspended_cuits": 0
}
}Historial de pagos
/api/v1/billing/historyDevuelve el historial de pagos autorizados de la suscripción del usuario, consultado en vivo desde MercadoPago.
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/billing/history \
-H "Authorization: Bearer <firebase_id_token>"{
"success": true,
"data": {
"payments": [
{
"id": "mp_pay_123",
"date": "2026-05-15T14:00:00.000Z",
"amount": 14990,
"status": "approved",
"status_detail": "accredited",
"payment_method": "visa"
}
],
"plan": "profesional",
"subscription_status": "authorized"
}
}Cancelar suscripción
/api/v1/billing/cancelCancela la suscripción activa en MercadoPago. El plan baja a Free inmediatamente y se suspenden CUITs excedentes.
Este endpoint no requiere parámetros.
curl -X POST https://api.lafactureadora.com.ar/api/v1/billing/cancel \
-H "Authorization: Bearer <firebase_id_token>"{
"success": true,
"data": {
"message": "Suscripción cancelada. Tu plan ahora es Gratis. 2 CUIT(s) fueron suspendidos por exceder el límite del plan.",
"suspended_cuits": 2
}
}Webhook de MercadoPago
/api/v1/billing/webhookPúblicaEndpoint llamado automáticamente por MercadoPago. No llamar manualmente. Procesa eventos subscription_preapproval con validación HMAC-SHA256 + idempotencia por (mp_id, status).
# Configurado en el panel de MP. Recibe POST automático cuando cambia estado de suscripción.OKChat IA (Gemini)
/api/v1/chatPúblicaProxy a Gemini IA (gemini-2.5-flash-lite) con prompts especializados. Endpoint público con rate-limit estricto.
Body (JSON)
| Parámetro | Tipo | Req. | Descripción |
|---|---|---|---|
| messages | array | SÍ | Historia de mensajes: [{ role, text }]. role = "user" | "model". |
| context | string | No | "soporte" (técnico, default) o "ventas" (no menciona precios). |
curl -X POST https://api.lafactureadora.com.ar/api/v1/chat \
-H "Content-Type: application/json" \
-d '{
"messages": [
{ "role": "user", "text": "¿Cómo configuro un punto de venta en AFIP?" }
],
"context": "soporte"
}'{
"success": true,
"data": {
"reply": "Para crear un punto de venta web services en AFIP/ARCA..."
}
}Perfil del usuario autenticado
/api/v1/meDevuelve el perfil, uso del mes, CUITs configurados y CUITs suspendidos por downgrades.
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/me \
-H "Authorization: Bearer lf_live_tu_api_key"{
"success": true,
"data": {
"user": {
"email": "usuario@ejemplo.com",
"display_name": "Juan Perez",
"company": "Mi Empresa SRL",
"plan": "profesional"
},
"usage": {
"month_requests": 1850,
"month_invoices": 47,
"invoice_limit": 200,
"cuits_configured": 1,
"cuit_limit": 2
},
"environment": "production",
"cuits": ["20359403616"],
"suspended_cuits": []
}
}Health check
/api/v1/healthPúblicaVerifica que la API esté online. Endpoint público (sin auth).
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/health{
"success": true,
"data": {
"status": "ok",
"version": "1.0.0",
"timestamp": "2026-05-30T22:10:33.000Z"
}
}Listar planes disponibles
/api/v1/plansPúblicaLista los 5 planes públicos con precios, límites y features reales. Endpoint público (sin auth).
Este endpoint no requiere parámetros.
curl https://api.lafactureadora.com.ar/api/v1/plans{
"success": true,
"data": {
"plans": [
{ "id": "free", "name": "Gratis", "price": 0, "invoicesPerMonth": 10, "maxCuits": 1, "features": ["production", "chat_support"] },
{ "id": "emprendedor", "name": "Emprendedor", "price": 6990, "invoicesPerMonth": 50, "maxCuits": 1, "features": ["production", "pdf_qr", "clients", "chat_support"] },
{ "id": "profesional", "name": "Profesional", "price": 14990, "invoicesPerMonth": 200, "maxCuits": 2, "features": ["production", "pdf_qr", "clients", "api_access", "chat_support"] },
{ "id": "empresa", "name": "Empresa", "price": 29990, "invoicesPerMonth": 500, "maxCuits": 5, "features": ["production", "pdf_qr", "clients", "api_access", "chat_support"] },
{ "id": "corporativo", "name": "Corporativo", "price": 49990, "invoicesPerMonth": 1500, "maxCuits": 10, "features": ["production", "pdf_qr", "clients", "api_access", "chat_support"] }
]
}
}Tipos de comprobante
Códigos AFIP/ARCA aceptados en el campo tipo_comprobante al emitir facturas.
| Código | Tipo |
|---|---|
| 1 | Factura A |
| 6 | Factura B |
| 11 | Factura C |
| 3 | Nota de Crédito A |
| 8 | Nota de Crédito B |
| 13 | Nota de Crédito C |
| 2 | Nota de Débito A |
| 7 | Nota de Débito B |
| 12 | Nota de Débito C |
| 4 | Recibo A |
| 9 | Recibo B |
| 15 | Recibo C |
| 201 | FCE MiPyMEs Factura A |
| 206 | FCE MiPyMEs Factura B |
| 211 | FCE MiPyMEs Factura C |
Códigos de error
Todas las respuestas de error siguen el mismo formato:
{
"success": false,
"error": {
"code": "INVALID_CUIT",
"message": "Dígito verificador inválido",
"details": { ... }
}
}| HTTP | Código | Descripción |
|---|---|---|
| 400 | BAD_REQUEST | Datos de entrada inválidos o faltantes. |
| 400 | INVALID_CUIT | CUIT no pasa validación módulo 11. |
| 400 | MISSING_CUIT | Falta el campo cuit requerido. |
| 400 | CLASE_A_REQUIRES_CUIT | Factura/NC/ND/Recibo/FCE Clase A requieren receptor con CUIT (tipo_documento 80). |
| 400 | CLASE_A_REQUIRES_RI | Receptor de Clase A debe ser Responsable Inscripto (condicion_iva 1 o 11). |
| 400 | INVALID_DOC_NUMBER | cliente.numero_documento no cumple el formato esperado para ese tipo_documento (CUIT/CUIL/CDI 11 dígitos, DNI 7-8). |
| 400 | INVALID_DOC_CHECKSUM | CUIT/CUIL/CDI del receptor no pasa validación módulo 11. |
| 400 | INVALID_DATE_FORMAT | Las fechas de servicio no respetan el formato yyyy-mm-dd. |
| 400 | INVALID_DATE | Una fecha de servicio no es válida (ej. 2026-02-30). |
| 400 | DATE_RANGE_INVALID | fecha_servicio_desde > fecha_servicio_hasta, o fecha_vencimiento_pago < fecha_servicio_desde. |
| 401 | MISSING_API_KEY | No se envió API key ni token. |
| 401 | INVALID_API_KEY | API key inválida, expirada o revocada. |
| 401 | MISSING_TOKEN | No se envió header Authorization. |
| 401 | TOKEN_EXPIRED | Firebase token expirado. |
| 401 | INVALID_TOKEN | Token malformado o inválido. |
| 401 | USER_NOT_FOUND | Usuario no existe en el sistema. |
| 401 | USER_INACTIVE | Cuenta de usuario desactivada. |
| 403 | CUIT_NOT_AUTHORIZED | CUIT no pertenece a tu cuenta. |
| 403 | CUIT_LIMIT_EXCEEDED | Límite de CUITs del plan alcanzado. |
| 403 | TEST_KEY_PRODUCTION | Key de test usada para ambiente producción. |
| 403 | METHOD_NOT_ALLOWED_HERE | Método SOAP bloqueado en /afip/:service/:method (usa /invoices para emitir). |
| 404 | NOT_FOUND | Recurso no encontrado. |
| 409 | CERT_ALREADY_VALIDATED | No se puede limpiar pending si ya hay cert validado activo (usa /regenerate). |
| 429 | RATE_LIMIT_EXCEEDED | Límite de requests por minuto excedido. |
| 429 | INVOICE_QUOTA_EXCEEDED | Límite mensual de facturas del plan alcanzado. |
| 429 | CHAT_RATE_LIMIT | /chat: 20 mensajes/min/IP alcanzado. |
| 429 | CHAT_RATE_LIMIT_HOUR | /chat: 200 mensajes/hora/IP alcanzado. |
| 500 | SERVER_ERROR | Error interno del servidor. |
| 502 | AFIP_ERROR | Error de comunicación con servidores AFIP/ARCA. |
Rate limits & cuotas
La API aplica tres niveles de límite: global por IP, por plan/key, y cuota mensual de facturas.
Global por IP
200 / 15min
Anti-abuso, aplica a todos.
/chat (público)
20/min · 200/hora
Por IP.
Dashboard
Sin rate
Firebase Token skip rate-limit por plan.
Por plan (API Keys)
| Plan | Precio | Rate limit | Facturas/mes | CUITs |
|---|---|---|---|---|
| Gratis | $0 | 10 req/min | 10 | 1 |
| Emprendedor | $6.990 | 30 req/min | 50 | 1 |
| Profesional | $14.990 | 100 req/min | 200 | 2 |
| Empresa | $29.990 | 200 req/min | 500 | 5 |
| Corporativo | $49.990 | 500 req/min | 1.500 | 10 |
Headers de respuesta
| Header | Descripción |
|---|---|
| RateLimit-Limit | Límite máximo en la ventana. |
| RateLimit-Remaining | Requests restantes en la ventana. |
| X-RateLimit-Limit | Límite específico de la API key (por plan). |
| X-RateLimit-Remaining | Restantes de la API key. |
| X-Invoice-Quota-Warning | Aparece al usar 80%+ de la cuota mensual. |
| X-Request-Id | ID único de la request (útil para soporte). |