{
  "components": {
    "schemas": {
      "CompanyInfoData": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "type": "string"
          },
          "clients": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "mission": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "services": {
            "$ref": "#/components/schemas/CompanyServices"
          },
          "since": {
            "type": "string"
          },
          "slogan": {
            "type": "string"
          },
          "social": {
            "$ref": "#/components/schemas/CompanySocial"
          },
          "website": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "name",
          "slogan",
          "description",
          "mission",
          "since",
          "email",
          "phone",
          "address",
          "website",
          "social",
          "services",
          "clients"
        ],
        "type": "object"
      },
      "CompanyInfoResponse": {
        "additionalProperties": false,
        "examples": [
          {
            "data": {
              "address": "111, R. Politeama 35BI, Feira de Santana - BA",
              "clients": [
                "Trifase",
                "Nosso Centro Medico",
                "Lamtractor",
                "Qualiteste",
                "IDB ATACADISTA",
                "Atacad\u00e3o S\u00e3o Roque",
                "Nordeste Irriga\u00e7\u00e3o e Maquinas",
                "COMELI\u00ca",
                "MULTCAIXA",
                "NORDESTE ENERGIA SOLAR",
                "ARMAZEM CEARENSE ATACADISTA",
                "Nova Op\u00e7\u00e3o Distribuidora"
              ],
              "description": "Especialistas em customiza\u00e7\u00e3o de rotinas, relat\u00f3rios e parametriza\u00e7\u00e3o do ERP Winthor.",
              "email": "contato@solutnetwork.com.br",
              "mission": "Levar efici\u00eancia atrav\u00e9s de consultoria t\u00e9cnica especializada em Winthor e infraestrutura robusta.",
              "name": "Solut Network",
              "phone": "(75) 9913-4492",
              "services": {
                "analytics": [
                  "Tableau",
                  "PowerBi",
                  "Mybi Target"
                ],
                "consulting": [
                  "Winthor Customiza\u00e7\u00e3o",
                  "Rotinas 800",
                  "PL/SQL",
                  "Oracle",
                  "Rotinas Personalizadas",
                  "Relat\u00f3rios 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\u00e1cia em Solu\u00e7\u00f5es 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"
          }
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/CompanyInfoData"
          },
          "status": {
            "examples": [
              "success"
            ],
            "type": "string"
          }
        },
        "required": [
          "status",
          "data"
        ],
        "type": "object"
      },
      "CompanyServices": {
        "additionalProperties": false,
        "properties": {
          "analytics": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "consulting": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "database": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "firewall": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "network": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "servers": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "firewall",
          "servers",
          "network",
          "consulting",
          "analytics",
          "database"
        ],
        "type": "object"
      },
      "CompanySocial": {
        "additionalProperties": false,
        "properties": {
          "facebook": {
            "format": "uri",
            "type": "string"
          },
          "instagram": {
            "format": "uri",
            "type": "string"
          },
          "linkedin": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "facebook",
          "instagram",
          "linkedin"
        ],
        "type": "object"
      },
      "ContactForm": {
        "additionalProperties": false,
        "properties": {
          "email": {
            "description": "E-mail do remetente. Obrigat\u00f3rio. Recebe a confirma\u00e7\u00e3o.",
            "format": "email",
            "type": "string"
          },
          "message": {
            "description": "Mensagem. Obrigat\u00f3rio.",
            "type": "string"
          },
          "name": {
            "description": "Nome completo. Obrigat\u00f3rio.",
            "type": "string"
          },
          "phone": {
            "description": "Telefone. Opcional; se vazio, o e-mail interno registra \"N\u00e3o informado\".",
            "type": "string"
          },
          "subject": {
            "description": "Assunto. Obrigat\u00f3rio.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "email",
          "subject",
          "message"
        ],
        "type": "object"
      },
      "Error": {
        "additionalProperties": false,
        "description": "Corpo JSON de erro em /api/* e /openapi.json. N\u00e3o se aplica \u00e0s p\u00e1ginas HTML nem ao POST /contato.",
        "examples": [
          {
            "error": {
              "code": "not_found",
              "docs": "https://solutnetwork.com.br/docs",
              "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
              "message": "O endere\u00e7o solicitado n\u00e3o existe nesta API.",
              "status": 404
            }
          }
        ],
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "description": "Identificador em snake_case (ex.: not_found).",
                "examples": [
                  "not_found",
                  "method_not_allowed",
                  "internal_error"
                ],
                "type": "string"
              },
              "docs": {
                "description": "URL absoluta da documenta\u00e7\u00e3o humana.",
                "examples": [
                  "https://solutnetwork.com.br/docs"
                ],
                "format": "uri",
                "type": "string"
              },
              "hint": {
                "description": "Como resolver o erro.",
                "examples": [
                  "Consulte /openapi.json para ver os endpoints dispon\u00edveis."
                ],
                "type": "string"
              },
              "message": {
                "description": "Explica\u00e7\u00e3o clara em portugu\u00eas.",
                "type": "string"
              },
              "status": {
                "description": "C\u00f3digo HTTP num\u00e9rico.",
                "examples": [
                  404,
                  405,
                  500
                ],
                "type": "integer"
              }
            },
            "required": [
              "code",
              "message",
              "status",
              "hint",
              "docs"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "PagesResponse": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "additionalProperties": false,
            "properties": {
              "pages": {
                "items": {
                  "$ref": "#/components/schemas/PublicPage"
                },
                "type": "array"
              }
            },
            "required": [
              "pages"
            ],
            "type": "object"
          },
          "status": {
            "examples": [
              "success"
            ],
            "type": "string"
          }
        },
        "required": [
          "status",
          "data"
        ],
        "type": "object"
      },
      "PlainTextDocument": {
        "description": "Documento de texto simples (UTF-8).",
        "type": "string"
      },
      "PublicPage": {
        "additionalProperties": false,
        "properties": {
          "path": {
            "description": "Caminho relativo, iniciado por /.",
            "type": "string"
          },
          "title": {
            "description": "T\u00edtulo da p\u00e1gina em portugu\u00eas.",
            "type": "string"
          },
          "url": {
            "description": "URL absoluta.",
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "title",
          "path",
          "url"
        ],
        "type": "object"
      },
      "XmlDocument": {
        "description": "Documento XML (sitemap).",
        "type": "string"
      }
    }
  },
  "externalDocs": {
    "description": "Documenta\u00e7\u00e3o humana da API p\u00fablica",
    "url": "https://solutnetwork.com.br/docs"
  },
  "info": {
    "contact": {
      "email": "contato@solutnetwork.com.br",
      "name": "Solut Network",
      "url": "https://solutnetwork.com.br"
    },
    "description": "API p\u00fablica da Solut Network, empresa de tecnologia em Feira de Santana, Bahia. Exp\u00f5e dados institucionais em JSON, o formul\u00e1rio de contato do site e arquivos de descoberta (sitemap, robots.txt e llms.txt). N\u00e3o exige autentica\u00e7\u00e3o. \u00c1reas de cliente e colaborador usam login pr\u00f3prio e n\u00e3o fazem parte desta API. Versionamento: a vers\u00e3o maior vai no caminho (/api/v1/...); mudan\u00e7as incompat\u00edveis geram /api/v2/ e a vers\u00e3o anterior continua dispon\u00edvel. Qualquer descontinua\u00e7\u00e3o ser\u00e1 sinalizada com os cabe\u00e7alhos Deprecation e Sunset. Limite de requisi\u00e7\u00f5es: 60 por minuto por IP nos endpoints JSON, informado nos cabe\u00e7alhos RateLimit-* e, ao exceder, em 429 com Retry-After. Erros em caminhos /api/* e em /openapi.json usam o schema Error. Documenta\u00e7\u00e3o humana: https://solutnetwork.com.br/docs.",
    "title": "Solut Network - API p\u00fablica",
    "version": "1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/company-info": {
      "get": {
        "description": "Mesmo conte\u00fado de GET /api/v1/company-info, mantido por compatibilidade. Prefira o caminho versionado.",
        "operationId": "getCompanyInfoLegacy",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "sucesso": {
                    "value": {
                      "data": {
                        "address": "111, R. Politeama 35BI, Feira de Santana - BA",
                        "clients": [
                          "Trifase",
                          "Nosso Centro Medico",
                          "Lamtractor",
                          "Qualiteste",
                          "IDB ATACADISTA",
                          "Atacad\u00e3o S\u00e3o Roque",
                          "Nordeste Irriga\u00e7\u00e3o e Maquinas",
                          "COMELI\u00ca",
                          "MULTCAIXA",
                          "NORDESTE ENERGIA SOLAR",
                          "ARMAZEM CEARENSE ATACADISTA",
                          "Nova Op\u00e7\u00e3o Distribuidora"
                        ],
                        "description": "Especialistas em customiza\u00e7\u00e3o de rotinas, relat\u00f3rios e parametriza\u00e7\u00e3o do ERP Winthor.",
                        "email": "contato@solutnetwork.com.br",
                        "mission": "Levar efici\u00eancia atrav\u00e9s de consultoria t\u00e9cnica especializada em Winthor e infraestrutura robusta.",
                        "name": "Solut Network",
                        "phone": "(75) 9913-4492",
                        "services": {
                          "analytics": [
                            "Tableau",
                            "PowerBi",
                            "Mybi Target"
                          ],
                          "consulting": [
                            "Winthor Customiza\u00e7\u00e3o",
                            "Rotinas 800",
                            "PL/SQL",
                            "Oracle",
                            "Rotinas Personalizadas",
                            "Relat\u00f3rios 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\u00e1cia em Solu\u00e7\u00f5es 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"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoResponse"
                }
              }
            },
            "description": "Dados institucionais obtidos com sucesso.",
            "headers": {
              "RateLimit-Limit": {
                "description": "M\u00e1ximo de requisi\u00e7\u00f5es permitidas na janela (60).",
                "schema": {
                  "examples": [
                    60
                  ],
                  "type": "integer"
                }
              },
              "RateLimit-Policy": {
                "description": "Pol\u00edtica vigente no formato \"limite;w=janela_em_segundos\".",
                "schema": {
                  "examples": [
                    "60;w=60"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requisi\u00e7\u00f5es restantes na janela atual.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Segundos at\u00e9 o in\u00edcio da pr\u00f3xima janela.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              }
            }
          },
          "405": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "method_not_allowed",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
                        "message": "M\u00e9todo HTTP n\u00e3o permitido. Use GET (ou HEAD).",
                        "status": 405
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "M\u00e9todo HTTP n\u00e3o permitido. Use GET (ou HEAD)."
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "too_many_requests",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Aguarde o tempo indicado no cabe\u00e7alho Retry-After e tente novamente. Consulte /docs#limite.",
                        "message": "Limite de requisi\u00e7\u00f5es excedido. Aguarde o tempo de Retry-After.",
                        "status": 429
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite de requisi\u00e7\u00f5es excedido. Aguarde o tempo de Retry-After.",
            "headers": {
              "RateLimit-Limit": {
                "description": "M\u00e1ximo de requisi\u00e7\u00f5es permitidas na janela (60).",
                "schema": {
                  "examples": [
                    60
                  ],
                  "type": "integer"
                }
              },
              "RateLimit-Policy": {
                "description": "Pol\u00edtica vigente no formato \"limite;w=janela_em_segundos\".",
                "schema": {
                  "examples": [
                    "60;w=60"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requisi\u00e7\u00f5es restantes na janela atual.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Segundos at\u00e9 o in\u00edcio da pr\u00f3xima janela.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Segundos de espera antes de tentar novamente.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "internal_error",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
                        "message": "Erro interno no servidor. A resposta n\u00e3o inclui rastreamento da pilha.",
                        "status": 500
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Erro interno no servidor. A resposta n\u00e3o inclui rastreamento da pilha."
          }
        },
        "security": [],
        "summary": "Dados institucionais (caminho sem vers\u00e3o)",
        "tags": [
          "Institucional"
        ]
      }
    },
    "/api/v1/company-info": {
      "get": {
        "description": "Retorna o JSON p\u00fablico da empresa: identifica\u00e7\u00e3o, contato, redes sociais, servi\u00e7os e lista de clientes. N\u00e3o exige autentica\u00e7\u00e3o nem par\u00e2metros. Caminho versionado can\u00f4nico.",
        "operationId": "getCompanyInfo",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "sucesso": {
                    "value": {
                      "data": {
                        "address": "111, R. Politeama 35BI, Feira de Santana - BA",
                        "clients": [
                          "Trifase",
                          "Nosso Centro Medico",
                          "Lamtractor",
                          "Qualiteste",
                          "IDB ATACADISTA",
                          "Atacad\u00e3o S\u00e3o Roque",
                          "Nordeste Irriga\u00e7\u00e3o e Maquinas",
                          "COMELI\u00ca",
                          "MULTCAIXA",
                          "NORDESTE ENERGIA SOLAR",
                          "ARMAZEM CEARENSE ATACADISTA",
                          "Nova Op\u00e7\u00e3o Distribuidora"
                        ],
                        "description": "Especialistas em customiza\u00e7\u00e3o de rotinas, relat\u00f3rios e parametriza\u00e7\u00e3o do ERP Winthor.",
                        "email": "contato@solutnetwork.com.br",
                        "mission": "Levar efici\u00eancia atrav\u00e9s de consultoria t\u00e9cnica especializada em Winthor e infraestrutura robusta.",
                        "name": "Solut Network",
                        "phone": "(75) 9913-4492",
                        "services": {
                          "analytics": [
                            "Tableau",
                            "PowerBi",
                            "Mybi Target"
                          ],
                          "consulting": [
                            "Winthor Customiza\u00e7\u00e3o",
                            "Rotinas 800",
                            "PL/SQL",
                            "Oracle",
                            "Rotinas Personalizadas",
                            "Relat\u00f3rios 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\u00e1cia em Solu\u00e7\u00f5es 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"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoResponse"
                }
              }
            },
            "description": "Dados institucionais obtidos com sucesso.",
            "headers": {
              "API-Version": {
                "description": "Vers\u00e3o maior da API que atendeu a requisi\u00e7\u00e3o.",
                "schema": {
                  "examples": [
                    "1"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "M\u00e1ximo de requisi\u00e7\u00f5es permitidas na janela (60).",
                "schema": {
                  "examples": [
                    60
                  ],
                  "type": "integer"
                }
              },
              "RateLimit-Policy": {
                "description": "Pol\u00edtica vigente no formato \"limite;w=janela_em_segundos\".",
                "schema": {
                  "examples": [
                    "60;w=60"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requisi\u00e7\u00f5es restantes na janela atual.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Segundos at\u00e9 o in\u00edcio da pr\u00f3xima janela.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              }
            }
          },
          "405": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "method_not_allowed",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
                        "message": "M\u00e9todo HTTP n\u00e3o permitido. Use GET (ou HEAD).",
                        "status": 405
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "M\u00e9todo HTTP n\u00e3o permitido. Use GET (ou HEAD)."
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "too_many_requests",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Aguarde o tempo indicado no cabe\u00e7alho Retry-After e tente novamente. Consulte /docs#limite.",
                        "message": "Limite de requisi\u00e7\u00f5es excedido. Aguarde o tempo de Retry-After.",
                        "status": 429
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite de requisi\u00e7\u00f5es excedido. Aguarde o tempo de Retry-After.",
            "headers": {
              "RateLimit-Limit": {
                "description": "M\u00e1ximo de requisi\u00e7\u00f5es permitidas na janela (60).",
                "schema": {
                  "examples": [
                    60
                  ],
                  "type": "integer"
                }
              },
              "RateLimit-Policy": {
                "description": "Pol\u00edtica vigente no formato \"limite;w=janela_em_segundos\".",
                "schema": {
                  "examples": [
                    "60;w=60"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requisi\u00e7\u00f5es restantes na janela atual.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Segundos at\u00e9 o in\u00edcio da pr\u00f3xima janela.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Segundos de espera antes de tentar novamente.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "internal_error",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
                        "message": "Erro interno no servidor. A resposta n\u00e3o inclui rastreamento da pilha.",
                        "status": 500
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Erro interno no servidor. A resposta n\u00e3o inclui rastreamento da pilha."
          }
        },
        "security": [],
        "summary": "Dados institucionais da Solut Network (v1)",
        "tags": [
          "Institucional"
        ]
      }
    },
    "/api/v1/pages": {
      "get": {
        "description": "Retorna em JSON as p\u00e1ginas p\u00fablicas index\u00e1veis (as mesmas do sitemap.xml), cada uma com t\u00edtulo, caminho e URL absoluta. N\u00e3o exige autentica\u00e7\u00e3o.",
        "operationId": "listPublicPages",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "sucesso": {
                    "value": {
                      "data": {
                        "pages": [
                          {
                            "path": "/",
                            "title": "In\u00edcio",
                            "url": "https://solutnetwork.com.br/"
                          },
                          {
                            "path": "/contato",
                            "title": "Contato",
                            "url": "https://solutnetwork.com.br/contato"
                          }
                        ]
                      },
                      "status": "success"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/PagesResponse"
                }
              }
            },
            "description": "Lista de p\u00e1ginas p\u00fablicas.",
            "headers": {
              "API-Version": {
                "description": "Vers\u00e3o maior da API que atendeu a requisi\u00e7\u00e3o.",
                "schema": {
                  "examples": [
                    "1"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "M\u00e1ximo de requisi\u00e7\u00f5es permitidas na janela (60).",
                "schema": {
                  "examples": [
                    60
                  ],
                  "type": "integer"
                }
              },
              "RateLimit-Policy": {
                "description": "Pol\u00edtica vigente no formato \"limite;w=janela_em_segundos\".",
                "schema": {
                  "examples": [
                    "60;w=60"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requisi\u00e7\u00f5es restantes na janela atual.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Segundos at\u00e9 o in\u00edcio da pr\u00f3xima janela.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              }
            }
          },
          "405": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "method_not_allowed",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
                        "message": "M\u00e9todo HTTP n\u00e3o permitido. Use GET (ou HEAD).",
                        "status": 405
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "M\u00e9todo HTTP n\u00e3o permitido. Use GET (ou HEAD)."
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "too_many_requests",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Aguarde o tempo indicado no cabe\u00e7alho Retry-After e tente novamente. Consulte /docs#limite.",
                        "message": "Limite de requisi\u00e7\u00f5es excedido. Aguarde o tempo de Retry-After.",
                        "status": 429
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limite de requisi\u00e7\u00f5es excedido. Aguarde o tempo de Retry-After.",
            "headers": {
              "RateLimit-Limit": {
                "description": "M\u00e1ximo de requisi\u00e7\u00f5es permitidas na janela (60).",
                "schema": {
                  "examples": [
                    60
                  ],
                  "type": "integer"
                }
              },
              "RateLimit-Policy": {
                "description": "Pol\u00edtica vigente no formato \"limite;w=janela_em_segundos\".",
                "schema": {
                  "examples": [
                    "60;w=60"
                  ],
                  "type": "string"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requisi\u00e7\u00f5es restantes na janela atual.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Segundos at\u00e9 o in\u00edcio da pr\u00f3xima janela.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Segundos de espera antes de tentar novamente.",
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "padrao": {
                    "value": {
                      "error": {
                        "code": "internal_error",
                        "docs": "https://solutnetwork.com.br/docs",
                        "hint": "Consulte /openapi.json para ver os endpoints dispon\u00edveis.",
                        "message": "Erro interno no servidor. A resposta n\u00e3o inclui rastreamento da pilha.",
                        "status": 500
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Erro interno no servidor. A resposta n\u00e3o inclui rastreamento da pilha."
          }
        },
        "security": [],
        "summary": "Lista de p\u00e1ginas p\u00fablicas",
        "tags": [
          "Descoberta"
        ]
      }
    },
    "/contato": {
      "post": {
        "description": "Processa o formul\u00e1rio HTML da p\u00e1gina /contato. L\u00ea os campos name, email, phone, subject e message de application/x-www-form-urlencoded. name, email, subject e message s\u00e3o obrigat\u00f3rios; phone \u00e9 opcional. A view sempre responde com redirecionamento HTTP 302 para GET /contato e uma mensagem flash na sess\u00e3o: campos obrigat\u00f3rios ausentes geram o aviso de erro \"Por favor, preencha todos os campos obrigat\u00f3rios.\"; envio dos dois e-mails (contato@solutnetwork.com.br e c\u00f3pia ao remetente) gera aviso de sucesso; falha de SMTP ou exce\u00e7\u00e3o gera \"Erro ao enviar mensagem. Tente novamente mais tarde.\". N\u00e3o devolve JSON.",
        "operationId": "postContact",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "examples": {
                "completo": {
                  "value": {
                    "email": "maria@empresa.com.br",
                    "message": "Gostaria de um or\u00e7amento para parametriza\u00e7\u00e3o do ERP.",
                    "name": "Maria Silva",
                    "phone": "(75) 99999-0000",
                    "subject": "Consultoria Winthor"
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/ContactForm"
              }
            }
          },
          "required": true
        },
        "responses": {
          "302": {
            "content": {
              "text/html": {
                "schema": {
                  "description": "Corpo HTML curto do redirecionamento (pode ser ignorado).",
                  "type": "string"
                }
              }
            },
            "description": "Redireciona para GET /contato. O resultado (sucesso ou erro de valida\u00e7\u00e3o/envio) vai na mensagem flash da sess\u00e3o Flask, n\u00e3o no corpo.",
            "headers": {
              "Location": {
                "description": "URL da p\u00e1gina de contato.",
                "schema": {
                  "examples": [
                    "https://solutnetwork.com.br/contato"
                  ],
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [],
        "summary": "Enviar formul\u00e1rio de contato",
        "tags": [
          "Contato"
        ]
      }
    },
    "/llms.txt": {
      "get": {
        "description": "Guia em portugu\u00eas para agentes e ferramentas: quando usar cada servi\u00e7o, p\u00e1ginas p\u00fablicas, recursos para desenvolvedores e canais de contato. As URLs acompanham o host da requisi\u00e7\u00e3o.",
        "operationId": "getLlmsTxt",
        "responses": {
          "200": {
            "content": {
              "text/plain": {
                "examples": {
                  "inicio": {
                    "value": "# Solut Network\n\n> Empresa B2B de tecnologia em Feira de Santana, Bahia...\n"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/PlainTextDocument"
                }
              }
            },
            "description": "Guia em texto simples."
          }
        },
        "security": [],
        "summary": "Guia em texto para agentes",
        "tags": [
          "Descoberta"
        ]
      }
    },
    "/robots.txt": {
      "get": {
        "description": "Retorna robots.txt com User-agent: *, Allow: /, a URL do sitemap e um coment\u00e1rio apontando para /llms.txt.",
        "operationId": "getRobots",
        "responses": {
          "200": {
            "content": {
              "text/plain": {
                "examples": {
                  "padrao": {
                    "value": "User-agent: *\nAllow: /\nSitemap: https://solutnetwork.com.br/sitemap.xml\n# llms: https://solutnetwork.com.br/llms.txt\n"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/PlainTextDocument"
                }
              }
            },
            "description": "Arquivo de texto robots.txt."
          }
        },
        "security": [],
        "summary": "Instru\u00e7\u00f5es de rastreamento",
        "tags": [
          "Descoberta"
        ]
      }
    },
    "/sitemap.xml": {
      "get": {
        "description": "Gera o sitemap.xml com as rotas p\u00fablicas index\u00e1veis. URLs absolutas acompanham o host e o esquema da requisi\u00e7\u00e3o.",
        "operationId": "getSitemap",
        "responses": {
          "200": {
            "content": {
              "application/xml": {
                "examples": {
                  "trecho": {
                    "value": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url><loc>https://solutnetwork.com.br/</loc></url>\n</urlset>\n"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/XmlDocument"
                }
              }
            },
            "description": "Sitemap no vocabul\u00e1rio sitemaps.org."
          }
        },
        "security": [],
        "summary": "Sitemap XML das p\u00e1ginas p\u00fablicas",
        "tags": [
          "Descoberta"
        ]
      }
    }
  },
  "security": [],
  "servers": [
    {
      "description": "URL base da requisi\u00e7\u00e3o atual",
      "url": "https://solutnetwork.com.br"
    }
  ],
  "tags": [
    {
      "description": "Dados p\u00fablicos da empresa, sem autentica\u00e7\u00e3o.",
      "name": "Institucional"
    },
    {
      "description": "Formul\u00e1rio p\u00fablico de contato do site (POST com redirecionamento).",
      "name": "Contato"
    },
    {
      "description": "Arquivos de rastreamento e guia para agentes.",
      "name": "Descoberta"
    }
  ],
  "x-api-versioning": {
    "current": "v1",
    "deprecation": "Cabe\u00e7alhos Deprecation e Sunset antes de qualquer descontinua\u00e7\u00e3o.",
    "header": "API-Version",
    "legacyAliases": {
      "/api/company-info": "/api/v1/company-info"
    },
    "scheme": "url-path"
  },
  "x-rateLimit": {
    "headers": "RateLimit-*",
    "limit": 60,
    "scope": "ip",
    "windowSeconds": 60
  }
}
