OTL ShoesAPI
Exemplos em
Menu da documentação

Ver texto do produto

O texto próprio de um produto nesta loja.

GET/v1/loja-hub/seo/produtos/{sku}

Quando usar

Todas as lojas do HUB vendem o mesmo catálogo. Para a página de um produto entrar no Google, ela precisa de um texto próprio daquela loja — sem ele a página funciona e vende, mas fica fora da busca.

Exemplo

curl "https://api.otlshoes.com.br/v1/loja-hub/seo/produtos/320" \
  -H "Authorization: Bearer otl_prod_SEU_TOKEN"
curl "https://api-sandbox.otlshoes.com.br/v1/loja-hub/seo/produtos/320" \
  -H "Authorization: Bearer otl_sbx_SEU_TOKEN"
const resposta = await fetch('https://api.otlshoes.com.br/v1/loja-hub/seo/produtos/320', {
  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/seo/produtos/320', {
  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/seo/produtos/320');
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/seo/produtos/320');
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/seo/produtos/320",
    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/seo/produtos/320",
    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

{
  "sku": "320",
  "endereco": "tenis-adidas-forum-low-branco-320",
  "titulo": "Tênis Adidas Forum Low Branco",
  "descricao": "Clássico do basquete dos anos 80, em couro branco. Calça normal.",
  "texto": "O Forum Low nasceu nas quadras e virou peça de rua. Cabedal em couro, tira no tornozelo e solado de borracha.",
  "palavrasChave": [
    "adidas forum low",
    "tênis branco masculino"
  ],
  "origem": "MANUAL",
  "publicado": true,
  "publicadoEm": "2026-09-20T11:00:00-03:00",
  "atualizadoEm": "2026-09-20T11:00:00-03:00"
}
CampoTipoDescrição
skutextoO produto.
enderecotextoO trecho da URL do produto na vitrine, gerado do título.
titulotextoO título da página.
descricaotextoA descrição que aparece no resultado da busca.
textotextoO conteúdo da página do produto. Pode ser null.
palavrasChavelistaTermos associados.
origemtextoMANUAL (escrito pelo parceiro ou pela integração) ou IA (gerado no painel).
publicadobooleanofalse = rascunho: a página continua fora do Google.
publicadoEm · atualizadoEmdataDatas do texto.

Erros possíveis

HTTP codigo Quando
404 NAO_ENCONTRADO O produto não tem texto próprio nesta loja
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