Saltar al contenido principal

Consultar comprobantes

GET /:id-empresa/invoices

Devuelve los comprobantes del entorno de tu API Key, con filtros, ordenamiento y paginado. Una clave TEST_ nunca ve comprobantes de producción, ni al revés.

curl "https://nanofactura.com/api/mi-empresa/invoices?date__gte=20260801&ordering=-date&limit=50" \
-H "Authorization: Bearer PROD_tu_api_key"

Filtros

El estilo es ?campo=valor o ?campo__operador=valor, y todos se combinan con AND.

Todos los campos aceptan todos los operadores. Lo que cambia entre uno y otro no es qué podés pedir, sino qué tan rápido responde: algunos filtros van directo por índice y otros obligan a recorrer tus comprobantes. La columna Búsqueda lo dice.

CampoTipoCorresponde aBúsqueda
idIntegerIdentificador internoDirecta
caeStringCAEDirecta
idempotencyStringClave de idempotenciaDirecta
externalReferenceStringTu identificador del sistema externoDirecta
dateStringFecha fiscal YYYYMMDD (voucherDate)Directa, ideal por rango
createdStringMomento de la emisión, ISO 8601Directa, ideal por rango
posIntegerPunto de venta (posNumber)Directa
numberIntegerNúmero de comprobante (voucherNumber)Directa si va con pos
docTypeIntegerTipo de documento del receptorDirecta
docNumberStringDocumento del receptorDirecta si va con docType
typeIntegerTipo de comprobante (voucherType)Recorrido
totalNumberImporte totalRecorrido
statusStringAPPROVEDRecorrido
sourceStringapi, app (app web) o rcel (Comprobantes en Línea de ARCA)Recorrido
apiKeyIdIntegerAPI Key que lo emitióRecorrido
userEmailStringUsuario que lo emitió desde la appRecorrido

Operadores

OperadorSignificadoEjemplo
(ninguno)Igual?status=APPROVED
__gtMayor que?total__gt=1000
__gteMayor o igual?date__gte=20260101
__ltMenor que?total__lt=50000
__lteMenor o igual?date__lte=20260131
__inDentro de una lista, separada por comas?type__in=1,6,11

Cualquier otro sufijo (__contains, __startswith, __ne…) no existe y se ignora.

Cómo consultar rápido

Para buscar por documento, mandá también docType

?docNumber=35888999 funciona, pero recorre tus comprobantes. ?docType=96&docNumber=35888999 va directo.

El motivo es que los dos campos se indexan juntos, en ese orden: sin el tipo de documento no hay por dónde entrar. Lo mismo pasa con number, que va indexado junto a pos: ?pos=1&number=45 es directo, ?number=45 solo no.

En la práctica no cuesta nada: el docType lo tenés siempre, porque es un dato que ya mandaste al emitir.

Combiná siempre un filtro de recorrido con uno directo. Si querés "las notas de crédito de agosto", pedí ?date__gte=20260801&date__lte=20260831&type__in=3,8,13: el rango de fechas acota primero y el tipo filtra sobre eso. Un ?type=13 solo tiene que mirar todos tus comprobantes.

Los campos desconocidos se ignoran en silencio

Un filtro mal escrito no da error: simplemente no filtra, y recibís más resultados de los que esperabas. Verificá los nombres contra esta tabla.

Vale también para los valores: ?limit=abc cae al valor por defecto en vez de fallar.

Orden y paginado

ParámetroPor defectoDescripción
ordering-idCampos separados por coma; el prefijo - invierte. Ej. ?ordering=-date,total
limit50Máximo 200
offset0Desplazamiento

Respuesta

{
"ok": true,
"total": 1284,
"result": [
{
"id": 1485,
"voucherType": 11,
"posNumber": 1,
"voucherNumber": 45,
"voucherDate": "20260613",
"docType": 96,
"docNumber": "35888999",
"totalAmount": "142500",
"cae": "76251489623547",
"caeExpirationDate": "20260623",
"status": "APPROVED",
"production": true,
"currency": "PES",
"currencyQuotation": 1,
"externalReference": "EXT-ORD-99882",
"idempotency": "b6f0…",
"apiKeyId": 3,
"userEmail": null,
"source": "api",
"created": "2026-06-13T14:22:09.481Z",
"hasPdf": true,
"customer": { },
"items": [ ],
"vat": [ ],
"emails": [ ]
}
]
}

total es la cantidad que matchea el filtro, no la de la página: es lo que te permite paginar sin depender de que la página vuelva llena.

Cada fila trae el payload completo del comprobante (customer, items, tributes, vat, emails, legend, additionalData) desplegado al mismo nivel. hasPdf indica si la generación en segundo plano ya terminó.

totalAmount y currencyQuotation vienen como string

Son columnas numéricas de precisión fija y viajan como string para no perder decimales al serializarlas. Convertilas antes de operar: en JavaScript suma + fila.totalAmount concatena en vez de sumar, y en Python sum(...) corta con TypeError. Usá Number(...), float(...) o (float).

Recetas

Buscar por tu propio identificador
GET /:id-empresa/invoices?externalReference=EXT-ORD-99882
Facturación de un mes
GET /:id-empresa/invoices?date__gte=20260801&date__lte=20260831&ordering=date
Todo lo emitido a un cliente (con docType, para que vaya directo)
GET /:id-empresa/invoices?docType=96&docNumber=35888999&ordering=-date
Un comprobante puntual: el 0001-00000045
GET /:id-empresa/invoices?pos=1&number=45
Notas de crédito de un mes (el rango acota primero)
GET /:id-empresa/invoices?date__gte=20260801&date__lte=20260831&type__in=3,8,13
Lo que emitió una API Key, acotado por fecha
GET /:id-empresa/invoices?created__gte=2026-08-01&apiKeyId=3&ordering=-created
date y created no son lo mismo

date es la fecha fiscal del comprobante, la que declaraste al emitir. created es cuándo se emitió realmente. Para conciliar con tu sistema usá created; para reportes fiscales, date.

Verlos en la app

Los mismos comprobantes están en la aplicación web, en:

https://asistentefacturaelectronica.com/app/comprobantes/<id-empresa>

Los de homologación no se ven por defecto

Si emitiste con una clave TEST_, activá la vista de homologación en el listado. Sin eso sólo se muestran los comprobantes fiscales.

Bitácora de la empresa

GET /:id-empresa/audit-log

Registra las mutaciones administrativas —puntos de venta, API keys, certificados, datos fiscales— con qué se hizo, sobre qué, cuándo y quién. Es de sólo lectura.

Usa los mismos operadores, orden y paginado que el listado de comprobantes, pero con su propio conjunto de campos:

CampoTipoCorresponde aBúsqueda
actionStringQué se hizo: pos.create, apikey.create, invoice.pdf.regenerateDirecta
resourceIdStringSobre qué recursoDirecta si va con action
actorTypeStringuser, apikey, admin o systemRecorrido
actorEmailStringEmail del usuario que lo hizoRecorrido
actorApiKeyIdIntegerAPI Key que lo hizoRecorrido
createdStringMomento, ISO 8601Recorrido

Igual que en los comprobantes, resourceId se indexa junto a action: ?action=invoice.pdf.regenerate&resourceId=1485 va directo, ?resourceId=1485 solo no.

La ventana de 90 días acota todo

La consulta devuelve siempre los últimos 90 días y ese corte se aplica primero, así que hasta un filtro de recorrido trabaja sobre una porción chica.

Es una ventana fija: no se puede ampliar desde el query, y un created__lte más viejo no la corre hacia atrás.

La emisión de comprobantes no aparece acá: cada comprobante ya guarda su apiKeyId y su userEmail, y se consulta con GET /invoices.