Idiomas da vitrine
Lista os idiomas ligados na loja, lê o idioma ativo do visitante, grava a escolha dele e baixa o dicionário de textos traduzidos.
Estas quatro rotas implementam o seletor de idioma da vitrine. O idioma escolhido fica no cookie venddor_language (válido por 30 dias, Path=/, SameSite=Lax, legível pelo JavaScript; Secure quando a conexão é HTTPS). Em chamadas feitas por um app, que não tem o cookie do navegador, guarde o código você mesmo e passe-o nas rotas que o pedem.
Listar idiomas
/api/v1/storefront/languagesPúblicaLista os idiomas habilitados e o ativo
Devolve os idiomas ligados na loja e, em active, o código do idioma válido para este visitante: o do cookie venddor_language se for um idioma ligado, senão o padrão da loja.
Exemplo de requisição
curl "$BASE_URL/api/v1/storefront/languages"Resposta
{
"active": "pt-BR",
"items": [
{
"code": "es",
"nameEn": "Spanish",
"nameNative": "Español",
"direction": "LTR",
"locale": "es-ES",
"enabled": true,
"isDefault": false,
"position": 0,
"createdAt": "2026-05-15T21:04:23.044062Z",
"updatedAt": "2026-07-11T22:52:18.895198Z"
},
{
"code": "pt-BR",
"nameEn": "Portuguese (Brazil)",
"nameNative": "Português (Brasil)",
"direction": "LTR",
"locale": "pt-BR",
"enabled": true,
"isDefault": true,
"position": 0,
"createdAt": "2026-05-15T11:19:40.892818Z",
"updatedAt": "2026-07-19T13:10:47.284292Z"
}
]
}Campos da resposta
activestringitemsarrayitems[].codestringpt-BR, es, ar). É o valor para select e para os textos.items[].nameEnstringitems[].nameNativestringitems[].directionstringLTRRTLRTL (direita para esquerda) exige espelhar a interface.items[].localestringes-ES).items[].enabledbooleantrue aqui.items[].isDefaultbooleantrue no idioma padrão da loja.items[].positioninteger0).items[].createdAtstringitems[].updatedAtstringErros
| Status | Quando | Corpo |
|---|---|---|
| 500 | Falha ao listar | {"error":"failed to list languages","detail":"..."} |
Idioma ativo
/api/v1/storefront/languages/activePúblicaConsulta o idioma ativo do visitante
Devolve o idioma ativo (cookie válido ou padrão da loja) e grava de novo o cookie venddor_language, renovando a validade. Use ao abrir o app para saber em que idioma desenhar a primeira tela.
Exemplo de requisição
curl -i "$BASE_URL/api/v1/storefront/languages/active" --cookie "venddor_language=es"Resposta
{
"code": "es",
"nameEn": "Spanish",
"nameNative": "Español",
"direction": "LTR",
"locale": "es-ES",
"enabled": true,
"isDefault": false,
"position": 0,
"createdAt": "2026-05-15T21:04:23.044062Z",
"updatedAt": "2026-07-11T22:52:18.895198Z"
}Campos da resposta
codestringnameEnstringnameNativestringdirectionstringLTRRTLlocalestringenabledbooleantrue.isDefaultbooleanpositionintegercreatedAtstringupdatedAtstringErros
| Status | Quando | Corpo |
|---|---|---|
| 404 | A loja não tem nenhum idioma padrão | {"error":"no active language configured"} |
| 500 | Falha ao ler | {"error":"failed to list languages","detail":"..."} |
Escolher o idioma
/api/v1/storefront/languages/selectPúblicaEscolhe o idioma do visitante
Valida o código contra os idiomas ligados e grava o cookie venddor_language. É idempotente e responde 204 sem corpo. O código é normalizado (pt-br vira pt-BR).
Corpo da requisição
codestringobrigatórioExemplo de requisição
curl -i -X POST "$BASE_URL/api/v1/storefront/languages/select" \
-H "Content-Type: application/json" \
-d '{
"code": "es"
}'Resposta
HTTP/1.1 204 No Content
Set-Cookie: venddor_language=es; Path=/; Max-Age=2592000; SameSite=LaxErros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | Sem code | {"error":"code is required"} |
| 404 | Idioma desligado ou inexistente | {"error":"language not enabled on this tenant"} |
Textos traduzidos
/api/v1/storefront/languages/{code}/translationsPúblicaConsulta os textos traduzidos de um idioma
Devolve o dicionário de textos da vitrine para o idioma. Ele já vem mesclado: pacote da plataforma, depois idioma padrão da loja, depois o idioma pedido, de modo que uma chave sem tradução cai no idioma padrão em vez de sumir. O dicionário completo é grande (cerca de 47 mil chaves e 3 MB na loja de teste, a maior parte do painel de administração): peça só os prefixos que a sua tela usa.
Parâmetros de caminho
codestringobrigatóriopt-BR, es).Parâmetros de consulta
prefixstringstorefront.,common.). Só as chaves que começam com algum deles são devolvidas. Ausente: o dicionário inteiro. Um prefixo que não casa com nada devolve {"translations": {}} com 200.Exemplo de requisição
curl "$BASE_URL/api/v1/storefront/languages/pt-BR/translations?prefix=storefront.,common."Resposta
{
"translations": {
"common.accessDenied": "Access Denied",
"common.actionFailed": "Ação falhou",
"common.actions": "Ações"
}
}Campos da resposta
translationsobjectchave para texto. As chaves usam pontos como separador (common.actions). O exemplo está abreviado.Erros
| Status | Quando | Corpo |
|---|---|---|
| 404 | Idioma desligado ou inexistente | {"error":"language not enabled on this tenant"} |
| 500 | Falha ao montar o dicionário | {"error":"failed to resolve translations","detail":"..."} |