Reten Docs
Rutas

Upsert por Lote

Crea o actualiza hasta 500 rutas en una sola operación, con reporte de resultado por item.

POST /api/integration/routes/batch-upsert

Crea o actualiza (upsert) hasta 500 rutas en una sola operación. Es el punto de entrada de integración para cargar el catálogo de rutas desde un sistema externo.

Auth: Requerida — permiso route:batch-upsert

Éxito parcial. Una vez que el cuerpo pasa la validación de formato, cada item se procesa de forma independiente: los que se pueden persistir se persisten, y los que fallan se reportan en errors[] con un código estable — un item que falla no deshace a los demás. Revisa siempre summary.failed y errors en la respuesta.

Clave del upsert

Cada item se busca entre las rutas existentes por code. Si existe una ruta con ese code se actualiza (cuenta en summary.updated); si no, se crea (summary.created).

Cuerpo de la Petición

CampoTipoRequeridoDescripción
itemsobject[]SíLista de rutas a escribir (mínimo 1, máximo 500).

Cada elemento de items:

CampoTipoRequeridoDescripción
codestringSíCódigo de la ruta. Clave del upsert.
namestringSíNombre visible de la ruta.

Ejemplo

curl -X POST "https://api.reten.ai/api/integration/routes/batch-upsert" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "code": "ROUTE-NORTH", "name": "North Zone" },
      { "code": "ROUTE-SOUTH", "name": "South Zone" },
      { "code": "ROUTE-CENTRAL", "name": "Central Zone" }
    ]
  }'
const response = await fetch(
  "https://api.reten.ai/api/integration/routes/batch-upsert",
  {
    method: "POST",
    headers: {
      "x-api-key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      items: [
        { code: "ROUTE-NORTH", name: "North Zone" },
        { code: "ROUTE-SOUTH", name: "South Zone" },
        { code: "ROUTE-CENTRAL", name: "Central Zone" },
      ],
    }),
  },
);
const result = await response.json();
import requests

response = requests.post(
    "https://api.reten.ai/api/integration/routes/batch-upsert",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "items": [
            {"code": "ROUTE-NORTH", "name": "North Zone"},
            {"code": "ROUTE-SOUTH", "name": "South Zone"},
            {"code": "ROUTE-CENTRAL", "name": "Central Zone"},
        ],
    },
)
result = response.json()

Respuesta 200 OK

En este ejemplo, ROUTE-NORTH ya existía y se actualizó, y las otras dos rutas se crearon:

{
  "summary": {
    "total": 3,
    "created": 2,
    "updated": 1,
    "failed": 0
  },
  "errors": []
}

Campos de la respuesta

CampoTipoDescripción
summary.totalnumberTotal de items enviados.
summary.creatednumberItems insertados (rutas nuevas).
summary.updatednumberItems actualizados (rutas existentes modificadas).
summary.failednumberItems que no se pudieron persistir.
errorsobject[]Detalle por item fallido (vacío si todos tuvieron éxito).
errors[].indexnumberPosición (base 0) del item dentro del array items enviado.
errors[].identifierstringEl code del item fallido.
errors[].errorstringCódigo de error estable (ver tabla siguiente).
errors[].messagestringMensaje legible para humanos/logs con la causa.

Códigos de error por item

errorSignificado
upsert_errorEl item no se pudo persistir; message trae la causa.

Errores (de la request completa)

StatusDescripción
400items vacío o con más de 500 elementos; un item que no cumple el formato (campo requerido ausente o tipo inválido); o una propiedad no declarada aquí.
401Clave de API faltante o inválida.
403La clave de API no tiene el permiso route:batch-upsert.