Saltar al contenido principal

Exportar venta BETA

Endpoints en 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.

GETBETA/integraciones/terceros/exportar/ventaitems/paginado

Query parameters

ParámetroTipoRequeridoDescripción
sucursalIdnumberID de la sucursal a exportar
desde + hastastringUno de los tres gruposRango de fechas en formato YYYY-MM-DD. Máximo 30 días entre desde y hasta
fechastringUno de los tres gruposFecha específica YYYY-MM-DD (equivale a desde=fecha&hasta=fecha)
anio + messtringUno de los tres gruposAño YYYY y mes MM. Exporta el mes completo sin límite de 30 días
incluirMediosPagobooleanNoSi es true, incluye detalle de medios de pago (resuelto sobre los FacturaIds de la página). Omitir equivale a false
pagenumberNoNúmero de página base 1. Default 1
pageSizenumberNoTamañ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.

Límite de 30 días para el rango desde/hasta

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.

GETBETA/integraciones/terceros/exportar/ventaitems

Query parameters

ParámetroTipoRequeridoDescripción
sucursalIdnumberID de la sucursal a exportar
desde + hastastringUno de los tres gruposRango de fechas en formato YYYY-MM-DD. Máximo 30 días
fechastringUno de los tres gruposFecha específica YYYY-MM-DD
anio + messtringUno de los tres gruposAño YYYY y mes MM
incluirMediosPagobooleanNoSi 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.

Límites de este endpoint
  • 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=..."
Reintento en rate limit (HTTP 403)

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