Listar ventas
const url = 'https://api.posdata.so/public/v1/sales?limit=25&document_kind=pos';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.posdata.so/public/v1/sales?limit=25&document_kind=pos' \ --header 'Authorization: Bearer <token>'Permiso requerido: sales:read.
Autorización
Sección titulada «Autorización»Parámetros
Sección titulada «Parámetros»Parámetros de consulta
Sección titulada «Parámetros de consulta»El next_cursor de la página anterior, tal cual.
ISO 8601 con zona horaria. Incluye.
ISO 8601 con zona horaria. Excluye.
ISO 8601 con zona horaria. Para sincronización incremental.
Estado exacto, por ejemplo completed.
Ventas de ese cliente.
Tipo de documento pedido.
Ventas registradas en la caja desde este instante (incluye). ISO 8601 con zona horaria.
Ventas registradas en la caja antes de este instante (excluye).
Respuestas
Sección titulada «Respuestas»OK
object
Venta. Ingreso neto = total - tax - tip_amount.
object
Estado tal como lo registró el POS (completed, cancelled, open, pending…).
Documento que pidió el POS al cobrar.
Medio de pago tal como lo registró el POS (CASH, CARD, NEQUI…).
Suma de las líneas, impuestos incluidos.
Pesos colombianos (COP), entero sin decimales.
Parte del total que es impuesto.
Propina. Nunca es base gravable.
Subtotal - discount + tip_amount.
Total de un tributo en el documento, agrupado por (código, tarifa).
Línea de una venta.
object
product o una línea libre.
Puede ser fraccionaria (ventas por peso).
Precio unitario con los impuestos porcentuales incluidos.
Total de la línea con impuestos incluidos.
Impuesto cobrado en una línea, congelado al momento de la venta.
object
Código DIAN del tributo: 01 IVA, 03 ICA, 04 INC, 22 INC bolsas.
Pesos colombianos (COP), entero sin decimales.
Pesos colombianos (COP), entero sin decimales.
Resumen de un documento de la venta. El detalle está en GET /invoices/{id}.
object
electronic_invoice = factura electrónica (DIAN 1, CUFE) · pos_document = documento equivalente POS electrónico (DIAN 15, CUDE) · pos_adjustment_note = nota de ajuste del documento POS (DIAN 26) · internal_invoice = factura no electrónica.
Cuando se registró la venta en la caja (reloj de la caja). En ventas sincronizadas antes del 28-sep-2026 es la hora de llegada.
Cuando la venta llegó al servidor (una caja sin conexión la sube después).
Ejemplo
{ "object": "list", "data": [ { "object": "sale", "document_kind": "pos", "items": [ { "object": "sale_item" } ], "invoices": [ { "document_type": "electronic_invoice" } ] } ]}Petición inválida (VALIDATION_ERROR, INVALID_JSON, INVALID_CURSOR).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Sin API key válida (UNAUTHENTICATED, INVALID_API_KEY, API_KEY_REVOKED, API_KEY_EXPIRED, API_KEY_WRONG_ENVIRONMENT, ACCOUNT_INACTIVE).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Sin permiso (PLAN_REQUIRED, INSUFFICIENT_SCOPE, BROWSER_REQUESTS_NOT_ALLOWED).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Límite de peticiones (RATE_LIMITED). Respeta Retry-After.
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Error interno (INTERNAL_ERROR). Reintenta y comparte el request_id si persiste.
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}