OTL ShoesAPI
Exemplos em
Menu da documentação

Ver a seleção

Quais produtos do catálogo a vitrine vende.

GET/v1/loja-hub/selecao

Exemplo

curl "https://api.otlshoes.com.br/v1/loja-hub/selecao" \
  -H "Authorization: Bearer otl_prod_SEU_TOKEN"
curl "https://api-sandbox.otlshoes.com.br/v1/loja-hub/selecao" \
  -H "Authorization: Bearer otl_sbx_SEU_TOKEN"
const resposta = await fetch('https://api.otlshoes.com.br/v1/loja-hub/selecao', {
  headers: {
    Authorization: 'Bearer otl_prod_SEU_TOKEN',
  },
});

if (!resposta.ok) {
  const { erro } = await resposta.json();
  throw new Error(`${erro.codigo}: ${erro.mensagem} (${erro.requestId})`);
}
const dados = await resposta.json();
const resposta = await fetch('https://api-sandbox.otlshoes.com.br/v1/loja-hub/selecao', {
  headers: {
    Authorization: 'Bearer otl_sbx_SEU_TOKEN',
  },
});

if (!resposta.ok) {
  const { erro } = await resposta.json();
  throw new Error(`${erro.codigo}: ${erro.mensagem} (${erro.requestId})`);
}
const dados = await resposta.json();
<?php
$ch = curl_init('https://api.otlshoes.com.br/v1/loja-hub/selecao');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer otl_prod_SEU_TOKEN',
]);

$corpo = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new Exception($corpo['erro']['codigo'] . ': ' . $corpo['erro']['mensagem']);
}
<?php
$ch = curl_init('https://api-sandbox.otlshoes.com.br/v1/loja-hub/selecao');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer otl_sbx_SEU_TOKEN',
]);

$corpo = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new Exception($corpo['erro']['codigo'] . ': ' . $corpo['erro']['mensagem']);
}
import requests

resposta = requests.get(
    "https://api.otlshoes.com.br/v1/loja-hub/selecao",
    headers={
        "Authorization": "Bearer otl_prod_SEU_TOKEN",
    },
    timeout=30,
)

if not resposta.ok:
    erro = resposta.json()["erro"]
    raise RuntimeError(f'{erro["codigo"]}: {erro["mensagem"]} ({erro["requestId"]})')
dados = resposta.json()
import requests

resposta = requests.get(
    "https://api-sandbox.otlshoes.com.br/v1/loja-hub/selecao",
    headers={
        "Authorization": "Bearer otl_sbx_SEU_TOKEN",
    },
    timeout=30,
)

if not resposta.ok:
    erro = resposta.json()["erro"]
    raise RuntimeError(f'{erro["codigo"]}: {erro["mensagem"]} ({erro["requestId"]})')
dados = resposta.json()
Testar agora no ambiente de testes

A chamada é feita de verdade, do seu navegador para a API de testes (https://api-sandbox.otlshoes.com.br/v1). Use um token otl_sbx_…: ele fica só nesta aba, e some ao fechá-la. Token de produção não é aceito aqui.

Resposta

{
  "modo": "MANUAL",
  "categorias": [],
  "skus": [
    "320",
    "411"
  ]
}
CampoTipoDescrição
modotextoTODOS (o catálogo inteiro), CATEGORIAS ou MANUAL (uma lista de SKUs).
categoriaslistaIds das categorias, no modo CATEGORIAS. Os ids vêm de Categorias.
skuslistaSKUs selecionados, no modo MANUAL.

Regras que não se leem no JSON

  • Produto sem estoque some da vitrine sozinho, mesmo selecionado, e volta quando o estoque volta.
  • No modo CATEGORIAS, produto novo de uma categoria selecionada entra na vitrine sem ninguém fazer nada.
  • A seleção também é o filtro “só o que a minha loja vende” dos webhooks de produto.

Erros possíveis

HTTP codigo Quando
403 LOJA_HUB_NAO_LIBERADA A OTL ainda não liberou a loja no HUB para este parceiro
403 ESCOPO_INSUFICIENTE A integração não tem loja-hub:ler