Para desenvolvedores e agentes

API pública e documentação

Leitura de dados institucionais e envio do formulário de contato. Sem autenticação nos endpoints públicos.

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/markdown nas páginas públicas; a resposta vem em text/markdown quando 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.