{"openapi":"3.0.3","info":{"title":"ObraAberta API","version":"1.0.0","description":"API pública de transparência de obras residenciais.\n\n**Autenticação:** endpoints GET são abertos (100 req/h por IP). Envie `Authorization: Bearer <JWT>` (1.000 req/h) ou `X-API-Key` (10.000 req/h) para ampliar o limite e liberar uso automatizado.\n**Paginação:** listagens usam o envelope `{ data, pagination }` com `limit` máximo de 500.\n**Erros:** use `application/problem+json` com `type`, `title`, `status`, `detail` e `code`; o envelope legado permanece em `error`.\n**Rate limit:** respostas incluem `RateLimit-Limit`, `RateLimit-Remaining` e `RateLimit-Reset`, além dos headers X-RateLimit legados. Respostas 429 incluem `Retry-After`.\n**Versionamento:** a base `/api/v1` recebe apenas adições compatíveis; mudanças incompatíveis usam uma nova versão de caminho e serão documentadas antes da descontinuação.\n**Cache:** leituras retornam `Cache-Control: public, max-age=60`.\n\nDocumentação em português: https://obraaberta.com.br/api/docs","contact":{"name":"ObraAberta","url":"https://obraaberta.com.br"},"license":{"name":"Dados de obras sob licença de uso da ObraAberta; dados de serviços próximos sob ODbL (OpenStreetMap)"}},"externalDocs":{"description":"Guia completo em português","url":"https://obraaberta.com.br/api/docs"},"servers":[{"url":"https://obraaberta.com.br/api/v1","description":"Produção"},{"url":"https://obraaberta.com.br/api/public/v1","description":"Produção (caminho alternativo, sempre público)"}],"tags":[{"name":"Projetos","description":"Obras publicadas, linha do tempo, avaliações e entorno."},{"name":"Construtoras","description":"Cadastro, obras e reputação (ISE)."},{"name":"Dados","description":"Bases abertas incorporadas e fontes utilizadas."},{"name":"Metabuscador","description":"Produtos canônicos, ofertas de parceiros, preços, disponibilidade, ingestão e métricas comerciais."},{"name":"Partner API","description":"Integração server-to-server sandbox para lojistas e fabricantes."},{"name":"Transparência condominial","description":"Contratações e fornecedores publicados pelo condomínio; exportação privada por chave escopada."},{"name":"Sistema","description":"Descoberta, disponibilidade e especificação."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"},"condominiumApiKey":{"type":"apiKey","in":"header","name":"X-ObraAberta-Key","description":"Chave privada do condomínio. Guarde somente no servidor integrador."},"connectorApiKey":{"type":"apiKey","in":"header","name":"X-ObraAberta-Connector-Key","description":"Chave secreta do conector de catálogo. É exibida uma única vez e deve permanecer somente no servidor do parceiro."},"partnerBearer":{"type":"http","scheme":"bearer","bearerFormat":"opaque","description":"Token de curta duração emitido por Client Credentials para a Partner API sandbox."},"partnerOAuth2":{"type":"oauth2","description":"OAuth 2.0 Client Credentials para a Partner API sandbox.","flows":{"clientCredentials":{"tokenUrl":"https://obraaberta.com.br/api/v1/partners/oauth/token","scopes":{"catalog:read":"Consultar produtos, lotes e erros do próprio parceiro.","catalog:write":"Validar, inserir ou desativar produtos na sandbox."}}}}},"schemas":{"Erro":{"type":"object","required":["type","title","status","detail","code"],"properties":{"type":{"type":"string","format":"uri-reference","example":"https://obraaberta.com.br/problems/not_found"},"title":{"type":"string","example":"not found"},"status":{"type":"integer","example":404},"detail":{"type":"string"},"code":{"type":"string","example":"not_found"},"error":{"type":"object","properties":{"code":{"type":"string","example":"not_found"},"message":{"type":"string"},"status":{"type":"integer","example":404}}}}},"Paginacao":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"pages":{"type":"integer"}}},"Obra":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"neighborhood":{"type":"string","nullable":true},"city":{"type":"string"},"state":{"type":"string"},"cep":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"geolocation":{"type":"object","nullable":true,"properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}}},"status":{"type":"string","enum":["lancamento","em_construcao","paralisada","entregue"]},"completion_percentage":{"type":"number"},"total_units":{"type":"integer"},"available_units":{"type":"integer","nullable":true},"price_from":{"type":"number","nullable":true},"price_to":{"type":"number","nullable":true},"price_per_m2":{"type":"number","nullable":true},"total_area":{"type":"number","nullable":true},"bedrooms":{"type":"integer","nullable":true},"bathrooms":{"type":"integer","nullable":true},"parking_spaces":{"type":"integer","nullable":true},"amenities":{"type":"array","items":{"type":"string"}},"cover_url":{"type":"string","nullable":true},"floor_plans":{"type":"array","items":{"type":"object"}},"constructor":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true}}},"launch_date":{"type":"string","format":"date","nullable":true},"completion_date":{"type":"string","format":"date","nullable":true},"data_sources":{"type":"array","items":{"type":"string"}},"data_quality_score":{"type":"number","nullable":true,"description":"0 a 1 — completude dos dados."},"last_enriched_at":{"type":"string","format":"date-time","nullable":true},"last_updated_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"url":{"type":"string","description":"URL canônica pública da obra."}}},"ListaObras":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Obra"}},"pagination":{"$ref":"#/components/schemas/Paginacao"}}},"ListaObrasComDistancia":{"type":"object","properties":{"data":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Obra"},{"type":"object","properties":{"distance_km":{"type":"number"}}}]}},"pagination":{"$ref":"#/components/schemas/Paginacao"},"center":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"number"}}}}},"Timeline":{"type":"object","properties":{"project_id":{"type":"string"},"timeline":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"date":{"type":"string","format":"date","nullable":true},"completion_percentage":{"type":"number","nullable":true},"photos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"caption":{"type":"string","nullable":true}}}}}}}}},"Avaliacoes":{"type":"object","properties":{"summary":{"type":"object","nullable":true,"properties":{"average":{"type":"number","nullable":true},"count":{"type":"integer"}}},"ratings":{"type":"array","items":{"type":"object"}},"pagination":{"$ref":"#/components/schemas/Paginacao"}}},"ServicosProximos":{"type":"object","properties":{"schools":{"type":"array","items":{"$ref":"#/components/schemas/PontoInteresse"}},"hospitals":{"type":"array","items":{"$ref":"#/components/schemas/PontoInteresse"}},"transport":{"type":"array","items":{"$ref":"#/components/schemas/PontoInteresse"}},"commerce":{"type":"array","items":{"$ref":"#/components/schemas/PontoInteresse"}},"cached":{"type":"boolean"},"degraded":{"type":"boolean","description":"true quando a resposta usa cache antigo ou a fonte está indisponível"},"source_status":{"type":"string","enum":["fresh","cache","stale_cache","unavailable"]},"attribution":{"type":"string"}}},"PontoInteresse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"distance_km":{"type":"number"},"type":{"type":"string","nullable":true},"operator":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"source":{"type":"string","example":"openstreetmap"}}},"Construtora":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"cnpj":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"founded_year":{"type":"integer","nullable":true},"headquarters":{"type":"string","nullable":true},"rating":{"type":"object","properties":{"average":{"type":"number","nullable":true},"count":{"type":"integer"}}},"reputation":{"$ref":"#/components/schemas/Reputacao"},"stock_info":{"type":"object","nullable":true,"properties":{"ticker":{"type":"string"}}},"projects_count":{"type":"integer"}}},"ListaConstrutoras":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Construtora"}},"pagination":{"$ref":"#/components/schemas/Paginacao"}}},"Reputacao":{"type":"object","description":"ISE (Índice de Sinais de Estresse): parte de 100 e desconta obras atrasadas (peso 60) e paralisadas (peso 40) sobre o total.","properties":{"ise_score":{"type":"integer"},"completed_projects":{"type":"integer"},"active_projects":{"type":"integer"},"stalled_projects":{"type":"integer"},"delayed_projects":{"type":"integer"},"total_projects":{"type":"integer"},"legal_issues":{"type":"integer","nullable":true}}},"Mcmv":{"type":"object","properties":{"mcmv_projects":{"type":"array","items":{"type":"object"}},"pagination":{"$ref":"#/components/schemas/Paginacao"}}},"Job":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"sources":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["running","done","erro"]},"result":{"type":"object","nullable":true},"error":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"finished_at":{"type":"string","format":"date-time","nullable":true}}},"OfertaMetabuscador":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"price":{"type":"number","nullable":true},"shipping_price":{"type":"number","nullable":true},"installation_price":{"type":"number","nullable":true},"total_estimated":{"type":"number","nullable":true},"currency":{"type":"string","example":"BRL"},"availability":{"type":"string"},"lead_time_days":{"type":"integer","nullable":true},"freshness_hours":{"type":"integer"},"purchase_action":{"type":"string","enum":["request_quote","affiliate"]},"product":{"type":"object","nullable":true},"supplier":{"type":"object","nullable":true},"pricing_notice":{"type":"string"}}},"Saude":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"version":{"type":"string"},"time":{"type":"string","format":"date-time"}}}}},"paths":{"/":{"get":{"tags":["Sistema"],"summary":"Descoberta da API","description":"Descoberta da API","operationId":"root","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/health":{"get":{"tags":["Sistema"],"summary":"Verificação de disponibilidade","description":"Responde sem consultar o banco. Ideal para monitoramento de uptime.","operationId":"health","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Saude"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/openapi.json":{"get":{"tags":["Sistema"],"summary":"Especificação OpenAPI","description":"Especificação OpenAPI","operationId":"openapi","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects":{"get":{"tags":["Projetos"],"summary":"Lista obras publicadas","description":"Retorna apenas obras publicadas. Filtros podem ser combinados livremente.","operationId":"listProjects","parameters":[{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}},{"name":"city","in":"query","description":"Nome da cidade (case-insensitive).","schema":{"type":"string"}},{"name":"state","in":"query","description":"Sigla da UF.","schema":{"type":"string","example":"SP"}},{"name":"status","in":"query","description":"Estágio da obra.","schema":{"type":"string","enum":["lancamento","em_construcao","paralisada","pronto","entregue"]}},{"name":"min_price","in":"query","description":"Preço mínimo em R$.","schema":{"type":"number"}},{"name":"max_price","in":"query","description":"Preço máximo em R$.","schema":{"type":"number"}},{"name":"bedrooms","in":"query","description":"Número de dormitórios.","schema":{"type":"integer"}},{"name":"amenities","in":"query","description":"Lista separada por vírgula; retorna obras que tenham todas.","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at","updated_at","name","price","completion_percentage"],"default":"created_at"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaObras"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/search":{"get":{"tags":["Projetos"],"summary":"Busca obras por texto e filtros","description":"Busca obras por texto e filtros","operationId":"searchProjects","parameters":[{"name":"q","in":"query","description":"Termo livre (nome, endereço, bairro, construtora).","schema":{"type":"string"}},{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}},{"name":"city","in":"query","description":"Nome da cidade (case-insensitive).","schema":{"type":"string"}},{"name":"state","in":"query","description":"Sigla da UF.","schema":{"type":"string","example":"SP"}},{"name":"status","in":"query","description":"Estágio da obra.","schema":{"type":"string","enum":["lancamento","em_construcao","paralisada","pronto","entregue"]}},{"name":"min_price","in":"query","description":"Preço mínimo em R$.","schema":{"type":"number"}},{"name":"max_price","in":"query","description":"Preço máximo em R$.","schema":{"type":"number"}},{"name":"bedrooms","in":"query","description":"Número de dormitórios.","schema":{"type":"integer"}},{"name":"amenities","in":"query","description":"Lista separada por vírgula; retorna obras que tenham todas.","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at","updated_at","name","price","completion_percentage"],"default":"created_at"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaObras"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/by-city/{city}":{"get":{"tags":["Projetos"],"summary":"Obras de uma cidade","description":"Obras de uma cidade","operationId":"projectsByCity","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}},{"name":"city","in":"query","description":"Nome da cidade (case-insensitive).","schema":{"type":"string"}},{"name":"state","in":"query","description":"Sigla da UF.","schema":{"type":"string","example":"SP"}},{"name":"status","in":"query","description":"Estágio da obra.","schema":{"type":"string","enum":["lancamento","em_construcao","paralisada","pronto","entregue"]}},{"name":"min_price","in":"query","description":"Preço mínimo em R$.","schema":{"type":"number"}},{"name":"max_price","in":"query","description":"Preço máximo em R$.","schema":{"type":"number"}},{"name":"bedrooms","in":"query","description":"Número de dormitórios.","schema":{"type":"integer"}},{"name":"amenities","in":"query","description":"Lista separada por vírgula; retorna obras que tenham todas.","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at","updated_at","name","price","completion_percentage"],"default":"created_at"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaObras"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/by-state/{state}":{"get":{"tags":["Projetos"],"summary":"Obras de um estado","description":"Obras de um estado","operationId":"projectsByState","parameters":[{"name":"state","in":"path","required":true,"schema":{"type":"string","example":"MG"}},{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}},{"name":"city","in":"query","description":"Nome da cidade (case-insensitive).","schema":{"type":"string"}},{"name":"state","in":"query","description":"Sigla da UF.","schema":{"type":"string","example":"SP"}},{"name":"status","in":"query","description":"Estágio da obra.","schema":{"type":"string","enum":["lancamento","em_construcao","paralisada","pronto","entregue"]}},{"name":"min_price","in":"query","description":"Preço mínimo em R$.","schema":{"type":"number"}},{"name":"max_price","in":"query","description":"Preço máximo em R$.","schema":{"type":"number"}},{"name":"bedrooms","in":"query","description":"Número de dormitórios.","schema":{"type":"integer"}},{"name":"amenities","in":"query","description":"Lista separada por vírgula; retorna obras que tenham todas.","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at","updated_at","name","price","completion_percentage"],"default":"created_at"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaObras"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/by-region":{"get":{"tags":["Projetos"],"summary":"Obras dentro de um raio","description":"Ordena da obra mais próxima para a mais distante e acrescenta distance_km a cada item.","operationId":"projectsByRegion","parameters":[{"name":"latitude","in":"query","required":true,"schema":{"type":"number"}},{"name":"longitude","in":"query","required":true,"schema":{"type":"number"}},{"name":"radius_km","in":"query","schema":{"type":"number","default":5}},{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}},{"name":"city","in":"query","description":"Nome da cidade (case-insensitive).","schema":{"type":"string"}},{"name":"state","in":"query","description":"Sigla da UF.","schema":{"type":"string","example":"SP"}},{"name":"status","in":"query","description":"Estágio da obra.","schema":{"type":"string","enum":["lancamento","em_construcao","paralisada","pronto","entregue"]}},{"name":"min_price","in":"query","description":"Preço mínimo em R$.","schema":{"type":"number"}},{"name":"max_price","in":"query","description":"Preço máximo em R$.","schema":{"type":"number"}},{"name":"bedrooms","in":"query","description":"Número de dormitórios.","schema":{"type":"integer"}},{"name":"amenities","in":"query","description":"Lista separada por vírgula; retorna obras que tenham todas.","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at","updated_at","name","price","completion_percentage"],"default":"created_at"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaObrasComDistancia"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/{id}":{"get":{"tags":["Projetos"],"summary":"Detalhe da obra com timeline e avaliações","description":"Detalhe da obra com timeline e avaliações","operationId":"getProject","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Obra"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/{id}/timeline":{"get":{"tags":["Projetos"],"summary":"Etapas e fotos da obra","description":"Etapas e fotos da obra","operationId":"projectTimeline","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Timeline"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/{id}/ratings":{"get":{"tags":["Projetos"],"summary":"Avaliações da obra","description":"Avaliações da obra","operationId":"projectRatings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."},{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Avaliacoes"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/{id}/nearby-services":{"get":{"tags":["Projetos"],"summary":"Escolas, hospitais, transporte e comércio próximos","description":"Dados do OpenStreetMap via Overpass, com cache de 7 dias por obra e raio. Licença ODbL.","operationId":"projectNearbyServices","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."},{"name":"radius_km","in":"query","schema":{"type":"number","default":2,"maximum":10}},{"name":"types","in":"query","description":"schools,hospitals,transport,commerce","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicosProximos"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/projects/enrich":{"post":{"tags":["Projetos"],"operationId":"enrichProject","summary":"Enriquece os dados de uma obra a partir de fontes públicas","description":"Cria um job e executa as fontes solicitadas. Fontes não suportadas retornam em skipped_sources. Exige JWT ou chave de API.","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["project_id"],"properties":{"project_id":{"type":"string","format":"uuid"},"sources":{"type":"array","items":{"type":"string","enum":["brasilapi","osm","mcmv"]}},"force_refresh":{"type":"boolean"}}},"example":{"project_id":"0f0a1c7e-4a2b-4e0f-9c3a-2f5d8b1c9e11","sources":["brasilapi","osm"]}}}},"responses":{"202":{"description":"Processado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"Não autenticado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Obra não encontrada","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"502":{"description":"Falha na fonte externa","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/jobs/{id}":{"get":{"tags":["Projetos"],"summary":"Situação de um job de enriquecimento","description":"Visível apenas para o solicitante do job ou administradores; os demais recebem 404.","operationId":"getJob","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]},{"apiKey":[]}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/builders":{"get":{"tags":["Construtoras"],"summary":"Lista construtoras cadastradas","description":"Lista construtoras cadastradas","operationId":"listBuilders","parameters":[{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaConstrutoras"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/builders/{id}":{"get":{"tags":["Construtoras"],"summary":"Dados e reputação da construtora","description":"Dados e reputação da construtora","operationId":"getBuilder","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Construtora"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/builders/{id}/projects":{"get":{"tags":["Construtoras"],"summary":"Obras da construtora","description":"Obras da construtora","operationId":"builderProjects","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListaObras"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/builders/{id}/reputation":{"get":{"tags":["Construtoras"],"summary":"Indicadores de reputação (ISE)","description":"Indicadores de reputação (ISE)","operationId":"builderReputation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"UUID ou slug do recurso."}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/marketplace/offers":{"get":{"tags":["Metabuscador"],"summary":"Compara ofertas de produtos equivalentes","description":"Ordena ofertas elegíveis por custo total estimado. Preço, frete, disponibilidade e prazo são informados pelo parceiro e não constituem garantia de venda.","operationId":"searchMarketplaceOffers","parameters":[{"name":"q","in":"query","description":"Produto, marca, modelo ou termo técnico.","schema":{"type":"string"}},{"name":"gtin","in":"query","description":"GTIN do produto.","schema":{"type":"string"}},{"name":"quantity","in":"query","schema":{"type":"number","minimum":1,"default":1}},{"name":"city","in":"query","schema":{"type":"string"}},{"name":"state","in":"query","schema":{"type":"string","example":"SP"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/marketplace/integrations":{"post":{"tags":["Metabuscador"],"operationId":"createMarketplaceIntegration","summary":"Cria uma integração de catálogo para o próprio fornecedor","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fornecedor_id","nome"],"properties":{"fornecedor_id":{"type":"string","format":"uuid"},"nome":{"type":"string"},"tipo":{"type":"string","enum":["api_lote","webhook","csv"]},"limite_hora":{"type":"integer","minimum":10,"maximum":100000},"limite_itens_lote":{"type":"integer","minimum":1,"maximum":5000}}}}}},"responses":{"200":{"description":"Conector criado; a chave secreta é exibida somente nesta resposta."},"401":{"description":"Não autenticado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"403":{"description":"Fornecedor não pertence à conta","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/marketplace/catalog":{"post":{"tags":["Metabuscador"],"operationId":"ingestMarketplaceCatalog","summary":"Envia lote idempotente de produtos, preços e disponibilidade","description":"Recebe no máximo 5 MB por lote. A API valida preço, unidade e identificadores antes de consolidar produtos e ofertas. Não aceita links externos livres.","security":[{"connectorApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["idempotency_key","items"],"properties":{"idempotency_key":{"type":"string"},"source_updated_at":{"type":"string","format":"date-time"},"items":{"type":"array","maxItems":5000,"items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Lote processado ou retorno idempotente."},"401":{"description":"Chave de conector inválida ou revogada","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"413":{"description":"Lote excede 5 MB","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite do conector excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/marketplace/offers/{id}/click":{"post":{"tags":["Metabuscador"],"operationId":"registerMarketplaceOfferClick","summary":"Registra clique qualificado e mantém a solicitação dentro da ObraAberta","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Interesse registrado; o próximo passo é solicitação de orçamento interna."},"404":{"description":"Oferta não encontrada","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"410":{"description":"Oferta expirada","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/marketplace/reports":{"get":{"tags":["Metabuscador"],"summary":"Relatório de consultas, cliques e custo do próprio fornecedor","description":"Relatório de consultas, cliques e custo do próprio fornecedor","operationId":"marketplaceReports","parameters":[{"name":"fornecedor_id","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/affiliate/postbacks":{"post":{"tags":["Partner API"],"operationId":"affiliatePostback","summary":"Recebe postback assinado de comissão afiliada","description":"Exige X-ObraAberta-Timestamp e X-ObraAberta-Signature HMAC-SHA-256. O ledger inicial é simulado e não executa pagamentos.","parameters":[{"name":"X-ObraAberta-Timestamp","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ObraAberta-Signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["event_id","order_id","commission_value","currency"],"properties":{"event_id":{"type":"string"},"click_id":{"type":"string"},"order_id":{"type":"string"},"status":{"type":"string"},"commission_value":{"type":"number"},"currency":{"type":"string","example":"BRL"}}}}}},"responses":{"200":{"description":"Postback aceito no ledger simulado"},"202":{"description":"Atribuição ainda pendente","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"401":{"description":"HMAC inválido ou replay","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"503":{"description":"Segredo HMAC não configurado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/marketplace/partner-apps":{"post":{"tags":["Partner API"],"operationId":"createPartnerSandboxApp","summary":"Cria uma aplicação Partner API sandbox para o próprio parceiro","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["parceiro_id"],"properties":{"parceiro_id":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"Aplicação criada; client_secret exibido somente nesta resposta"},"401":{"description":"Não autenticado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"403":{"description":"Parceiro não pertence à conta","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"409":{"description":"Estado do parceiro impede sandbox","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/oauth/token":{"post":{"tags":["Partner API"],"operationId":"partnerToken","summary":"Emite token de curta duração para a Partner API sandbox","description":"Usa OAuth 2.0 Client Credentials. Segredos nunca são aceitos no navegador e a produção permanece bloqueada até aprovação.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type","client_id","client_secret"],"properties":{"grant_type":{"type":"string","enum":["client_credentials"]},"client_id":{"type":"string"},"client_secret":{"type":"string","format":"password"},"environment":{"type":"string","enum":["sandbox","production"],"default":"sandbox"}}}}}},"responses":{"200":{"description":"Token emitido"},"400":{"description":"Requisição inválida","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"401":{"description":"Cliente inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/program":{"get":{"tags":["Partner API"],"summary":"Status e gates da aplicação partner","description":"Status e gates da aplicação partner","operationId":"partnerProgram","parameters":[],"security":[{"partnerOAuth2":["catalog:read"]}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/terms/current":{"get":{"tags":["Partner API"],"summary":"Termos vigentes da sandbox","description":"Termos vigentes da sandbox","operationId":"partnerTerms","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/catalog/products:validate":{"post":{"tags":["Partner API"],"operationId":"partnerValidateProducts","summary":"Valida produtos sem publicar ofertas","security":[{"partnerOAuth2":["catalog:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Resultado de validação"},"401":{"description":"Token inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"403":{"description":"Escopo insuficiente","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/catalog/products:batchUpsert":{"post":{"tags":["Partner API"],"operationId":"partnerBatchUpsert","summary":"Envia lote idempotente para sandbox","security":[{"partnerOAuth2":["catalog:write"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"idempotency_key":{"type":"string"},"source_version":{"type":"string"},"terms_version":{"type":"string"},"items":{"type":"array","maxItems":1000,"items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Lote aceito com resultado por linha"},"401":{"description":"Token inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"403":{"description":"Escopo insuficiente","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"409":{"description":"Integração sandbox não configurada","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/catalog/products/{merchant_product_id}":{"get":{"tags":["Partner API"],"operationId":"partnerGetProduct","summary":"Consulta produto do parceiro","security":[{"partnerOAuth2":["catalog:read"]}],"parameters":[{"name":"merchant_product_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Produto"},"401":{"description":"Token inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Produto não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}},"delete":{"tags":["Partner API"],"operationId":"partnerDeleteProduct","summary":"Desativa produto na sandbox","security":[{"partnerOAuth2":["catalog:write"]}],"parameters":[{"name":"merchant_product_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Produto desativado"},"401":{"description":"Token inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Produto não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/catalog/ingestions/{ingestion_run_id}":{"get":{"tags":["Partner API"],"summary":"Consulta lote de ingestão partner","description":"Consulta lote de ingestão partner","operationId":"partnerGetIngestion","parameters":[{"name":"ingestion_run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"partnerOAuth2":["catalog:read"]}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/partners/catalog/errors":{"get":{"tags":["Partner API"],"summary":"Consulta erros de lote partner","description":"Consulta erros de lote partner","operationId":"partnerGetErrors","parameters":[{"name":"ingestion_run_id","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"partnerOAuth2":["catalog:read"]}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/condominiums/{slug}/transparency":{"get":{"tags":["Transparência condominial"],"summary":"Portal público com contratações e fornecedores autorizados","description":"Retorna somente informação liberada para o Portal de Transparência; não inclui chaves, dados pessoais ou documentos privados.","operationId":"condominiumTransparency","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Slug público configurado pelo condomínio"}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/condominiums/{slug}/contracts":{"get":{"tags":["Transparência condominial"],"operationId":"condominiumContractsExport","summary":"Exporta contratações, concorrências e fornecedores do próprio condomínio","description":"Exige chave de condomínio com o escopo transparencia:leitura. Não retorna dados pessoais, arquivos privados ou documentos não redigidos.","security":[{"condominiumApiKey":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dados corporativos do condomínio","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}}},"401":{"description":"Chave ausente, inválida ou sem escopo","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Condomínio não corresponde à chave","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite da chave excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/data/mcmv":{"get":{"tags":["Dados"],"summary":"Empreendimentos do Minha Casa Minha Vida","description":"Empreendimentos do Minha Casa Minha Vida","operationId":"mcmvData","parameters":[{"name":"page","in":"query","description":"Página (inicia em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Itens por página.","schema":{"type":"integer","minimum":1,"default":50,"maximum":500}},{"name":"city","in":"query","schema":{"type":"string"}},{"name":"state","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mcmv"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}},"/data/public-sources":{"get":{"tags":["Dados"],"summary":"Fontes de dados usadas pela plataforma","description":"Fontes de dados usadas pela plataforma","operationId":"publicSources","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Parâmetro inválido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"404":{"description":"Não encontrado","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"429":{"description":"Limite de requisições excedido","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."},"Retry-After":{"schema":{"type":"integer"},"description":"Segundos recomendados antes de tentar novamente."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}},"500":{"description":"Erro interno","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela atual, no padrão IETF RateLimit."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela atual, no padrão IETF RateLimit."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Segundos até a renovação da janela, no padrão IETF RateLimit."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requisições permitidas na janela de 1 hora."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requisições restantes na janela."},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Instante em que a janela reinicia."}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Erro"}},"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"description":"Envelope legado mantido para compatibilidade."}}}}}}}}