Lojas e resolução de host
Como a plataforma descobre de qual loja é cada chamada, o isolamento entre lojas e o que as respostas 404 e 503 de loja significam.
Na Venddor uma loja (internamente chamada de tenant) é um negócio completo: catálogo, clientes, pedidos, administradores, sellers, tema e configurações. Cada loja tem o seu próprio banco de dados. Nada de uma loja é visível em outra: um id de produto da loja A simplesmente não existe na loja B, e um usuário da loja A não existe na loja B, mesmo que o e-mail seja o mesmo.
Por isso, toda chamada precisa dizer de qual loja ela é. É a primeira coisa que a plataforma resolve, antes de olhar o token.
Como a loja é resolvida
A plataforma segue esta ordem e usa a primeira que der resultado.
- Cabeçalho X-Tenant-ID
Se a requisição trouxer
X-Tenant-ID, o valor (o identificador curto da loja, comostore1) é usado. É útil em testes e ao chamar um endereço que não é o da loja. - Subdomínio
O host da requisição é comparado ao domínio base da plataforma.
minhaloja.io.venddor.com.brresolve para a lojaminhaloja. Quando a chamada passa por um proxy ou CDN que reescreve o host, o cabeçalhoX-Forwarded-Hosté lido no lugar. - Domínio personalizado
Se o host não termina no domínio base (por exemplo
loja.exemplo.com.br), a plataforma procura esse domínio entre os que as lojas cadastraram. Se achar, a loja dona do domínio é a resolvida.
Se nada resolver, a resposta é 404 com tenant not found e a requisição nem chega à rota.
Isolamento e tokens
Depois de resolver a loja, a autenticação confere que o tenant_id dentro do token é o da loja resolvida. Se não for, a chamada é recusada com 403 token not valid for this storefront. Na prática: faça login em cada loja separadamente e guarde um token por loja. Os detalhes do token estão em Tokens e escopos.
Os ids também são isolados. Ao integrar várias lojas, guarde sempre o par (loja, id) no seu sistema.
Estados da loja
Uma loja pode estar fora do ar por motivos diferentes. Cada um tem uma resposta própria, e saber qual é evita horas de diagnóstico.
| Status | error | Quando acontece |
|---|---|---|
| 404 | tenant not found (could not resolve storefront from request) | Nenhuma loja foi identificada no host nem no cabeçalho. |
| 404 | tenant not found (storefront does not exist or is disabled) | O identificador existe como texto, mas não há loja ativa com ele. |
| 404 | tenant_not_found | A loja foi removida ou cancelada. |
| 503 | tenant_suspended | A loja está suspensa (bloqueio feito pela operação da plataforma). |
| 503 | tenant_unavailable | A loja está em um estado que a plataforma não reconhece como ativo. |
| 404 | storefront_disabled | A vitrine pública está despublicada. Só as rotas públicas de vitrine respondem isso; login, painel de administrador e de seller, e webhooks seguem funcionando. |
| 503 | tenant_maintenance | A loja está em manutenção (ligada pelo lojista no painel ou por uma operação controlada). Só a vitrine pública responde 503; o painel continua acessível. A mensagem vem em português: loja em manutencao. |
Todos esses corpos têm o formato {"error": "...", "message": "..."}. Veja o quadro completo em Erros.
Exemplo
# Pelo host da loja (recomendado)
curl "https://minhaloja.io.venddor.com.br/api/v1/storefront/categories"
# Por um endereço compartilhado, nomeando a loja
curl "https://io.venddor.com.br/api/v1/auth/login" \
-H "X-Tenant-ID: minhaloja" \
-H "Content-Type: application/json" \
-d '{"email":"admin@minhaloja.com.br","password":"SENHA"}'{
"error": "tenant not found",
"message": "could not resolve storefront from request"
}Erros comuns
- Testar contra
localhostou um IP semX-Tenant-ID. Sem host de loja e sem cabeçalho, o resultado é 404tenant not found. - Enviar
X-Tenant-IDcom a loja errada e um token de outra. O cabeçalho tem prioridade sobre o host; o token então não bate e a resposta é 403. - Cachear o token entre lojas. Um token por loja.
- Confundir
storefront_disabledcom loja inexistente. A loja existe e o painel funciona; só a vitrine pública está fora.