API Reference
Todo lo que necesitas para integrar facturación electrónica ARCA/AFIP en tu aplicación.
Base URL
https://api-lgp2waq3ba-uc.a.run.appInicio rápido
Emití tu primera factura en 3 pasos.
1. Obtené tu API key
Registrate y genera una API key desde el dashboard. Las keys de test empiezan con lf_test_ y las de producción con lf_live_.
2. Configura tu certificado AFIP/ARCA
Genera un CSR, subilo a AFIP/ARCA, y luego subi el certificado firmado. Ver seccion Certificados.
3. Emiti una factura
curl -X POST https://api-lgp2waq3ba-uc.a.run.app/api/v1/invoices \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"cuit": "20359403616",
"punto_venta": 1,
"ambiente": "testing",
"tipo_comprobante": 11,
"concepto": 1,
"cliente": {
"tipo_documento": 96,
"número_documento": "12345678",
"razon_social": "Juan Perez"
},
"items": [{
"descripción": "Servicio de desarrollo web",
"cantidad": 1,
"precio_unitario": 50000
}]
}'Respuesta exitosa
{
"success": true,
"data": {
"cae": "75044220307741",
"cae_vencimiento": "20260405",
"número_comprobante": 12,
"tipo_comprobante": 11,
"punto_venta": 1,
"fecha": "2026-03-26",
"total": 50000,
"neto": 50000,
"iva": 0,
"qr_data": "https://www.afip.gob.ar/fe/qr/?p=...",
"emisor": {
"cuit": "20359403616",
"razon_social": "Mi Empresa SRL",
"punto_venta": 1
},
"cliente": {
"tipo_documento": 96,
"número_documento": "12345678",
"razon_social": "Juan Perez"
}
}
}Autenticacion
La API soporta dos métodos de autenticación. Los endpoints públicos (/health, /plans, /billing/webhook) no requieren auth.
Opcion 1: API Key (recomendada para integraciones)
# Via Authorization header
Authorization: Bearer lf_live_tu_api_key
# O via X-API-Key header
X-API-Key: lf_live_tu_api_keyOpcion 2: Firebase ID Token (usado por el dashboard)
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...Ambientes y keys
ambiente: "testing". Las facturas no tienen validez fiscal.lf_test_ forzara ambiente: "testing" en todos los requests, sin importar lo que envies. Usar una key de test con ambiente: "production" retorna error TEST_KEY_PRODUCTION.Facturas
Emision y consulta de comprobantes electronicos AFIP/ARCA.
/api/v1/invoicesEmite una factura electrónica y obtiene el CAE de AFIP/ARCA.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT del emisor (11 digitos). Debe estar configurado en tu cuenta. |
| punto_venta | number | Si | Punto de venta (1-99999). |
| tipo_comprobante | number | No | Tipo de comprobante AFIP/ARCA. Default: 11 (Factura C). Ver tabla abajo. |
| concepto | number | No | 1: Productos, 2: Servicios, 3: Productos y Servicios. Default: 1. |
| ambiente | string | No | "testing" o "production". Default: segun la key usada. |
| 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 credito, 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)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| tipo_documento | number | Si | 80: CUIT, 86: CUIL, 96: DNI, 94: Pasaporte, 99: Consumidor Final. |
| número_documento | string | Si | Numero del documento del receptor. |
| razon_social | string | Si | Nombre o razon social del receptor. |
| domicilio | string | No | Direccion del receptor. |
| string | No | Email del receptor. | |
| condicion_iva | number | No | 1: Resp. Inscripto, 4: Exento, 5: Cons. Final, 6: Monotributista. Default: 5. |
Body > items[] (array, requerido, min. 1)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| descripción | string | Si | Descripción del item. |
| cantidad | number | No | Cantidad. Default: 1. |
| precio_unitario | number | Si | 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. Default: 0. |
| gravado | boolean | No | Si el item esta gravado con IVA. Default: true. |
Body > comprobante_asociado (objeto, solo NC/ND)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| tipo | number | Si | Tipo del comprobante original. |
| punto_venta | number | Si | PV del comprobante original. |
| número | number | Si | Numero del comprobante original. |
| cuit | string | No | CUIT del emisor original. |
| fecha | string | No | Fecha del comprobante original. |
Body > tributos[] (array, opcional)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| id | number | Si | ID del tributo AFIP/ARCA. |
| descripción | string | No | Descripción del tributo. |
| base_imponible | number | No | Base imponible. |
| alicuota | number | No | Alicuota del tributo. |
| importe | number | No | Importe del tributo. |
Tipos de comprobante comunes
| Código | Descripción |
|---|---|
| 1 | Factura A |
| 6 | Factura B |
| 11 | Factura C |
| 3 | Nota de Credito A |
| 8 | Nota de Credito B |
| 13 | Nota de Credito C |
| 2 | Nota de Debito A |
| 7 | Nota de Debito B |
| 12 | Nota de Debito C |
Respuesta exitosa (201)
{
"success": true,
"data": {
"cae": "75044220307741",
"cae_vencimiento": "20260405",
"número_comprobante": 12,
"tipo_comprobante": 11,
"punto_venta": 1,
"fecha": "2026-03-26",
"total": 50000,
"neto": 50000,
"iva": 0,
"tributos": 0,
"qr_data": "https://www.afip.gob.ar/fe/qr/?p=...",
"emisor": {
"cuit": "20359403616",
"razon_social": "Mi Empresa SRL",
"punto_venta": 1
},
"cliente": {
"tipo_documento": 96,
"número_documento": "12345678",
"razon_social": "Juan Perez"
}
}
}Ejemplo con IVA (Factura A)
{
"cuit": "20359403616",
"punto_venta": 1,
"tipo_comprobante": 1,
"concepto": 1,
"cliente": {
"tipo_documento": 80,
"número_documento": "30712345678",
"razon_social": "Empresa SA",
"condicion_iva": 1
},
"items": [
{
"descripción": "Licencia software mensual",
"cantidad": 1,
"precio_unitario": 100000,
"alicuota_iva": 21
},
{
"descripción": "Soporte tecnico",
"cantidad": 10,
"precio_unitario": 5000,
"alicuota_iva": 21
}
]
}Ejemplo Nota de Credito
{
"cuit": "20359403616",
"punto_venta": 1,
"tipo_comprobante": 13,
"concepto": 1,
"cliente": {
"tipo_documento": 96,
"número_documento": "12345678",
"razon_social": "Juan Perez"
},
"comprobante_asociado": {
"tipo": 11,
"punto_venta": 1,
"número": 12
},
"items": [{
"descripción": "Anulacion factura 0001-00000012",
"cantidad": 1,
"precio_unitario": 50000
}]
}/api/v1/invoicesLista las facturas emitidas. Paginado y con filtros opcionales.
Query parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | No | Filtrar por CUIT emisor. |
| ambiente | string | No | "testing" o "production". |
| limit | number | No | Resultados por pagina. Default: 50. |
| offset | number | No | Offset para paginacion. Default: 0. |
Ejemplo
curl "https://api-lgp2waq3ba-uc.a.run.app/api/v1/invoices?cuit=20359403616&limit=10" \
-H "Authorization: Bearer lf_test_tu_api_key"Respuesta (200)
{
"success": true,
"data": {
"invoices": [
{
"id": "abc123",
"cuit_emisor": "20359403616",
"ambiente": "testing",
"tipo_comprobante": 11,
"punto_venta": 1,
"número_comprobante": 12,
"cae": "75044220307741",
"cae_vencimiento": "20260405",
"total": 50000,
"neto": 50000,
"iva": 0,
"cliente": {
"tipo_documento": 96,
"número_documento": "12345678",
"razon_social": "Juan Perez"
},
"items": [...],
"fecha_emision": "2026-03-26",
"created_at": "2026-03-26T15:30:00Z"
}
],
"count": 1
}
}/api/v1/invoices/last-authorizedConsulta el último número de comprobante autorizado en AFIP/ARCA para un punto de venta y tipo.
Query parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT del emisor. |
| punto_venta | number | Si | Punto de venta. |
| tipo_comprobante | number | Si | Tipo de comprobante. |
| ambiente | string | No | "testing" o "production". |
Respuesta (200)
{
"success": true,
"data": {
"CbteNro": 12,
"PtoVta": 1,
"CbteTipo": 11
}
}/api/v1/invoices/queryConsulta un comprobante específico en AFIP/ARCA por su número.
Query parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT del emisor. |
| punto_venta | number | Si | Punto de venta. |
| tipo_comprobante | number | Si | Tipo de comprobante. |
| número | number | Si | Numero del comprobante. |
| ambiente | string | No | "testing" o "production". |
Respuesta (200)
{
"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"
}
}
}
}/api/v1/invoices/typesLista los tipos de comprobante habilitados para el CUIT en AFIP/ARCA.
Query parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT del emisor. |
| ambiente | string | No | "testing" o "production". |
Respuesta (200)
{
"success": true,
"data": [
{ "id": 1, "desc": "Factura A" },
{ "id": 6, "desc": "Factura B" },
{ "id": 11, "desc": "Factura C" },
...
]
}/api/v1/invoices/:id/pdfGenera el PDF de una factura con formato AFIP/ARCA y código QR.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT del emisor. |
| punto_venta | number | Si | Punto de venta. |
| tipo_comprobante | number | Si | Tipo de comprobante. |
| número | number | Si | Numero del comprobante. |
| ambiente | string | No | "testing" o "production". |
| emisor | object | No | Datos del emisor: cuit, razon_social, domicilio, condicionIVA, inicioActividades. |
| cliente | object | No | Datos del receptor: documento, razonSocial. |
| items | array | No | Items con descripción, cantidad, precioUnitario, total. |
Content-Type: application/pdf y Content-Disposition: attachment.Certificados
Gestión de certificados digitales AFIP/ARCA. Los certificados son necesarios para autenticarse contra los servicios de AFIP/ARCA y emitir facturas.
Flujo de certificados
POST /certs/generate— Genera CSR + clave privada- Descargas el CSR y lo subis a AFIP/ARCA manualmente
- AFIP te devuelve un archivo
.crtfirmado POST /certs/upload— Subis el .crt para validarlo- El certificado de testing debe estar validado antes de generar el de producción
/api/v1/certs/generateGenera un CSR (Certificate Signing Request) y clave privada RSA 2048 para tu CUIT.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT (11 digitos). |
| razon_social | string | Si | Razon social o nombre. |
| condicion_iva | string | No | Condicion ante IVA. |
| domicilio_fiscal | string | No | Domicilio fiscal. |
| ambiente | string | No | "testing" o "production". Default: "testing". |
Respuesta (201)
{
"success": true,
"data": {
"csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIIC...",
"alias": "CUIT 20359403616 - testing",
"cuit": "20359403616",
"ambiente": "testing"
}
}/api/v1/certs/uploadSube el certificado .crt firmado por AFIP/ARCA y lo valida contra la clave privada guardada.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT (11 digitos). |
| certificate | string | Si | Contenido del archivo .crt en formato PEM. |
| ambiente | string | No | "testing" o "production". Default: "testing". |
Respuesta (200)
{
"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=CUIT 20359403616"
}
}
}/api/v1/certs/regenerateElimina todos los certificados de un CUIT+ambiente para poder generar uno nuevo.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT (11 digitos). |
| ambiente | string | No | "testing" o "production". Default: "testing". |
Respuesta (200)
{
"success": true,
"data": {
"message": "Se eliminaron 1 certificado(s) para CUIT 20359403616 en testing. Ahora podes generar uno nuevo.",
"cuit": "20359403616",
"ambiente": "testing"
}
}/api/v1/certs/:cuit/statusConsulta el estado actual del certificado de un CUIT.
URL parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| :cuit | string | Si | CUIT (11 digitos) en la URL. |
Respuesta (200)
{
"success": true,
"data": {
"cuit": "20359403616",
"status": "certificado_activo",
"alias": "CUIT 20359403616 - testing",
"validation": {
"valid": true,
"validFrom": "2026-03-01T00:00:00Z",
"validTo": "2028-03-01T00:00:00Z"
}
}
}sin_certificado, csr_generado, certificado_activo, certificado_vencido.API Keys
Crear, listar y revocar API keys. Las keys se muestran una sola vez al crearlas.
/api/v1/keysCrea una nueva API key.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| name | string | Si | Nombre descriptivo para la key. |
| environment | string | No | "test" o "production". Default: "test". |
Respuesta (201)
{
"success": true,
"data": {
"key": "lf_test_a1b2c3d4e5f6...",
"id": "abc123",
"name": "Mi integracion",
"key_prefix": "lf_test_a1b2c3d...",
"environment": "test",
"created_at": "2026-03-26T15:30:00Z",
"warning": "Guarda esta key de forma segura. No se puede recuperar."
}
}/api/v1/keysLista todas las API keys activas de tu cuenta.
Respuesta (200)
{
"success": true,
"data": {
"keys": [
{
"id": "abc123",
"name": "Mi integracion",
"environment": "test",
"key_prefix": "lf_test_a1b2c3d...",
"created_at": "2026-03-26T15:30:00Z",
"last_used": "2026-03-27T10:00:00Z"
}
]
}
}/api/v1/keys/:keyIdRevoca una API key. La key dejara de funcionar inmediatamente.
URL parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| :keyId | string | Si | ID de la key a revocar. |
Respuesta (200)
{
"success": true,
"data": {
"revoked": true
}
}Suscripciónes
Gestión de planes y suscripciónes via MercadoPago.
/api/v1/billing/subscribeCrea una suscripción en MercadoPago y devuelve la URL de pago.
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| plan | string | Si | "profesional" ($5.990/mes) o "empresa" ($12.990/mes). |
Respuesta (200)
{
"success": true,
"data": {
"init_point": "https://www.mercadopago.com.ar/subscriptions/checkout?preapproval_id=...",
"subscription_id": "mp_sub_abc123"
}
}/api/v1/billing/statusConsulta el plan actual y estado de la suscripción.
Respuesta (200)
{
"success": true,
"data": {
"plan": "profesional",
"subscription": {
"mp_id": "mp_sub_abc123",
"status": "authorized",
"plan_requested": "profesional",
"created_at": "2026-03-01T00:00:00Z"
}
}
}/api/v1/billing/cancelCancela la suscripción activa. El plan baja a Free inmediatamente.
Respuesta (200)
{
"success": true,
"data": {
"message": "Suscripción cancelada. Tu plan ahora es Gratis."
}
}/api/v1/billing/webhookPublicaWebhook que recibe notificaciones de MercadoPago. No llamar manualmente.
subscription_preapproval. Siempre retorna 200 OK.AFIP Genérica
Wrapper generico para llamar a cualquier servicio SOAP de AFIP/ARCA. Util para operaciones avanzadas.
/api/v1/afip/:service/describeDescribe los métodos disponibles de un servicio AFIP/ARCA.
URL parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| :service | string | Si | Nombre del servicio. Ej: "wsfev1", "wsaa". |
Ejemplo
curl "https://api-lgp2waq3ba-uc.a.run.app/api/v1/afip/wsfev1/describe" \
-H "Authorization: Bearer lf_test_tu_api_key"/api/v1/afip/:service/:methodEjecuta un metodo de un servicio AFIP con parametros custom.
URL parameters
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| :service | string | Si | Nombre del servicio. Ej: "wsfev1". |
| :method | string | Si | Nombre del metodo. Ej: "FEDummy", "FEParamGetTiposCbte". |
Body (JSON)
| Parametro | Tipo | Req. | Descripción |
|---|---|---|---|
| cuit | string | Si | CUIT del emisor. |
| ambiente | string | No | "testing" o "production". |
| params | object | No | Parametros del metodo SOAP. Default: {}. |
Ejemplo: FEDummy (test de conectividad)
curl -X POST "https://api-lgp2waq3ba-uc.a.run.app/api/v1/afip/wsfev1/FEDummy" \
-H "Authorization: Bearer lf_test_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "cuit": "20359403616" }'Respuesta (200)
{
"success": true,
"data": {
"result": {
"FeDummy": {
"AppServer": "OK",
"DbServer": "OK",
"AuthServer": "OK"
}
}
}
}Perfil
/api/v1/meDevuelve el perfil del usuario autenticado, su uso actual y CUITs configurados.
Respuesta (200)
{
"success": true,
"data": {
"user": {
"email": "usuario@ejemplo.com",
"display_name": "Juan Perez",
"company": "Mi Empresa SRL",
"plan": "profesional"
},
"usage": {
"month_requests": 150,
"month_invoices": 45,
"invoice_limit": 300,
"cuits_configured": 1,
"cuit_limit": 1
},
"environment": "testing",
"cuits": ["20359403616"]
}
}Health & Planes
/api/v1/healthPublicaHealth check. Verifica que la API este funcionando.
Respuesta (200)
{
"success": true,
"data": {
"status": "ok",
"version": "1.0.0",
"timestamp": "2026-03-26T15:30:00Z"
}
}/api/v1/plansPublicaLista los planes disponibles con precios y limites.
Respuesta (200)
{
"success": true,
"data": {
"plans": [
{
"id": "free",
"name": "Gratis",
"price": 0,
"invoicesPerMonth": 10,
"maxCuits": 1,
"features": ["testing_only", "basic_support"]
},
{
"id": "emprendedor",
"name": "Emprendedor",
"price": 6990,
"invoicesPerMonth": 50,
"maxCuits": 1,
"features": ["production", "email_support", "pdf_qr"]
},
{
"id": "profesional",
"name": "Profesional",
"price": 14990,
"invoicesPerMonth": 200,
"maxCuits": 2,
"features": ["production", "email_support", "pdf_qr", "api_access", "phone_support"]
},
{
"id": "empresa",
"name": "Empresa",
"price": 29990,
"invoicesPerMonth": 500,
"maxCuits": 5,
"features": ["production", "batch_invoicing", "pdf_custom", "webhooks", "priority_support"]
},
{
"id": "corporativo",
"name": "Corporativo",
"price": 49990,
"invoicesPerMonth": 1500,
"maxCuits": 10,
"features": ["production", "batch_invoicing", "pdf_custom", "webhooks", "dedicated_support", "api_unlimited"]
}
]
}
}Errores
Todas las respuestas de error siguen el mismo formato estandar.
{
"success": false,
"error": {
"code": "INVALID_CUIT",
"message": "Digito verificador inválido",
"details": { ... }
}
}Códigos de error
| 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 | No se envió el campo CUIT requerido |
| 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 | TEST_KEY_PRODUCTION | Key de test usada para ambiente produccion |
| 404 | NOT_FOUND | Recurso no encontrado |
| 429 | RATE_LIMIT_EXCEEDED | Límite de requests por minuto excedido |
| 429 | INVOICE_QUOTA_EXCEEDED | Límite mensual de facturas del plan alcanzado |
| 500 | SERVER_ERROR | Error interno del servidor |
| 502 | AFIP_ERROR | Error de comunicación con servidores AFIP/ARCA |
Rate Limits
La API aplica límites en tres niveles: rate limit global por IP, rate limit por plan/key, y quota mensual de facturas.
Límite global
Límites por plan
| 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 |
Protecciones activas
INVOICE_QUOTA_EXCEEDED. Al 80% se envía header de warning.CUIT_LIMIT_EXCEEDED.lf_test_ no pueden operar en producción. Devuelve TEST_KEY_PRODUCTION.Headers de respuesta
| Header | Descripción |
|---|---|
| RateLimit-Limit | Límite maximo de requests en la ventana |
| RateLimit-Remaining | Requests restantes en la ventana actual |
| X-RateLimit-Limit | Límite de la API key por plan |
| X-RateLimit-Remaining | Requests restantes de la API key |
| X-Invoice-Quota-Warning | Aparece al usar 80%+ de la cuota mensual de facturas |