{
  "openapi": "3.1.0",
  "info": {
    "title": "API pública da Conforpés (somente leitura)",
    "version": "1.0.0",
    "summary": "Conteúdo público do site da Conforpés: artigos do blog, páginas institucionais, materiais e busca.",
    "description": "Subconjunto documentado da REST API do WordPress do site conforpes.com.br. Todas as operações são GET, públicas e sem autenticação, e devolvem o mesmo conteúdo publicado no site, em português do Brasil.\n\nUse para responder perguntas sobre próteses ortopédicas, amputação, reabilitação e sobre a própria clínica (unidades, contato, políticas) com base no que a Conforpés publica. Não há operações de escrita, agendamento ou dados de pacientes; para atendimento, encaminhe a pessoa para https://www.conforpes.com.br/contato/.\n\nNão há limite de requisições publicado. Faça requisições sequenciais, use `_fields` para reduzir a resposta e guarde os resultados em cache; o conteúdo muda poucas vezes por semana.\n\nErros seguem o formato JSON `{code, message, data: {status}}`.",
    "contact": {
      "name": "Conforpés",
      "url": "https://www.conforpes.com.br/contato/"
    },
    "termsOfService": "https://www.conforpes.com.br/termos-de-servico/"
  },
  "externalDocs": {
    "description": "Documentação legível e exemplos",
    "url": "https://www.conforpes.com.br/docs"
  },
  "servers": [
    {
      "url": "https://www.conforpes.com.br/wp-json",
      "description": "Produção"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Conteúdo",
      "description": "Artigos, páginas e materiais publicados."
    },
    {
      "name": "Categorias",
      "description": "Categorias editoriais dos artigos."
    },
    {
      "name": "Busca",
      "description": "Busca textual em todo o conteúdo público."
    }
  ],
  "paths": {
    "/wp/v2/posts": {
      "get": {
        "operationId": "listPosts",
        "summary": "Listar artigos do blog",
        "description": "Lista artigos publicados, do mais recente para o mais antigo. Filtre por texto (`search`), categoria (`categories`) ou `slug`.",
        "tags": [
          "Conteúdo"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/search"
          },
          {
            "$ref": "#/components/parameters/categories"
          },
          {
            "$ref": "#/components/parameters/slug"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/orderby"
          },
          {
            "$ref": "#/components/parameters/order"
          },
          {
            "$ref": "#/components/parameters/_fields"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada.",
            "headers": {
              "X-WP-Total": {
                "description": "Total de itens encontrados.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-WP-TotalPages": {
                "description": "Total de páginas para o per_page usado.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Post"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/wp/v2/posts/{id}": {
      "get": {
        "operationId": "getPost",
        "summary": "Obter um artigo",
        "description": "Devolve um artigo pelo ID, com o conteúdo completo em HTML.",
        "tags": [
          "Conteúdo"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/id"
          },
          {
            "$ref": "#/components/parameters/_fields"
          }
        ],
        "responses": {
          "200": {
            "description": "Item encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                }
              }
            }
          },
          "404": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/wp/v2/pages": {
      "get": {
        "operationId": "listPages",
        "summary": "Listar páginas institucionais",
        "description": "Lista páginas publicadas, como Sobre (`slug=sobre`), Contato (`slug=contato`) e Privacidade (`slug=privacidade`).",
        "tags": [
          "Conteúdo"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/search"
          },
          {
            "$ref": "#/components/parameters/slug"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/_fields"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada.",
            "headers": {
              "X-WP-Total": {
                "description": "Total de itens encontrados.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-WP-TotalPages": {
                "description": "Total de páginas para o per_page usado.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Page"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/wp/v2/pages/{id}": {
      "get": {
        "operationId": "getPage",
        "summary": "Obter uma página",
        "description": "Devolve uma página institucional pelo ID.",
        "tags": [
          "Conteúdo"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/id"
          },
          {
            "$ref": "#/components/parameters/_fields"
          }
        ],
        "responses": {
          "200": {
            "description": "Item encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                }
              }
            }
          },
          "404": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/wp/v2/material": {
      "get": {
        "operationId": "listMaterials",
        "summary": "Listar materiais educativos",
        "description": "Lista materiais educativos publicados (guias e e-books).",
        "tags": [
          "Conteúdo"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/search"
          },
          {
            "$ref": "#/components/parameters/slug"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/_fields"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada.",
            "headers": {
              "X-WP-Total": {
                "description": "Total de itens encontrados.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-WP-TotalPages": {
                "description": "Total de páginas para o per_page usado.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Material"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/wp/v2/categories": {
      "get": {
        "operationId": "listCategories",
        "summary": "Listar categorias do blog",
        "description": "Lista as categorias editoriais, com quantidade de artigos e descrição.",
        "tags": [
          "Categorias"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/search"
          },
          {
            "$ref": "#/components/parameters/slug"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/hide_empty"
          },
          {
            "$ref": "#/components/parameters/_fields"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada.",
            "headers": {
              "X-WP-Total": {
                "description": "Total de itens encontrados.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-WP-TotalPages": {
                "description": "Total de páginas para o per_page usado.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Category"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/wp/v2/search": {
      "get": {
        "operationId": "searchContent",
        "summary": "Buscar no site",
        "description": "Busca textual em artigos, páginas e materiais. Cada resultado traz título, URL pública e tipo.",
        "tags": [
          "Busca"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/searchRequired"
          },
          {
            "$ref": "#/components/parameters/type"
          },
          {
            "$ref": "#/components/parameters/subtype"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/page"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada.",
            "headers": {
              "X-WP-Total": {
                "description": "Total de itens encontrados.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-WP-TotalPages": {
                "description": "Total de páginas para o per_page usado.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SearchResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Erro no formato padrão da REST API do WordPress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "id": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "ID numérico do item.",
        "schema": {
          "type": "integer",
          "minimum": 1
        }
      },
      "search": {
        "name": "search",
        "in": "query",
        "description": "Texto a procurar no título e no conteúdo.",
        "schema": {
          "type": "string"
        }
      },
      "searchRequired": {
        "name": "search",
        "in": "query",
        "required": true,
        "description": "Texto a procurar.",
        "schema": {
          "type": "string",
          "minLength": 1
        }
      },
      "slug": {
        "name": "slug",
        "in": "query",
        "description": "Slug exato (parte final da URL).",
        "schema": {
          "type": "string"
        }
      },
      "categories": {
        "name": "categories",
        "in": "query",
        "description": "IDs de categoria, separados por vírgula (veja listCategories).",
        "schema": {
          "type": "string",
          "pattern": "^\\d+(,\\d+)*$"
        }
      },
      "per_page": {
        "name": "per_page",
        "in": "query",
        "description": "Itens por página.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 10
        }
      },
      "page": {
        "name": "page",
        "in": "query",
        "description": "Página de resultados (começa em 1).",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "default": 1
        }
      },
      "orderby": {
        "name": "orderby",
        "in": "query",
        "description": "Campo de ordenação.",
        "schema": {
          "type": "string",
          "enum": [
            "date",
            "modified",
            "title",
            "relevance",
            "id",
            "slug"
          ],
          "default": "date"
        }
      },
      "order": {
        "name": "order",
        "in": "query",
        "description": "Direção da ordenação.",
        "schema": {
          "type": "string",
          "enum": [
            "asc",
            "desc"
          ],
          "default": "desc"
        }
      },
      "hide_empty": {
        "name": "hide_empty",
        "in": "query",
        "description": "Ocultar categorias sem artigos.",
        "schema": {
          "type": "boolean",
          "default": false
        }
      },
      "type": {
        "name": "type",
        "in": "query",
        "description": "Tipo de objeto buscado.",
        "schema": {
          "type": "string",
          "enum": [
            "post",
            "term"
          ],
          "default": "post"
        }
      },
      "subtype": {
        "name": "subtype",
        "in": "query",
        "description": "Subtipo buscado.",
        "schema": {
          "type": "string",
          "enum": [
            "any",
            "post",
            "page",
            "material",
            "category"
          ],
          "default": "any"
        }
      },
      "_fields": {
        "name": "_fields",
        "in": "query",
        "description": "Campos a devolver, separados por vírgula (ex.: id,title,link).",
        "schema": {
          "type": "string"
        }
      }
    },
    "schemas": {
      "Rendered": {
        "type": "object",
        "required": [
          "rendered"
        ],
        "properties": {
          "rendered": {
            "type": "string",
            "description": "HTML renderizado."
          }
        }
      },
      "Post": {
        "type": "object",
        "required": [
          "id",
          "date",
          "slug",
          "link",
          "title"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "date": {
            "type": "string",
            "format": "date-time",
            "description": "Data de publicação (horário de Brasília, sem fuso)."
          },
          "modified": {
            "type": "string",
            "format": "date-time"
          },
          "slug": {
            "type": "string"
          },
          "link": {
            "type": "string",
            "format": "uri",
            "description": "URL pública do artigo."
          },
          "title": {
            "$ref": "#/components/schemas/Rendered"
          },
          "excerpt": {
            "$ref": "#/components/schemas/Rendered"
          },
          "content": {
            "$ref": "#/components/schemas/Rendered"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "IDs de categoria."
          }
        }
      },
      "Page": {
        "type": "object",
        "required": [
          "id",
          "slug",
          "link",
          "title"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "modified": {
            "type": "string",
            "format": "date-time"
          },
          "slug": {
            "type": "string"
          },
          "link": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "$ref": "#/components/schemas/Rendered"
          },
          "content": {
            "$ref": "#/components/schemas/Rendered"
          }
        }
      },
      "Material": {
        "type": "object",
        "required": [
          "id",
          "slug",
          "link",
          "title"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "slug": {
            "type": "string"
          },
          "link": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "$ref": "#/components/schemas/Rendered"
          },
          "content": {
            "$ref": "#/components/schemas/Rendered"
          }
        }
      },
      "Category": {
        "type": "object",
        "required": [
          "id",
          "name",
          "slug"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "description": "Artigos publicados na categoria."
          },
          "link": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "SearchResult": {
        "type": "object",
        "required": [
          "id",
          "title",
          "url",
          "type"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "URL pública do resultado."
          },
          "type": {
            "type": "string",
            "enum": [
              "post",
              "term"
            ]
          },
          "subtype": {
            "type": "string"
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Código do erro (ex.: rest_post_invalid_id, rest_invalid_param, rest_no_route)."
          },
          "message": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer"
              },
              "params": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Parâmetros inválidos e o motivo."
              }
            }
          }
        }
      }
    }
  }
}
