Reten Docs
Rotas

Upsert por Lote

Crie ou atualize até 500 rotas em uma única operação, com relatório de resultado por item.

POST /api/integration/routes/batch-upsert

Cria ou atualiza (upsert) até 500 rotas em uma única operação. É o ponto de entrada de integração para carregar o catálogo de rotas a partir de um sistema externo.

Auth: Obrigatório — permissão route:batch-upsert

Sucesso parcial. Depois que o corpo passa na validação de formato, cada item é processado de forma independente: os que podem ser persistidos são persistidos, e os que falham são reportados em errors[] com um código estável — um item que falha não desfaz os demais. Sempre verifique summary.failed e errors na resposta.

Chave do upsert

Cada item é procurado entre as rotas existentes por code. Se existir uma rota com esse code, ela é atualizada (conta em summary.updated); caso contrário, é criada (summary.created).

Corpo da Requisição

CampoTipoObrigatórioDescrição
itemsobject[]SimLista de rotas a gravar (mínimo 1, máximo 500).

Cada elemento de items:

CampoTipoObrigatórioDescrição
codestringSimCódigo da rota. Chave do upsert.
namestringSimNome de exibição da rota.

Exemplo

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()

Resposta 200 OK

Neste exemplo, ROUTE-NORTH já existia e foi atualizada, e as outras duas rotas foram criadas:

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

Campos da resposta

CampoTipoDescrição
summary.totalnumberTotal de items enviados.
summary.creatednumberItems inseridos (rotas novas).
summary.updatednumberItems atualizados (rotas existentes modificadas).
summary.failednumberItems que não puderam ser persistidos.
errorsobject[]Detalhe por item que falhou (vazio se todos tiveram sucesso).
errors[].indexnumberPosição (base 0) do item dentro do array items enviado.
errors[].identifierstringO code do item que falhou.
errors[].errorstringCódigo de erro estável (veja tabela abaixo).
errors[].messagestringMensagem legível para humanos/logs com a causa.

Códigos de erro por item

errorSignificado
upsert_errorO item não pôde ser persistido; message traz a causa.

Erros (da request completa)

StatusDescrição
400items vazio ou com mais de 500 elementos; um item que não cumpre o formato (campo obrigatório ausente ou tipo inválido); ou uma propriedade não declarada aqui.
401Chave de API ausente ou inválida.
403A chave de API não tem a permissão route:batch-upsert.