> ## Documentation Index
> Fetch the complete documentation index at: https://docs.riqra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sincronizar precios

> Fija el precio de cada SKU por lista de precios, con precio plano o tramos por cantidad.

Estos endpoints leen tus listas de precios y fijan precios por SKU y lista. Sirven para mantener
los precios de Riqra alineados con tu ERP o sistema de gestión, incluidos precios distintos para
grupos de clientes.

## Cómo llegan los precios al comprador

Una **lista de precios** define cuánto cuesta cada variante. El comprador no elige la lista: la
**política comercial** que le corresponde selecciona una, y el **segmento** al que pertenece la
persona asigna esa política. Para que un grupo de clientes (por ejemplo, tus trabajadores o tus
clientes VIP) vea precios distintos:

1. Crea la lista de precios en el panel y cárgala con esta API.
2. Crea una política comercial que seleccione esa lista.
3. Crea un segmento con esa política y asigna a las personas.

La API solo escribe precios. Las listas, políticas y segmentos se administran desde el panel.
Revisa [Listas de precios](/plataforma/precios/introduccion) y
[Segmentos](/plataforma/clientes/segmentos).

## Endpoints

| Acción                | Endpoint            | Scope          |
| --------------------- | ------------------- | -------------- |
| Listar listas activas | `GET /prices/lists` | `prices:read`  |
| Fijar precios         | `POST /prices/set`  | `prices:write` |

## Listar las listas de precios

`GET /prices/lists` devuelve las listas activas con el `id` que necesitas para fijar precios.

```bash theme={null}
curl "https://api-v2.riqra.com/public/v1/prices/lists" \
  -H "Authorization: Bearer rq_live_tu_api_key"
```

```json theme={null}
{
  "priceLists": [
    {
      "id": "0b2e9f5a-1c3d-4e6f-8a9b-0c1d2e3f4a5b",
      "name": "Lista base",
      "sourcePriceListId": null,
      "adjustmentType": "NONE",
      "adjustmentValue": "0"
    },
    {
      "id": "1c3d4e6f-8a9b-4c1d-9e3f-4a5b6c7d8e9f",
      "name": "Empleados",
      "sourcePriceListId": "0b2e9f5a-1c3d-4e6f-8a9b-0c1d2e3f4a5b",
      "adjustmentType": "PERCENT_DOWN",
      "adjustmentValue": "15.00"
    }
  ]
}
```

Una lista con `sourcePriceListId` en `null` es **independiente**: el precio de cada SKU es el que
tú fijas. Una lista con `sourcePriceListId` es **derivada**: toma el precio de la lista origen y le
aplica el ajuste (`PERCENT_DOWN` de `15.00` es un 15 % de descuento). En una lista derivada solo
necesitas fijar los SKUs que se apartan de la regla.

## Fijar precios

`POST /prices/set` recibe hasta 100 ítems. Cada ítem identifica un par SKU + lista y lleva
**exactamente uno** de estos campos:

* `price`: precio unitario plano. En una lista independiente es el precio de venta; en una lista
  derivada es un precio pactado que reemplaza al derivado.
* `tiers`: la escalera completa de tramos por cantidad.

```bash theme={null}
curl -X POST "https://api-v2.riqra.com/public/v1/prices/set" \
  -H "Authorization: Bearer rq_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "sku": "SKU-001", "priceListId": "0b2e9f5a-1c3d-4e6f-8a9b-0c1d2e3f4a5b", "price": "12.50" },
      {
        "sku": "SKU-001",
        "priceListId": "1c3d4e6f-8a9b-4c1d-9e3f-4a5b6c7d8e9f",
        "tiers": [
          { "minQty": 1, "maxQty": 11, "price": "10.50" },
          { "minQty": 12, "maxQty": null, "price": "9.90" }
        ]
      }
    ]
  }'
```

La respuesta es `200` siempre que el cuerpo sea válido. Cada fila trae su propio `status`, en el
mismo orden del pedido:

```json theme={null}
{
  "results": [
    { "sku": "SKU-001", "priceListId": "0b2e9f5a-1c3d-4e6f-8a9b-0c1d2e3f4a5b", "status": 200 },
    { "sku": "SKU-001", "priceListId": "1c3d4e6f-8a9b-4c1d-9e3f-4a5b6c7d8e9f", "status": 200 }
  ]
}
```

### Reglas

* La escritura es **absoluta**: el valor enviado reemplaza al almacenado, no es un incremento.
* `price` y `tiers` son excluyentes en un mismo ítem, y el que envías **reemplaza al otro**: un
  precio plano borra los tramos del par, y una escalera borra el precio plano.
* Los precios viajan como string decimal, sin signo y con hasta cuatro decimales. Un tramo debe
  tener precio mayor a cero. Revisa [Montos y moneda](/desarrolladores/api/money).
* Una escalera empieza en cantidad `1`, es contigua, solo el último tramo queda abierto
  (`maxQty: null`) y tiene como máximo 15 tramos. Revisa
  [Tramos por cantidad](/plataforma/precios/tramos-por-cantidad).
* El SKU debe coincidir exactamente con el de la variante, incluidas mayúsculas y minúsculas.
* Un par SKU + lista repetido en el mismo pedido responde `400`.
* La API no elimina precios ni crea listas. Ambas cosas se hacen desde el panel.

### Errores por fila

| `code`                 | `status` | Cuándo                                           |
| ---------------------- | -------- | ------------------------------------------------ |
| `SKU_NOT_FOUND`        | `404`    | Ninguna variante tiene ese SKU.                  |
| `PRICE_LIST_NOT_FOUND` | `404`    | La lista no existe en tu organización.           |
| `PRICE_LIST_INACTIVE`  | `409`    | La lista está inactiva. Actívala desde el panel. |

Una fila con error no afecta a las demás: las filas válidas del mismo pedido se guardan.

## Flujo recomendado

<Steps>
  <Step title="Resuelve las listas una vez">
    Llama a `GET /prices/lists` y guarda el `id` de cada lista con la que trabajas.
  </Step>

  <Step title="Envía lotes de hasta 100 pares">
    Agrupa los cambios por SKU y lista. Puedes mezclar precios planos y tramos en un mismo lote.
  </Step>

  <Step title="Revisa las filas con error">
    Filtra los `results` con `status` distinto de `200`, corrige la causa (crear el SKU, activar la
    lista) y reenvía solo esas filas.
  </Step>
</Steps>

Los cambios se reflejan en la tienda de inmediato. El buscador de la tienda se actualiza unos
segundos después.
