{"openapi":"3.1.0","info":{"title":"Hora da Missa — API pública","version":"1.0.0","description":"Consulta pública, gratuita e somente leitura, sem autenticação. Datas e horários em America/Sao_Paulo. Horários semanais habituais; não garantem a realização da missa na data consultada. Horários mensais em texto livre não são convertidos em ocorrências. Exceções não têm vínculo com uma missa específica: são avisos para confirmação, sem aplicação automática. A data de atualização da ficha não é a data de verificação dos horários. A fonte é o cadastro público do Hora da Missa. Nenhum resultado significa ausência de informação no cadastro, não ausência de missas."},"servers":[{"url":"https://www.horadamissa.online"}],"security":[],"paths":{"/api/v1/igrejas":{"get":{"operationId":"buscarIgrejas","summary":"Buscar igrejas publicadas por cidade ou nome.","description":"Informe cidade ou nome (ou ambos). Cidade é correspondência exata sem distinguir maiúsculas; nome é trecho literal. Acentos são preservados. Não use *. Ordenação: nome, id.","parameters":[{"name":"cidade","in":"query","required":false,"description":"Cidade: 2 a 120 caracteres.","schema":{"type":"string"}},{"name":"uf","in":"query","required":false,"description":"Sigla do estado com duas letras, como SP. Desempata municípios homónimos: há um Guaraci em São Paulo e outro no Paraná.","schema":{"type":"string","pattern":"^[A-Za-z]{2}$"}},{"name":"nome","in":"query","required":false,"description":"Trecho do nome: 2 a 120 caracteres.","schema":{"type":"string"}},{"name":"limite","in":"query","required":false,"description":"Resultados por página.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","required":false,"description":"Deslocamento; ordenação estável. next_offset é null no limite de navegação.","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Consulta concluída. Lista vazia significa ausência de informação no cadastro.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Church"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"Parâmetros inválidos, desconhecidos ou repetidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Cadastro temporariamente indisponível. Não interpretar como lista vazia.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/igrejas/{slug}":{"get":{"operationId":"consultarIgreja","summary":"Consultar ficha e horários semanais de missas.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":200}}],"responses":{"200":{"description":"Consulta concluída. Lista vazia significa ausência de informação no cadastro.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/Church"},{"type":"object","properties":{"missas_habituais":{"type":"array","items":{"$ref":"#/components/schemas/WeeklyMass"}}}}]},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"description":"Parâmetros inválidos, desconhecidos ou repetidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Igreja não encontrada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Cadastro temporariamente indisponível. Não interpretar como lista vazia.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/missas":{"get":{"operationId":"buscarMissas","summary":"Consultar horários habituais de missas para o dia da semana da data.","description":"Não confirma a ocorrência. Avisos da data são retornados sem inferir a qual missa se aplicam; não são inseridos horários especiais nem excluídos cancelamentos automaticamente. Ordenação: horário, id.","parameters":[{"name":"cidade","in":"query","required":true,"description":"Cidade exata: 2 a 120 caracteres, sem distinguir maiúsculas; acentos preservados.","schema":{"type":"string"}},{"name":"data","in":"query","required":true,"description":"Data de 1900 a 2100 no fuso America/Sao_Paulo.","schema":{"type":"string","format":"date"}},{"name":"apos","in":"query","required":false,"description":"Horário mínimo inclusivo HH:MM.","schema":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$"}},{"name":"uf","in":"query","required":false,"description":"Sigla do estado com duas letras, como SP. Desempata municípios homónimos: há um Guaraci em São Paulo e outro no Paraná.","schema":{"type":"string","pattern":"^[A-Za-z]{2}$"}},{"name":"limite","in":"query","required":false,"description":"Resultados por página.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","required":false,"description":"Deslocamento; ordenação estável. next_offset é null no limite de navegação.","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Consulta concluída. Lista vazia significa ausência de informação no cadastro.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Mass"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}},"400":{"description":"Parâmetros inválidos, desconhecidos ou repetidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Cadastro temporariamente indisponível. Não interpretar como lista vazia.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Meta":{"type":"object","properties":{"timezone":{"const":"America/Sao_Paulo"},"limitations":{"type":"array","items":{"type":"string"}}}},"PaginationMeta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"has_more":{"type":"boolean"},"next_offset":{"type":["integer","null"]}}}]},"Church":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"nome":{"type":"string"},"bairro":{"type":["string","null"]},"endereco":{"type":["string","null"]},"cidade":{"type":["string","null"]},"uf":{"type":["string","null"],"pattern":"^[A-Z]{2}$","description":"Sigla do estado. Nulo quando a UF da ficha ainda não foi apurada — nenhuma UF é melhor do que a errada."},"coordenadas":{"type":"object","properties":{"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]}}},"telefone":{"type":["string","null"]},"horarios_mensais_texto":{"type":["string","null"]},"verificacao":{"type":"object","properties":{"confirmada_pela_paroquia":{"type":"boolean"},"verificada_em":{"type":"null","description":"Não há data de verificação disponível."}}},"ficha_atualizada_em":{"type":["string","null"]},"url":{"type":"string","format":"uri"},"fonte":{"type":"object","properties":{"nome":{"type":"string"},"url":{"type":"string","format":"uri"}}}}},"WeeklyMass":{"type":"object","properties":{"id":{"type":"string"},"dia_semana":{"type":"integer","minimum":0,"maximum":6,"description":"0 = domingo; 6 = sábado."},"horario":{"type":"string"},"observacao":{"type":["string","null"]}}},"Mass":{"allOf":[{"$ref":"#/components/schemas/WeeklyMass"},{"type":"object","properties":{"data":{"type":"string","format":"date"},"timezone":{"const":"America/Sao_Paulo"},"status":{"enum":["horario_habitual","requer_confirmacao"]},"ocorrencia_confirmada":{"const":false},"igreja":{"$ref":"#/components/schemas/Church"},"avisos_da_data":{"type":"array","items":{"type":"object","properties":{"data":{"type":"string"},"horario":{"type":["string","null"]},"cancelado_no_cadastro":{"type":["boolean","null"]},"titulo":{"type":["string","null"]},"observacao":{"type":["string","null"]}}}}}}]}}}}