Exportar venta BETA
Pueden cambiar de contrato, comportamiento o ser retirados antes de su release definitivo.
Exportan los ítems de ventas realizadas en un período. Útiles para sincronizar movimientos de venta hacia un sistema de BI, contabilidad o ERP externo.
Hay dos variantes: el endpoint paginado (recomendado para automatizaciones y meses completos) y el endpoint no paginado (útil para días o rangos cortos explorados interactivamente).
Exportar ventas paginado Recomendado
Trae los ítems de a páginas chicas (OFFSET/FETCH) para evitar timeouts por volumen.
Usá este endpoint para automatizaciones y batches desatendidos.
/integraciones/terceros/exportar/ventaitems/paginadoQuery parameters
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sucursalId | number | Sí | ID de la sucursal a exportar |
desde + hasta | string | Uno de los tres grupos | Rango de fechas en formato YYYY-MM-DD. Máximo 30 días entre desde y hasta |
fecha | string | Uno de los tres grupos | Fecha específica YYYY-MM-DD (equivale a desde=fecha&hasta=fecha) |
anio + mes | string | Uno de los tres grupos | Año YYYY y mes MM. Exporta el mes completo sin límite de 30 días |
incluirMediosPago | boolean | No | Si es true, incluye detalle de medios de pago (resuelto sobre los FacturaIds de la página). Omitir equivale a false |
page | number | No | Número de página base 1. Default 1 |
pageSize | number | No | Tamaño de página. Default 25, máximo 500 (valores mayores se recortan a 500) |
Se requiere exactamente uno de los tres grupos de período, además de sucursalId.
Precedencia cuando se envían varios: desde+hasta > fecha > anio+mes.
Si enviás desde y hasta, el rango no puede superar los 30 días. Para períodos mayores,
usá anio+mes (que exporta el mes completo) o paginá en ventanas de 30 días.
Respuesta
export interface VentaItemsPaginadoResult {
items: VentaItem[];
totalRegistros: number; // total de ítems del período (una fila por ítem de comprobante)
totalPaginas: number;
paginaActual: number;
pageSize: number;
}
Para recorrer todo el período: pedí page=1, leé totalPaginas en la respuesta y continuá
con page=2, 3, … hasta completar. El orden es estable entre páginas (sin solapamiento).
Rate limiting
Bucket propio y corto, separado del de exportaciones masivas: 30 segundos en producción (3 segundos en test). Pensado para poder recorrer todas las páginas de corrido sin chocar con la ventana de 10 minutos del resto de exportaciones.
Ejemplos
# Primera página (50 ítems) de un mes completo, con medios de pago
curl --request GET \
--url 'https://api.test-ninox.com.ar/integraciones/terceros/exportar/ventaitems/paginado?sucursalId=1&anio=2026&mes=04&page=1&pageSize=50&incluirMediosPago=true' \
--header 'X-NX-TOKEN: {TU_TOKEN}'
# Página siguiente
curl --request GET \
--url 'https://api.test-ninox.com.ar/integraciones/terceros/exportar/ventaitems/paginado?sucursalId=1&anio=2026&mes=04&page=2&pageSize=50' \
--header 'X-NX-TOKEN: {TU_TOKEN}'
# Rango de 15 días (desde/hasta), primera página
curl --request GET \
--url 'https://api.test-ninox.com.ar/integraciones/terceros/exportar/ventaitems/paginado?sucursalId=1&desde=2026-06-01&hasta=2026-06-15&page=1&pageSize=100' \
--header 'X-NX-TOKEN: {TU_TOKEN}'
Exportar ventas
Descarga todos los ítems del período en un único response JSON. Tiene un tope de 10.000 ítems por request. Para volúmenes mayores o automatizaciones, usá el endpoint paginado de arriba.
/integraciones/terceros/exportar/ventaitemsQuery parameters
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sucursalId | number | Sí | ID de la sucursal a exportar |
desde + hasta | string | Uno de los tres grupos | Rango de fechas en formato YYYY-MM-DD. Máximo 30 días |
fecha | string | Uno de los tres grupos | Fecha específica YYYY-MM-DD |
anio + mes | string | Uno de los tres grupos | Año YYYY y mes MM |
incluirMediosPago | boolean | No | Si es true, incluye el detalle de medios de pago por venta. Omitir equivale a false |
Precedencia cuando se envían varios grupos: desde+hasta > fecha > anio+mes.
- Rango
desde/hasta: no puede superar los 30 días (HTTP 400 si se excede). - Tope de registros: el servidor hace un
COUNT(*)previo. Si el período supera 10.000 ítems, devuelve HTTP 400 indicando que uses el endpoint paginado. Esta validación no genera alertas internas (no es un error del sistema).
Respuesta
Devuelve un array de VentaItem (una fila por ítem de comprobante; un comprobante con
varias líneas genera varias filas).
export interface VentaItem {
facturaId: number;
comprobanteTipo: number; // enum ComprobanteTipo
tipoDocumento: number; // enum TipoDocumento
fecha: string; // fecha+hora del comprobante
fechaText: string; // "YYYY-MM-DD"
horaText: string; // "HH:mm:ss"
numeroFull: string; // ej. "0001-00000041"
sucursalId: number;
sucursal: string;
appId?: number; // canal/app de origen, si aplica
app?: string; // nombre del canal (solo con incluirApps)
cliente: string;
vendedor?: string;
detalle?: string; // observación del comprobante
codigo: string; // código del artículo
descripcion: string;
talle?: string;
color?: string;
cantidad: number;
costoItem: number;
costoArticulo: number;
precioVenta: number;
precioVentaFinal: number;
precioLista1: number;
precioLista2: number;
formasPagoText?: string; // solo con incluirMediosPago
formasPago?: VentaFormaPago[]; // solo con incluirMediosPago
}
export interface VentaFormaPago {
facturaId: number;
tipo: number; // enum TipoMedio
tipoText: string; // ej. "Efectivo", "Cuenta Corriente"
detalle?: string;
importe: number;
}
Rate limiting
Bucket compartido de exportaciones: 10 minutos en producción (3 minutos en test).
Ejemplos
# Exportar ventas de un día específico
curl --request GET \
--url 'https://api.test-ninox.com.ar/integraciones/terceros/exportar/ventaitems?sucursalId=1&fecha=2026-05-07' \
--header 'X-NX-TOKEN: {TU_TOKEN}'
# Exportar ventas de un mes completo con medios de pago
curl --request GET \
--url 'https://api.test-ninox.com.ar/integraciones/terceros/exportar/ventaitems?sucursalId=1&anio=2026&mes=04&incluirMediosPago=true' \
--header 'X-NX-TOKEN: {TU_TOKEN}'
# Exportar ventas de un rango de 7 días
curl --request GET \
--url 'https://api.test-ninox.com.ar/integraciones/terceros/exportar/ventaitems?sucursalId=1&desde=2026-06-01&hasta=2026-06-07' \
--header 'X-NX-TOKEN: {TU_TOKEN}'
Automatización con cron
Para sincronizar ventas de forma periódica sin intervención manual, la estrategia recomendada es un job que corra diariamente y llame al endpoint paginado recorriendo todas las páginas.
#!/bin/bash
# sync-ventas.sh — sincroniza ventas del dia anterior con ventana de 30 s entre páginas
SUCURSAL_ID=1
TOKEN="tu_token_aqui"
BASE_URL="https://api.test-ninox.com.ar"
# Fecha de ayer en YYYY-MM-DD
FECHA=$(date -d "yesterday" +%Y-%m-%d)
PAGE=1
TOTAL_PAGINAS=1
while [ "$PAGE" -le "$TOTAL_PAGINAS" ]; do
RESPONSE=$(curl --silent --request GET \
--url "${BASE_URL}/integraciones/terceros/exportar/ventaitems/paginado?sucursalId=${SUCURSAL_ID}&fecha=${FECHA}&page=${PAGE}&pageSize=200" \
--header "X-NX-TOKEN: ${TOKEN}")
TOTAL_PAGINAS=$(echo "$RESPONSE" | jq '.totalPaginas')
echo "Página $PAGE / $TOTAL_PAGINAS procesada"
# Aquí: parsear $RESPONSE e insertar en tu sistema destino
PAGE=$((PAGE + 1))
# Respetar el rate limit: esperar 35 s entre páginas en producción (bucket 30 s)
if [ "$PAGE" -le "$TOTAL_PAGINAS" ]; then
sleep 35
fi
done
echo "Sync de ventas $FECHA completado"
Para meses completos, reemplazá el parámetro fecha por anio y mes:
# Mes completo: anio + mes (sin límite de 30 días, sin tope de 10.000 registros)
ANIO=2026
MES=06
URL="${BASE_URL}/integraciones/terceros/exportar/ventaitems/paginado?sucursalId=${SUCURSAL_ID}&anio=${ANIO}&mes=${MES}&page=..."
Si recibís HTTP 403 con texto "Debe esperar N segundos entre cada solicitud", el job
llegó antes de que expire la ventana. Esperá el tiempo indicado y reintentar.
Ver también
- Listado paginado de clientes — recorrer clientes de a páginas.
- Esquema de datos — contratos completos.