{
  "openapi": "3.1.0",
  "info": {
    "title": "Doutor Fiscal Public API",
    "version": "1.0.0",
    "summary": "API pública somente leitura do Doutor Fiscal.",
    "description": "Publica em JSON os mesmos fatos das páginas de https://www.doutorfiscal.com: identidade do site, empresa responsável, canais de contato, páginas indexáveis, planos da lista de espera e perguntas frequentes.\n\n**Somente leitura.** Todas as operações são `GET`, não há autenticação e não existe endpoint de escrita, webhook ou criação de lead. O produto está em lista de espera: a única ação disponível a um usuário é preencher o formulário da página inicial, que grava a inscrição no próprio navegador.\n\nToda página do site também responde em markdown — acrescente `.md` ao caminho ou envie `Accept: text/markdown`. O guia para agentes fica em `/llms.txt`.",
    "termsOfService": "https://www.doutorfiscal.com/termos",
    "contact": {
      "name": "UNFLD",
      "email": "hello@unfld.com.br",
      "url": "https://www.doutorfiscal.com/contato"
    }
  },
  "servers": [
    {
      "url": "https://www.doutorfiscal.com",
      "description": "Produção"
    }
  ],
  "externalDocs": {
    "description": "Documentação para desenvolvedores e agentes",
    "url": "https://www.doutorfiscal.com/desenvolvedores"
  },
  "tags": [
    {
      "name": "Descoberta",
      "description": "Onde a API começa e o que ela publica."
    },
    {
      "name": "Site",
      "description": "O site, suas páginas e o conteúdo publicado nelas."
    },
    {
      "name": "Empresa",
      "description": "A pessoa jurídica que constrói e opera o produto."
    },
    {
      "name": "Contato",
      "description": "Como chegar a uma pessoa."
    },
    {
      "name": "Planos",
      "description": "Preços da lista de espera."
    }
  ],
  "security": [],
  "paths": {
    "/api": {
      "get": {
        "operationId": "getApiIndex",
        "summary": "Ponto de entrada da API",
        "description": "Devolve o nome da API, a versão corrente, onde está a especificação OpenAPI e a URL de cada versão. Use como primeira chamada quando só se conhece o domínio.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Ponto de entrada da API",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1": {
      "get": {
        "operationId": "getApiV1Index",
        "summary": "Recursos da versão 1",
        "description": "Lista todos os recursos de leitura desta versão, com o operationId correspondente na especificação OpenAPI.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Recursos da versão 1",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiVersionIndex"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/site": {
      "get": {
        "operationId": "getSite",
        "summary": "Identidade do site e estágio do produto",
        "description": "Nome, descrição, idioma, data da última alteração e o estágio em que o produto está. Traz também o que esta API consegue fazer — somente leitura, sem autenticação — e onde ficam os arquivos para agentes. Use antes de afirmar que o Doutor Fiscal já está em operação.",
        "tags": [
          "Site"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Identidade do site e estágio do produto",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Site"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/company": {
      "get": {
        "operationId": "getCompany",
        "summary": "Empresa responsável pelo produto",
        "description": "Razão social, CNPJ, endereço, telefone, WhatsApp Business oficial e e-mails da UNFLD, a empresa que constrói e opera o Doutor Fiscal. Use para verificar que existe uma pessoa jurídica por trás do site.",
        "tags": [
          "Empresa"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Empresa responsável pelo produto",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Company"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/contact": {
      "get": {
        "operationId": "listContactChannels",
        "summary": "Canais de contato, por assunto",
        "description": "Todos os canais publicados: WhatsApp Business oficial, atendimento, comercial, encarregado de LGPD, segurança, imprensa e telefone. Cada um traz o assunto que cobre, para encaminhar o usuário ao canal certo em vez de ao genérico.",
        "tags": [
          "Contato"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Canais de contato, por assunto",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactChannelList"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/contact/{channelId}": {
      "get": {
        "operationId": "getContactChannel",
        "summary": "Um canal de contato",
        "description": "Devolve um único canal pelo seu identificador estável.",
        "tags": [
          "Contato"
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "required": true,
            "description": "Identificador do canal.",
            "schema": {
              "type": "string",
              "enum": [
                "whatsapp",
                "hello",
                "sales",
                "privacy",
                "security",
                "press",
                "phone"
              ]
            }
          }
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Um canal de contato",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactChannel"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/pages": {
      "get": {
        "operationId": "listPages",
        "summary": "Páginas indexáveis do site",
        "description": "Cada página com a sua URL canônica, a URL da variante markdown, os apelidos em inglês, título e descrição. Use para percorrer o site inteiro sem interpretar HTML.",
        "tags": [
          "Site"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Páginas indexáveis do site",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageList"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/plans": {
      "get": {
        "operationId": "listPlans",
        "summary": "Planos e preços da lista de espera",
        "description": "Os três planos publicados, com valor mensal em reais, público-alvo e o que cada um inclui. São preços de lista de espera: nenhum plano pode ser contratado hoje.",
        "tags": [
          "Planos"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Planos e preços da lista de espera",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlanList"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/plans/{planId}": {
      "get": {
        "operationId": "getPlan",
        "summary": "Um plano",
        "description": "Devolve um único plano pelo seu identificador estável.",
        "tags": [
          "Planos"
        ],
        "parameters": [
          {
            "name": "planId",
            "in": "path",
            "required": true,
            "description": "Identificador do plano.",
            "schema": {
              "type": "string",
              "enum": [
                "mei",
                "micro",
                "pequena"
              ]
            }
          }
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Um plano",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Plan"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/api/v1/faq": {
      "get": {
        "operationId": "listFaqEntries",
        "summary": "Perguntas frequentes",
        "description": "As perguntas publicadas na página inicial, com a resposta oficial de cada uma. Use para responder sobre contador obrigatório, LGPD, Simples Nacional e cancelamento sem inventar texto.",
        "tags": [
          "Site"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Perguntas frequentes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FaqList"
                }
              }
            }
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApiDocument",
        "summary": "Esta especificação, em JSON",
        "description": "O documento OpenAPI que descreve toda a API pública do Doutor Fiscal.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "O documento OpenAPI.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Documento OpenAPI 3.1."
                }
              }
            }
          }
        }
      }
    },
    "/api/openapi.json": {
      "get": {
        "operationId": "getOpenApiDocumentMirror",
        "summary": "Esta especificação, em JSON",
        "description": "O documento OpenAPI que descreve toda a API pública do Doutor Fiscal.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "O documento OpenAPI.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Documento OpenAPI 3.1."
                }
              }
            }
          }
        }
      }
    },
    "/openapi.yaml": {
      "get": {
        "operationId": "getOpenApiDocumentYaml",
        "summary": "Esta especificação, em YAML",
        "description": "A mesma especificação servida como `application/yaml`, para ferramentas que preferem YAML.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "O documento OpenAPI.",
            "content": {
              "application/yaml": {
                "schema": {
                  "type": "object",
                  "description": "Documento OpenAPI 3.1."
                }
              }
            }
          }
        }
      }
    },
    "/api/openapi.yaml": {
      "get": {
        "operationId": "getOpenApiDocumentYamlMirror",
        "summary": "Esta especificação, em YAML",
        "description": "A mesma especificação servida como `application/yaml`, para ferramentas que preferem YAML.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "O documento OpenAPI.",
            "content": {
              "application/yaml": {
                "schema": {
                  "type": "object",
                  "description": "Documento OpenAPI 3.1."
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {},
    "schemas": {
      "Error": {
        "type": "object",
        "description": "Corpo de qualquer resposta de erro desta API. Nunca é HTML, para que um agente possa se recuperar sem interpretar uma página.",
        "required": [
          "error"
        ],
        "additionalProperties": false,
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "status",
              "code",
              "message"
            ],
            "additionalProperties": false,
            "properties": {
              "status": {
                "type": "integer",
                "description": "Código HTTP repetido no corpo.",
                "examples": [
                  404
                ]
              },
              "code": {
                "type": "string",
                "description": "Código estável e legível por máquina.",
                "enum": [
                  "resource_not_found",
                  "method_not_allowed",
                  "not_acceptable"
                ]
              },
              "message": {
                "type": "string",
                "description": "O que aconteceu, em português."
              },
              "hint": {
                "type": "string",
                "description": "O que fazer em seguida para resolver."
              },
              "documentation": {
                "type": "string",
                "format": "uri",
                "description": "Página de documentação."
              },
              "specification": {
                "type": "string",
                "format": "uri",
                "description": "Este documento OpenAPI."
              }
            }
          }
        }
      },
      "ApiIndex": {
        "type": "object",
        "description": "Ponto de entrada da API: versões disponíveis e onde está a especificação.",
        "required": [
          "name",
          "version",
          "access",
          "versions"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string",
            "description": "Versão semântica da API."
          },
          "access": {
            "type": "string",
            "enum": [
              "read-only"
            ]
          },
          "authentication": {
            "type": "string",
            "enum": [
              "none"
            ]
          },
          "description": {
            "type": "string"
          },
          "site": {
            "type": "string",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "specification": {
            "type": "string",
            "format": "uri"
          },
          "llmsTxt": {
            "type": "string",
            "format": "uri"
          },
          "versions": {
            "type": "array",
            "description": "Versões da API que respondem hoje.",
            "items": {
              "type": "object",
              "required": [
                "version",
                "url"
              ],
              "properties": {
                "version": {
                  "type": "string",
                  "examples": [
                    "v1"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "current",
                    "deprecated"
                  ]
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "ApiVersionIndex": {
        "type": "object",
        "description": "Os recursos desta versão da API, com o operationId de cada um.",
        "required": [
          "version",
          "resources"
        ],
        "properties": {
          "version": {
            "type": "string"
          },
          "access": {
            "type": "string",
            "enum": [
              "read-only"
            ]
          },
          "authentication": {
            "type": "string",
            "enum": [
              "none"
            ]
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "specification": {
            "type": "string",
            "format": "uri"
          },
          "resources": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "operationId",
                "url"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "operationId": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "description": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Site": {
        "type": "object",
        "description": "Identidade do site, estágio do produto e o que esta API consegue (e não consegue) fazer.",
        "required": [
          "name",
          "url",
          "locale",
          "status",
          "operator"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "locale": {
            "type": "string",
            "examples": [
              "pt-BR"
            ]
          },
          "lastModified": {
            "type": "string",
            "format": "date"
          },
          "status": {
            "type": "object",
            "required": [
              "stage",
              "inOperation"
            ],
            "properties": {
              "stage": {
                "type": "string",
                "enum": [
                  "waitlist",
                  "live"
                ]
              },
              "label": {
                "type": "string"
              },
              "inOperation": {
                "type": "boolean",
                "description": "`false` enquanto o produto está em lista de espera."
              },
              "note": {
                "type": "string"
              }
            }
          },
          "operator": {
            "$ref": "#/components/schemas/OperatorSummary"
          },
          "capabilities": {
            "type": "object",
            "description": "O que um cliente pode contar com este domínio.",
            "properties": {
              "readOnly": {
                "type": "boolean"
              },
              "authentication": {
                "type": "string",
                "enum": [
                  "none"
                ]
              },
              "rateLimit": {
                "type": "object",
                "properties": {
                  "enforced": {
                    "type": "boolean"
                  },
                  "policy": {
                    "type": "string"
                  },
                  "note": {
                    "type": "string"
                  }
                }
              },
              "markdownVariants": {
                "type": "object",
                "properties": {
                  "supported": {
                    "type": "boolean"
                  },
                  "note": {
                    "type": "string"
                  }
                }
              },
              "waitlist": {
                "type": "object",
                "description": "Como um usuário entra na lista — e por que não há API para isso.",
                "properties": {
                  "channel": {
                    "type": "string",
                    "enum": [
                      "web-form"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "api": {
                    "type": "boolean",
                    "enum": [
                      false
                    ]
                  },
                  "note": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "agentFiles": {
            "type": "object",
            "description": "Arquivos legíveis por máquina publicados na raiz do domínio.",
            "properties": {
              "llmsTxt": {
                "type": "string",
                "format": "uri"
              },
              "sitemap": {
                "type": "string",
                "format": "uri"
              },
              "robots": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "documentation": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "OperatorSummary": {
        "type": "object",
        "description": "A empresa responsável, em resumo.",
        "required": [
          "name",
          "legalName",
          "taxId"
        ],
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "UNFLD"
            ]
          },
          "legalName": {
            "type": "string"
          },
          "taxId": {
            "type": "string",
            "description": "CNPJ formatado."
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Company": {
        "type": "object",
        "description": "Registro institucional completo da empresa que constrói e opera o produto.",
        "required": [
          "name",
          "legalName",
          "taxId",
          "address"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "legalName": {
            "type": "string"
          },
          "taxId": {
            "type": "object",
            "required": [
              "type",
              "value"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "CNPJ"
                ]
              },
              "value": {
                "type": "string",
                "examples": [
                  "62.855.761/0001-82"
                ]
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "productPage": {
            "type": "string",
            "format": "uri"
          },
          "foundingDate": {
            "type": "string",
            "format": "date"
          },
          "telephone": {
            "type": "object",
            "properties": {
              "display": {
                "type": "string"
              },
              "e164": {
                "type": "string",
                "examples": [
                  "+554334228348"
                ]
              }
            }
          },
          "whatsapp": {
            "type": "object",
            "description": "WhatsApp Business oficial do Doutor Fiscal, o canal de trabalho da empresa.",
            "properties": {
              "display": {
                "type": "string",
                "examples": [
                  "(53) 99995-4138"
                ]
              },
              "e164": {
                "type": "string",
                "examples": [
                  "+5553999954138"
                ]
              },
              "href": {
                "type": "string",
                "format": "uri",
                "examples": [
                  "https://wa.link/03wpz4"
                ]
              },
              "label": {
                "type": "string"
              }
            }
          },
          "email": {
            "type": "object",
            "description": "Um endereço por assunto.",
            "properties": {
              "hello": {
                "type": "string",
                "format": "email"
              },
              "sales": {
                "type": "string",
                "format": "email"
              },
              "privacy": {
                "type": "string",
                "format": "email"
              },
              "security": {
                "type": "string",
                "format": "email"
              },
              "press": {
                "type": "string",
                "format": "email"
              }
            }
          },
          "address": {
            "$ref": "#/components/schemas/PostalAddress"
          },
          "operates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "source": {
            "type": "object",
            "description": "De onde estes dados vêm — o catálogo público da própria empresa.",
            "properties": {
              "organization": {
                "type": "string",
                "format": "uri"
              },
              "contact": {
                "type": "string",
                "format": "uri"
              },
              "note": {
                "type": "string"
              }
            }
          }
        }
      },
      "PostalAddress": {
        "type": "object",
        "description": "Endereço no formato brasileiro, com o CEP e a sigla da UF separados.",
        "required": [
          "street",
          "city",
          "region",
          "postalCode",
          "country"
        ],
        "properties": {
          "street": {
            "type": "string"
          },
          "district": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "region": {
            "type": "string",
            "description": "Sigla da unidade federativa.",
            "examples": [
              "SP"
            ]
          },
          "postalCode": {
            "type": "string",
            "examples": [
              "01306-901"
            ]
          },
          "country": {
            "type": "string",
            "description": "Código ISO 3166-1 alpha-2.",
            "examples": [
              "BR"
            ]
          },
          "formatted": {
            "type": "string"
          }
        }
      },
      "ContactChannel": {
        "type": "object",
        "description": "Um canal de atendimento, com o assunto que ele cobre.",
        "required": [
          "id",
          "label",
          "value",
          "href"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador estável do canal.",
            "enum": [
              "whatsapp",
              "hello",
              "sales",
              "privacy",
              "security",
              "press",
              "phone"
            ]
          },
          "label": {
            "type": "string"
          },
          "contactType": {
            "type": "string",
            "description": "Vocabulário de `ContactPoint.contactType` do schema.org."
          },
          "value": {
            "type": "string",
            "description": "E-mail, telefone ou número de WhatsApp."
          },
          "href": {
            "type": "string",
            "description": "URI `mailto:`, `tel:` ou `https://wa.link/` do canal."
          },
          "note": {
            "type": "string",
            "description": "Quando usar este canal."
          }
        }
      },
      "ContactChannelList": {
        "type": "object",
        "description": "Todos os canais publicados, na ordem em que a página de contato os apresenta.",
        "required": [
          "channels"
        ],
        "properties": {
          "page": {
            "type": "string",
            "format": "uri"
          },
          "channels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactChannel"
            }
          }
        }
      },
      "Page": {
        "type": "object",
        "description": "Uma página indexável, com a URL da sua variante markdown.",
        "required": [
          "path",
          "url",
          "markdownUrl",
          "title",
          "description"
        ],
        "properties": {
          "path": {
            "type": "string",
            "examples": [
              "/sobre"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "markdownUrl": {
            "type": "string",
            "format": "uri",
            "description": "Mesma página em markdown. Também servida na URL canônica com `Accept: text/markdown`."
          },
          "aliases": {
            "type": "array",
            "description": "Caminhos em inglês que servem a mesma página com canonical de volta.",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "priority": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "changefreq": {
            "type": "string",
            "enum": [
              "always",
              "hourly",
              "daily",
              "weekly",
              "monthly",
              "yearly",
              "never"
            ]
          },
          "lastModified": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "PageList": {
        "type": "object",
        "description": "Todas as páginas indexáveis, na mesma ordem do sitemap.",
        "required": [
          "pages"
        ],
        "properties": {
          "sitemap": {
            "type": "string",
            "format": "uri"
          },
          "pages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Page"
            }
          }
        }
      },
      "Plan": {
        "type": "object",
        "description": "Um plano da lista de espera. Nenhum pode ser contratado hoje.",
        "required": [
          "id",
          "name",
          "price",
          "features"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "mei",
              "micro",
              "pequena"
            ]
          },
          "name": {
            "type": "string"
          },
          "audience": {
            "type": "string",
            "description": "Porte de empresa a que o plano se destina."
          },
          "price": {
            "type": "object",
            "required": [
              "amount",
              "currency",
              "period"
            ],
            "properties": {
              "amount": {
                "type": "number",
                "description": "Valor mensal.",
                "examples": [
                  59
                ]
              },
              "currency": {
                "type": "string",
                "enum": [
                  "BRL"
                ]
              },
              "period": {
                "type": "string",
                "enum": [
                  "month"
                ]
              },
              "formatted": {
                "type": "string",
                "examples": [
                  "R$ 59/mês"
                ]
              }
            }
          },
          "features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "availability": {
            "type": "string",
            "enum": [
              "preorder"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "PlanList": {
        "type": "object",
        "description": "Os planos publicados, com a moeda e o período que valem para todos eles.",
        "required": [
          "plans"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "BRL"
            ]
          },
          "billingPeriod": {
            "type": "string",
            "enum": [
              "month"
            ]
          },
          "availability": {
            "type": "string",
            "enum": [
              "preorder"
            ]
          },
          "note": {
            "type": "string"
          },
          "plans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Plan"
            }
          }
        }
      },
      "FaqEntry": {
        "type": "object",
        "description": "Uma pergunta frequente e a resposta oficial publicada para ela.",
        "required": [
          "id",
          "question",
          "answer"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "contador",
              "whatsapp-cadastro",
              "leitura-de-email",
              "simples-nacional",
              "lgpd",
              "cancelamento"
            ]
          },
          "question": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          }
        }
      },
      "FaqList": {
        "type": "object",
        "description": "As perguntas frequentes da página inicial, na ordem em que aparecem.",
        "required": [
          "questions"
        ],
        "properties": {
          "page": {
            "type": "string",
            "format": "uri"
          },
          "questions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FaqEntry"
            }
          }
        }
      }
    },
    "responses": {
      "NotFound": {
        "description": "O recurso pedido não existe.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "MethodNotAllowed": {
        "description": "A API é somente leitura; use `GET`.",
        "headers": {
          "Allow": {
            "description": "Métodos aceitos.",
            "schema": {
              "type": "string",
              "examples": [
                "GET, HEAD"
              ]
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotAcceptable": {
        "description": "Nenhuma representação pedida em `Accept` pode ser produzida.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  }
}
