Visão geral
A API pública da Solut Network é somente leitura para dados institucionais (nome, contato, serviços e clientes) e aceita o mesmo formulário de contato do site. Não faz parte desta API o que exige login de cliente ou colaborador.
A descrição formal em OpenAPI 3.1 está em /openapi.json (também em /api/openapi.json).
Autenticação
Nenhum endpoint público listado aqui exige autenticação. Áreas de cliente e colaborador usam login próprio (sessão ou JWT) e não fazem parte da API pública: não estão em /openapi.json e não devem ser chamadas como API aberta.
URL base
A URL base desta requisição é:
https://solutnetwork.com.br
Em produção o site público é https://solutnetwork.com.br.
Endpoints
Somente o que existe de fato e é público.
GET /api/v1/company-info
JSON institucional, sem autenticação. O caminho sem versão, /api/company-info, continua respondendo o mesmo conteúdo. Campos: status e data com name, slogan, description, mission, since, email, phone, address, website, social, services e clients.
Exemplo de requisição
curl -sS https://solutnetwork.com.br/api/v1/company-info
Exemplo de resposta real (obtido executando a rota)
{
"data": {
"address": "111, R. Politeama 35BI, Feira de Santana - BA",
"clients": [
"Trifase",
"Nosso Centro Medico",
"Lamtractor",
"Qualiteste",
"IDB ATACADISTA",
"Atacadão São Roque",
"Nordeste Irrigação e Maquinas",
"COMELIÊ",
"MULTCAIXA",
"NORDESTE ENERGIA SOLAR",
"ARMAZEM CEARENSE ATACADISTA",
"Nova Opção Distribuidora"
],
"description": "Especialistas em customização de rotinas, relatórios e parametrização do ERP Winthor.",
"email": "contato@solutnetwork.com.br",
"mission": "Levar eficiência através de consultoria técnica especializada em Winthor e infraestrutura robusta.",
"name": "Solut Network",
"phone": "(75) 9913-4492",
"services": {
"analytics": [
"Tableau",
"PowerBi",
"Mybi Target"
],
"consulting": [
"Winthor Customização",
"Rotinas 800",
"PL/SQL",
"Oracle",
"Rotinas Personalizadas",
"Relatórios Personalizados"
],
"database": [
"Oracle",
"SQLServer",
"MySQL",
"Firebird"
],
"firewall": [
"PfSense",
"Mikrotik",
"Endian"
],
"network": [
"Projetos",
"Switch",
"Patch Panel",
"Racks",
"CFTV"
],
"servers": [
"VMware ESXI",
"RedHat",
"Debian",
"Windows Servers",
"Hyper-V"
]
},
"since": "2012",
"slogan": "Qualidade e Eficácia em Soluções de Tecnologia",
"social": {
"facebook": "https://facebook.com/solutnetwork",
"instagram": "https://instagram.com/solutnetwork",
"linkedin": "https://www.linkedin.com/company/solut-network/?viewAsMember=true"
},
"website": "https://solutnetwork.com.br"
},
"status": "success"
}
GET /api/v1/pages
Páginas públicas indexáveis em JSON (as mesmas do sitemap.xml), cada uma com title, path e url.
Exemplo de requisição
curl -sS https://solutnetwork.com.br/api/v1/pages
Exemplo de resposta real (primeiras 3 páginas)
{
"data": {
"pages": [
{
"path": "/",
"title": "Início",
"url": "https://solutnetwork.com.br/"
},
{
"path": "/sobre",
"title": "Sobre",
"url": "https://solutnetwork.com.br/sobre"
},
{
"path": "/projetos",
"title": "Projetos",
"url": "https://solutnetwork.com.br/projetos"
}
]
},
"status": "success"
}
POST /contato
Formulário application/x-www-form-urlencoded. Campos lidos pela view: name, email, phone, subject e message. Obrigatórios: name, email, subject e message.
A resposta real é sempre um redirecionamento 302 para GET /contato, com mensagem flash na sessão: sucesso quando o e-mail é enviado, ou erro se faltarem campos, se o SMTP falhar ou se ocorrer exceção. Não devolve JSON.
Exemplo de requisição
curl -sS -o /dev/null -D - -X POST https://solutnetwork.com.br/contato \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "name=Maria Silva" \
--data-urlencode "email=maria@empresa.com.br" \
--data-urlencode "phone=(75) 99999-0000" \
--data-urlencode "subject=Consultoria Winthor" \
--data-urlencode "message=Gostaria de um orçamento."
Exemplo de resposta real
HTTP/1.1 302 FOUND
Location: https://solutnetwork.com.br/contato
GET /sitemap.xml
Sitemap XML das páginas públicas indexáveis. Content-Type: application/xml.
Exemplo de requisição
curl -sS https://solutnetwork.com.br/sitemap.xml
GET /robots.txt
Instruções de rastreamento, com a URL do sitemap e referência a /llms.txt.
Exemplo de requisição
curl -sS https://solutnetwork.com.br/robots.txt
GET /llms.txt
Guia em texto para agentes: quando usar cada serviço, páginas públicas e canais de contato.
Exemplo de requisição
curl -sS https://solutnetwork.com.br/llms.txt
Versionamento e descontinuação
A versão maior da API vai no caminho: a atual é v1 (/api/v1/...), e as respostas desses endpoints trazem o cabeçalho API-Version: 1. Mudanças incompatíveis serão publicadas em um novo prefixo (/api/v2/) e a versão anterior continua disponível. Acrescentar campos a uma resposta não é mudança incompatível.
Qualquer descontinuação será sinalizada nas respostas com os cabeçalhos Deprecation e Sunset. Hoje nada está descontinuado. O caminho sem versão /api/company-info é mantido como alias de /api/v1/company-info.
Formato de erro JSON
Para requisições cujo caminho começa com /api/ e para /openapi.json, erros HTTP (404, 405, 400, 401, 403, 429, 500 e demais HTTPException) respondem em application/json com o objeto abaixo. Páginas HTML fora de /api/ continuam em HTML (ou Markdown se o cliente pedir Accept: text/markdown). Em 405 o cabeçalho Allow é mantido. Erros 500 não incluem rastreamento da pilha.
Exemplo real de GET /api/nao-existe (404)
{
"error": {
"code": "not_found",
"message": "O endereço solicitado não existe nesta API.",
"status": 404,
"hint": "Consulte /openapi.json para ver os endpoints disponíveis.",
"docs": "https://solutnetwork.com.br/docs"
}
}
Limite de requisições
Os endpoints JSON (/api/v1/company-info, /api/company-info e /api/v1/pages) aceitam até 60 requisições por minuto por endereço IP. O contador é aproximado: cada processo do servidor conta separadamente. Fora desses endpoints não há limite declarado nem SLA.
Cada resposta desses endpoints informa o estado do limite nos cabeçalhos RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (segundos até a próxima janela) e RateLimit-Policy. Ao exceder, a resposta é 429 em JSON com o cabeçalho Retry-After, em segundos.
Cabeçalhos de exemplo
RateLimit-Limit: 60
RateLimit-Remaining: 59
RateLimit-Reset: 60
RateLimit-Policy: 60;w=60
Recursos para agentes
- Especificação:
/openapi.json - Guia em texto:
/llms.txt - Negociação Markdown: envie
Accept: text/markdownnas páginas públicas; a resposta vem emtext/markdownquando o Markdown tem prioridade sobre HTML.
Suporte técnico
Dúvidas sobre a API pública: contato@solutnetwork.com.br. Também é possível usar o formulário de contato.