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órioChave 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órioMesma 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órioMesma chave pública fixa usada em todas as rotas do AddressController.
ufobrigatórioSigla 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órioTermo 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órioURL 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 / fkSegmentos exigidos pela rota, mas não são usados pela action atualmente (não influenciam o comportamento).

Body (apenas em POST/PUT/PATCH)

usernameobrigatórioE-mail do cliente Superaudio Store.
passwordobrigatórioSenha 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 / fkSegmentos exigidos pela rota, mas não são usados pela action atualmente (não influenciam o comportamento).

Body

session_idobrigatórioToken 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
}