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.
| Campo | Tipo | Corresponde a | Búsqueda |
|---|---|---|---|
id | Integer | Identificador interno | Directa |
cae | String | CAE | Directa |
idempotency | String | Clave de idempotencia | Directa |
externalReference | String | Tu identificador del sistema externo | Directa |
date | String | Fecha fiscal YYYYMMDD (voucherDate) | Directa, ideal por rango |
created | String | Momento de la emisión, ISO 8601 | Directa, ideal por rango |
pos | Integer | Punto de venta (posNumber) | Directa |
number | Integer | Número de comprobante (voucherNumber) | Directa si va con pos |
docType | Integer | Tipo de documento del receptor | Directa |
docNumber | String | Documento del receptor | Directa si va con docType |
type | Integer | Tipo de comprobante (voucherType) | Recorrido |
total | Number | Importe total | Recorrido |
status | String | APPROVED | Recorrido |
source | String | api, app (app web) o rcel (Comprobantes en Línea de ARCA) | Recorrido |
apiKeyId | Integer | API Key que lo emitió | Recorrido |
userEmail | String | Usuario que lo emitió desde la app | Recorrido |
Operadores
| Operador | Significado | Ejemplo |
|---|---|---|
| (ninguno) | Igual | ?status=APPROVED |
__gt | Mayor que | ?total__gt=1000 |
__gte | Mayor o igual | ?date__gte=20260101 |
__lt | Menor que | ?total__lt=50000 |
__lte | Menor o igual | ?date__lte=20260131 |
__in | Dentro 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
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.
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ámetro | Por defecto | Descripción |
|---|---|---|
ordering | -id | Campos separados por coma; el prefijo - invierte. Ej. ?ordering=-date,total |
limit | 50 | Máximo 200 |
offset | 0 | Desplazamiento |
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 stringSon 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
GET /:id-empresa/invoices?externalReference=EXT-ORD-99882
GET /:id-empresa/invoices?date__gte=20260801&date__lte=20260831&ordering=date
GET /:id-empresa/invoices?docType=96&docNumber=35888999&ordering=-date
GET /:id-empresa/invoices?pos=1&number=45
GET /:id-empresa/invoices?date__gte=20260801&date__lte=20260831&type__in=3,8,13
GET /:id-empresa/invoices?created__gte=2026-08-01&apiKeyId=3&ordering=-created
date y created no son lo mismodate 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>
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:
| Campo | Tipo | Corresponde a | Búsqueda |
|---|---|---|---|
action | String | Qué se hizo: pos.create, apikey.create, invoice.pdf.regenerate… | Directa |
resourceId | String | Sobre qué recurso | Directa si va con action |
actorType | String | user, apikey, admin o system | Recorrido |
actorEmail | String | Email del usuario que lo hizo | Recorrido |
actorApiKeyId | Integer | API Key que lo hizo | Recorrido |
created | String | Momento, ISO 8601 | Recorrido |
Igual que en los comprobantes, resourceId se indexa junto a action: ?action=invoice.pdf.regenerate&resourceId=1485 va directo, ?resourceId=1485 solo no.
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.