Listar precios aprobados
curl --request GET \
--url https://clientapi.retailgrid.io/v1/approved_pricesimport requests
url = "https://clientapi.retailgrid.io/v1/approved_prices"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://clientapi.retailgrid.io/v1/approved_prices', 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/approved_prices",
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/approved_prices"
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/approved_prices")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.retailgrid.io/v1/approved_prices")
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_bodyPrecios
Listar precios aprobados
Lista los precios finales aprobados en Price Approval, para sincronizarlos con tu ERP, tienda online o POS.
GET
/
v1
/
approved_prices
Listar precios aprobados
curl --request GET \
--url https://clientapi.retailgrid.io/v1/approved_pricesimport requests
url = "https://clientapi.retailgrid.io/v1/approved_prices"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://clientapi.retailgrid.io/v1/approved_prices', 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/approved_prices",
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/approved_prices"
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/approved_prices")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.retailgrid.io/v1/approved_prices")
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 los precios que tu equipo aprobó en la cola de Price Approval (aprobación de precios): las decisiones finales, no las propuestas en bruto de los agentes. Úsalo para extraer los precios aprobados hacia tu ERP, tienda online o POS de forma programada en lugar de exportarlos a mano.
Se devuelve una fila por cada precio aprobado. Cuando un Grid está en vista SKU-Store, cada aprobación lleva su propio
Los valores monetarios se devuelven como strings; consulta Convenciones.
Recorre los resultados pasando el
Pasa los valores
store_id.
Autenticación
Token Bearer. Consulta Autenticación.Parámetros de consulta
Todos los parámetros son opcionales. Sin ninguno definido, el endpoint devuelve las exportaciones pendientes actuales de tu organización (los precios aprobados que aún no se han confirmado como procesados en los sistemas externos), las más recientes primero. Pasahistory=true para leer en su lugar el historial registrado completo.
| Nombre | Tipo | Descripción |
|---|---|---|
history | boolean | Por defecto false. Con false, solo se devuelven las exportaciones pendientes actuales. Pon true para incluir el historial registrado, incluidas las versiones canceladas. |
limit | integer | Tamaño de página, por defecto 100, máximo 500. |
cursor | string | Cursor de paginación opaco devuelto como next_cursor por una respuesta anterior. |
grid_id | string (UUID) | Solo precios aprobados en este Grid. |
store_id | string (UUID) | Solo precios de esta tienda (aprobaciones SKU-Store). |
item_id | string | Filtra a un único identificador a nivel de SKU. |
sku | string | Filtra a un único código de SKU. |
approved_after | string (ISO-8601, UTC) | Solo precios aprobados en esta marca de tiempo o después. |
approved_before | string (ISO-8601, UTC) | Solo precios aprobados en esta marca de tiempo o antes. |
effective_after | string (YYYY-MM-DD) | Solo precios cuya fecha de vigencia sea esta fecha o posterior. |
effective_before | string (YYYY-MM-DD) | Solo precios cuya fecha de vigencia sea esta fecha o anterior. |
Respuesta
{
"items": [
{
"id": 91422,
"grid_id": "6b1e9c40-2f0a-4d8e-9d21-2f6a1c4b7e10",
"grid_item_id": 5567,
"item_id": "SKU-12345",
"sku": "SKU-12345",
"store_id": null,
"current_price": "1.49",
"proposed_price": "1.59",
"approved_price": "1.55",
"effective_date": "2026-07-01",
"currency_code": "EUR",
"proposal_source": "po",
"source": "user_defined",
"trace": [],
"approved_at": "2026-06-28T14:12:03Z",
"approved_by_user_id": "0b3c1f4a-9c1d-4f2a-8a3b-2c3d4e5f6a7b"
}
],
"next_cursor": null
}
Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
id | integer | Id interno de Retailgrid para la fila de precio aprobado. |
grid_id | string (UUID) | El Grid en el que se aprobó el precio. |
grid_item_id | integer | Id interno del artículo dentro de ese Grid. |
item_id | string | null | Tu identificador a nivel de SKU, cuando se conoce. |
sku | string | null | Código de SKU, cuando se conoce. |
store_id | string (UUID) | null | La tienda, para aprobaciones SKU-Store; null a nivel de producto. |
current_price | string | null | El precio vigente en el momento de la aprobación. |
proposed_price | string | El precio que propuso el agente. |
approved_price | string | El precio final aprobado; difiere de proposed_price cuando fue sobrescrito. |
effective_date | string (date) | null | Cuándo entra en vigor el precio aprobado. |
currency_code | string | Moneda ISO 4217 de los precios. |
proposal_source | string | Qué ejecución produjo la propuesta: dp (Dynamic Pricing), po (Price Optimization) o po_dp (ambas). |
source | string | De dónde proviene el precio aprobado: dp, po, po_dp o user_defined (una sobrescritura manual). |
trace | array | Desglose por origen detrás del precio (dp / po). |
approved_at | string (datetime, UTC) | Cuándo se aprobó el precio. |
approved_by_user_id | string (UUID) | El usuario que lo aprobó. |
Ejemplo de solicitud
curl -s "https://clientapi.retailgrid.io/v1/approved_prices?approved_after=2026-07-01T00:00:00Z&limit=500" \
-H "Authorization: Bearer rg_live_xxx"
next_cursor de cada respuesta de vuelta como cursor hasta que devuelva null.
Confirma lo que procesaste
Como la lectura por defecto devuelve solo las exportaciones pendientes, un precio permanece en ese conjunto hasta que le indicas a Retailgrid que lo has aplicado. Confirma un lote con:curl -s -X POST "https://clientapi.retailgrid.io/v1/approved_prices/acknowledge" \
-H "Authorization: Bearer rg_live_xxx" \
-H "Content-Type: application/json" \
-d '{"approved_price_ids": [91422, 91423]}'
id de una respuesta de listado anterior, hasta 500 por llamada. Los precios confirmados salen de la lectura de pendientes por defecto, de modo que una integración programada puede repetir el ciclo listar → aplicar → confirmar sin llevar su propio cursor ni marca de agua.
Un 409 significa que el lote entra en conflicto con el estado actual de esas exportaciones (por ejemplo, una fue cancelada o ya estaba confirmada). Vuelve a leer los ids y reintenta con los que sigan pendientes, en lugar de reintentar el mismo lote.

