Listar transacciones
curl --request GET \
--url https://clientapi.retailgrid.io/v1/transactionsimport requests
url = "https://clientapi.retailgrid.io/v1/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://clientapi.retailgrid.io/v1/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://clientapi.retailgrid.io/v1/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://clientapi.retailgrid.io/v1/transactions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://clientapi.retailgrid.io/v1/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.retailgrid.io/v1/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyTransacciones
Listar transacciones
Lista las transacciones de venta para su ingesta en sistemas ERP y BI.
GET
/
v1
/
transactions
Listar transacciones
curl --request GET \
--url https://clientapi.retailgrid.io/v1/transactionsimport requests
url = "https://clientapi.retailgrid.io/v1/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://clientapi.retailgrid.io/v1/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://clientapi.retailgrid.io/v1/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://clientapi.retailgrid.io/v1/transactions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://clientapi.retailgrid.io/v1/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.retailgrid.io/v1/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyDevuelve las transacciones de venta visibles para tu clave de API, con los cambios más recientes al final. Combínalo con Listar productos para montar una vista de catálogo más ventas en tu almacén de datos sin pasar por el flujo de exportación CSV de la aplicación.
Consulta Convenciones para el formato de números y marcas de tiempo.
Autenticación
Token Bearer. Consulta Autenticación.Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
limit | integer | No | Tamaño de página, por defecto 1000, máximo 10000. Omítelo en una continuación para reutilizar el tamaño de la página original. |
cursor | string | No | Cursor de paginación opaco devuelto como next_cursor en la respuesta anterior. |
updated_since | string (ISO-8601) | No | Devuelve solo las transacciones modificadas en o después de esta marca de tiempo. Úsalo para sincronizaciones incrementales. |
Los filtros por rango de fechas y por producto o tienda (
from_date, to_date, product_id, store_id) no están soportados en este endpoint. Los parámetros de consulta no soportados se ignoran en lugar de rechazarse, así que filtra en el lado del cliente o acota con updated_since.Respuesta
Los resultados llegan bajoitems, ordenados por última actualización y luego por id, con un next_cursor opaco para la página siguiente (null en la última página).
{
"items": [
{
"id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"item_id": "SKU-12345",
"store_id": "STORE-007",
"sku": "SKU-12345",
"region": "FI",
"transaction_timestamp": "2026-05-21T16:42:09Z",
"quantity": 2,
"selling_price": 1.49,
"regular_price": 1.79,
"sales_value": 2.98,
"gross_profit": 0.90,
"stock_after_sale": 42,
"promo_type": null,
"zone_price": null
}
],
"next_cursor": "eyJvZmZzZXQiOjEwMDB9"
}
Extracciones incrementales
Las filas de transacciones no incluyenupdated_at en la respuesta, así que registra en tu lado la hora de tu última sincronización exitosa y pásala como updated_since en la siguiente ejecución. Recorre cada ejecución con next_cursor hasta que devuelva null; el servidor ordena por última actualización y luego por id, por lo que una ejecución iniciada a mitad del flujo se mantiene consistente. Esto captura correcciones tardías de transacciones existentes sin releer todo el historial.
Ventanas grandes
Las páginas de hastalimit=10000 se sirven desde snapshots y son la forma más rápida de extraer muchas filas. Para extracciones muy grandes, como una recarga completa del historial o un backfill de BI, es preferible una exportación asíncrona antes que una paginación profunda con cursor.
Ejemplo de solicitud
curl -s "https://clientapi.retailgrid.io/v1/transactions?limit=10000&updated_since=2026-05-01T00:00:00Z" \
-H "Authorization: Bearer rg_live_xxx"

