Documentação Api de Utilitários (Endereços, Imagens, Superaudio Store)
Endpoints utilitários usados pelo portal/apps: consulta de endereços (países, estados e cidades), proxy de imagens em base64 e a integração com a Superaudio Store. Não seguem um padrão único de autenticação - cada grupo está descrito abaixo.
Endereços (AddressController)
GET /address/request-countries/{publicKey} Listar países
Retorna a lista de países cadastrados.
Parâmetros da URL
| publicKeyobrigatório | Chave pública fixa definida no AddressController, enviada na própria URL (não é um token por usuário/empresa). |
Autenticação
Além da publicKey, a requisição só é aceita se o SERVER_NAME do
host bater com um dos domínios permitidos (superaudio.test,
superaudio.com.br, portal.superaudio.com.br,
api.superaudio.com.br). Não há checagem de sessão nem de header
Authorization.
200Sucesso
{
"code": 200,
"message": null,
"data": [
{ "id": 1, "name": "Brasil" },
{ "id": 2, "name": "Argentina" }
]
}
403Domínio não permitido ou publicKey ausente/incorreta
{
"code": 403,
"message": null,
"data": null
}
GET /address/request-states/{publicKey}/ Listar estados
Retorna os estados (UF e nome). O parâmetro de país não existe na rota - o controller
sempre filtra por country_id = 1 (Brasil), fixo no código.
Parâmetros da URL
| publicKeyobrigatório | Mesma chave pública fixa usada em todas as rotas do AddressController. |
Autenticação
Mesma regra de domínio permitido descrita acima em "Listar países".
200Sucesso
{
"code": 200,
"message": null,
"data": [
{ "uf": "SP", "name": "São Paulo" },
{ "uf": "RJ", "name": "Rio de Janeiro" }
]
}
403Domínio não permitido ou publicKey ausente/incorreta
{
"code": 403,
"message": null,
"data": null
}
GET /address/request-cities/{publicKey}/{uf} Listar cidades de uma UF
Retorna as cidades (id e nome) de um estado específico.
Parâmetros da URL
| publicKeyobrigatório | Mesma chave pública fixa usada em todas as rotas do AddressController. |
| ufobrigatório | Sigla do estado (ex: SP). Se vier vazio, a resposta é 403 (mesma condição usada para publicKey/domínio inválidos). |
Autenticação
Mesma regra de domínio permitido descrita acima em "Listar países".
200Sucesso
{
"code": 200,
"message": null,
"data": [
{ "id": 3550308, "name": "São Paulo" },
{ "id": 3548500, "name": "Sorocaba" }
]
}
403Domínio não permitido, publicKey incorreta ou uf vazio
{
"code": 403,
"message": null,
"data": null
}
GET /address/cities-name/?name={name} Buscar cidades por nome
Busca cidades cujo nome contenha o termo informado (case-insensitive, "contains" - não é "starts with"). Limitado a 50 resultados, ordenado por nome.
Atenção: ao contrário dos endpoints acima, esta rota não exige
publicKey nem valida o domínio de origem - é pública.
Parâmetros GET (querystring)
| nameobrigatório | Termo de busca. |
200Sucesso
{
"code": 200,
"message": "Total de cidade encontradas: 2.",
"data": [
{ "id": 3550308, "name": "São Paulo/SP" },
{ "id": 4125506, "name": "São Paulo do Norte/PR" }
],
"total": 2
}
400Parâmetro name não enviado
{
"code": 400,
"message": "Não foi enviado o parametro name",
"data": []
}
GET /address/all-cities/ Listar todas as cidades
Retorna todas as cidades cadastradas na base, sem filtro e sem paginação, ordenadas por nome.
Atenção: assim como a busca por nome, esta rota é pública (sem publicKey
e sem validação de domínio). Por não ter limite de resultados, a resposta pode ser bem
grande. Diferente dos demais endpoints deste controller, cada item de data
traz o registro completo da cidade (id, state_id, uf,
name), e data é uma lista simples (array indexado), não um objeto
reduzido a id/name.
Parâmetros
Sem parâmetros.
200Sucesso
{
"code": 200,
"message": "Total de cidade encontradas: 5570.",
"data": [
{ "id": 3550308, "state_id": 26, "uf": "SP", "name": "São Paulo" },
{ "id": 3509502, "state_id": 26, "uf": "SP", "name": "Campinas" }
],
"total": 5570
}
-Falha inesperada
O código não lança erros de negócio (não há validação de parâmetros). Falhas
inesperadas (ex.: banco indisponível) são capturadas e devolvidas no mesmo formato,
com data vazio:
{
"code": 0,
"message": "mensagem da exceção capturada",
"data": []
}
Imagens (ImagesController)
POST /images/proxy-base64/ Proxy de imagem em base64
Baixa uma imagem a partir de uma URL remota e devolve como data URL base64 (usado
pelas telas de busca de metadados/capas). Rota pública - Auth->allow(),
sem publicKey e sem sessão.
Body
| urlobrigatório | URL da imagem a ser baixada (corpo da requisição). |
As mensagens de erro abaixo vêm direto da exceção (em inglês, não passam por tradução).
200Sucesso
{
"code": 200,
"message": null,
"data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
500url vazia/inválida
{
"code": 500,
"message": "Invalid image URL",
"data": null
}
500Falha ao baixar a imagem (URL inacessível, timeout de 15s, etc)
{
"code": 500,
"message": "Could not fetch image",
"data": null
}
Superaudio Store (SuperaudioStoreController)
Rotas do fluxo de integração com a Superaudio Store. O controller usa
Auth->allow() (não exige login pelo componente Auth), mas
createApi e removeApi dependem da sessão de navegador do usuário logado no
portal (UserLogged.companyID) para saber de qual empresa tratam - não usam
header Authorization nem publicKey. As actions getSuccess,
getExistIntegration e createApi renderizam páginas HTML (formulário/telas de
retorno), e não devolvem JSON; apenas removeApi é uma API JSON de fato.
GET / POST /integration-superaudio-store/auth/{model}/{fk} Formulário de autorização (exibir/processar)
Em GET, exibe o formulário de e-mail/senha da conta Superaudio Store (ou
redireciona para a tela de "já existe integração" se a empresa logada já tiver uma). Em
POST/PUT/PATCH, autentica o e-mail/senha contra a
Superaudio Store; se válido, cria o vínculo (CompanySuperaudioStore) para a
empresa da sessão e redireciona (302) para a tela de sucesso. Se inválido, apenas
re-renderiza o formulário com uma mensagem de erro via Flash (sem alterar o
status HTTP).
Parâmetros da URL
| model / fk | Segmentos exigidos pela rota, mas não são usados pela action atualmente (não influenciam o comportamento). |
Body (apenas em POST/PUT/PATCH)
| usernameobrigatório | E-mail do cliente Superaudio Store. |
| passwordobrigatório | Senha do cliente Superaudio Store. |
Autenticação
Requer sessão de usuário logado no portal (UserLogged.companyID).
302Sucesso
Não retorna JSON. Redirect HTTP 302 para a rota de sucesso (ou para "já existe integração", se aplicável).
200Credenciais inválidas
Não retorna JSON. HTTP 200 com o formulário renderizado novamente e a mensagem
"Email ou Sennha invalido" (sic) exibida via Flash.
GET /integration-superaudio-store/success Tela de sucesso
Página HTML exibida após a autorização ser concluída com sucesso (destino do redirect de createApi). Sem parâmetros, sem lógica adicional.
Parâmetros
Sem parâmetros.
200Resposta
Não retorna JSON - renderiza página HTML.
GET /integration-superaudio-store/exist-integration Tela de integração já existente
Página HTML exibida quando a empresa logada já possui uma integração com a Superaudio Store (destino do redirect de createApi quando já existe registro). Sem parâmetros, sem lógica adicional.
Parâmetros
Sem parâmetros.
200Resposta
Não retorna JSON - renderiza página HTML.
POST /integration-superaudio-store/remvoe/{model}/{fk} Remover integração
Desativa a integração da empresa logada com a Superaudio Store: apaga o registro
CompanySuperaudioStore e desativa (exclui logicamente) os tipos de mídia e
mídias que haviam sido importados por essa integração.
Parâmetros da URL
| model / fk | Segmentos exigidos pela rota, mas não são usados pela action atualmente (não influenciam o comportamento). |
Body
| session_idobrigatório | Token da integração. É comparado ao campo token do registro CompanySuperaudioStore da empresa logada. |
Autenticação
Requer sessão de usuário logado no portal (UserLogged.companyID).
200Sucesso
{
"status": "success",
"message": "SuperaudioStore desabilitado com sucesso.",
"data": null,
"code": 200
}
401Não existe integração com esse session_id para a empresa logada
{
"status": "error",
"message": "Não foi possível encontrar esta API, tente novamente.",
"data": null,
"code": 401
}
500Falha ao apagar o registro (ou qualquer outra exceção durante o processo)
{
"status": "error",
"message": "Não foi possível desativar esta API, tente novamente.",
"data": null,
"code": 500
}