{"openapi":"3.1.0","info":{"title":"RWA Monitor Data API","version":"1.0.0","description":"Cotacao de cripto e dados de RWA tokenizado no Brasil, na mesma chave.\n\nToda resposta declara a IDADE DO DADO (`dataAsOf`, `stalenessSeconds`, `freshness`, `degraded`, `slaSeconds`), e nao apenas a hora da resposta. Dado fora do SLO chega marcado `degraded: true` em vez de chegar parecendo atual.\n\nA chave `rwa_live_*` sai do /sandbox ou da propria API: `POST /api/v1/auth/login` (e-mail e senha da conta) devolve um token de sessao, e com ele `POST /api/v1/auth/keys` gera a chave.","contact":{"name":"RWA Monitor","url":"https://rwamonitor.io/sandbox"}},"servers":[{"url":"https://rwamonitor.io","description":"Producao"}],"tags":[{"name":"Autenticacao","description":"Login com e-mail e senha, e as chaves rwa_live_* da conta (listar, criar, revogar)."},{"name":"Cripto","description":"Precos, mercados, categorias e corretoras."},{"name":"RWA Brasil","description":"Emissoes tokenizadas: emissor, lastro, captado, prazo e situacao regulatoria."}],"components":{"securitySchemes":{"chaveDoMonitor":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Chave `rwa_live_*`, gerada em https://rwamonitor.io/sandbox ou em POST /api/v1/auth/keys. Tambem aceita `Authorization: Bearer <chave>`. Nao expira, a menos que tenha validade: o trial de 7 dias, ou a data de um contrato. Vencida, responde 401 com `code` = `expired_api_key`. Nao ha refresh nem rotacao automatica: gere outra chave no /sandbox ou pela API (POST /api/v1/auth/login e depois POST /api/v1/auth/keys) ou, se a chave for de contrato, fale com o RWA Monitor para renovar."},"sessaoDaConta":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"accessToken devolvido por POST /api/v1/auth/login. Vale 1 hora e nao tem refresh: vencido, faca login de novo. Abre so /api/v1/auth/keys — os endpoints de dado continuam exigindo a chave rwa_live_*."}}},"security":[{"chaveDoMonitor":[]}],"paths":{"/api/v1/rwa/issuances":{"get":{"operationId":"rwa-pub-issuances","summary":"Emissoes tokenizadas","description":"Emissoes de RWA do mercado brasileiro: emissor, lastro, captado, taxa, prazo e situacao regulatoria.\n\nnull significa que a origem nao tem o dado — nao e zero. Zero e uma afirmacao (\"captou nada\"); ausencia nao e.\n\nA resposta declara a idade do dado: dataAsOf vem do lastSync da ORIGEM, e degraded avisa quando ele passou do SLO de 24h.\n\nSomente ativos aprovados entram na listagem publica.","tags":["RWA Brasil"],"parameters":[{"name":"page","in":"query","required":false,"description":"Pagina","schema":{"type":"integer","default":"1"}},{"name":"limit","in":"query","required":false,"description":"Itens por pagina (teto 100)","schema":{"type":"integer","default":"50"}},{"name":"funding","in":"query","required":false,"description":"Situacao da captacao","schema":{"type":"string","enum":["all","complete","incomplete"],"default":"all"}},{"name":"search","in":"query","required":false,"description":"Busca por nome ou ticker","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"uid":{"type":"string","description":"Identificador da emissao na origem"},"ticker":{"type":["string","null"],"description":"Codigo do token"},"emissor":{"type":["string","null"],"description":"Tokenizadora responsavel"},"rede":{"type":["string","null"],"description":"Blockchain onde o ativo vive"},"captadoBrl":{"type":["number","null"],"description":"Captado ate agora, em REAIS. null = a origem nao tem o dado (nao e zero)"},"metaBrl":{"type":["number","null"],"description":"Meta de captacao, em REAIS"},"situacaoDaCaptacao":{"type":["string","null"],"description":"complete | incomplete"},"retornoEsperado":{"type":["string","null"],"description":"Como a oferta anuncia o retorno (ex.: \"1.50% a.m.\")"},"vencimento":{"type":["string","null"],"description":"Data de vencimento (ISO-8601)"},"tipoDeAtivo":{"type":["string","null"],"description":"Lastro (Nota Fiscal, Duplicata, CPR...)"},"setorEconomico":{"type":["string","null"],"description":"finance, real-estate, energy, agro..."},"marcoRegulatorio":{"type":["string","null"],"description":"RCVM88 e afins"},"tipoDeOferta":{"type":["string","null"],"description":"public | private"},"holders":{"type":["number","null"],"description":"Detentores. null = nao medido"},"supplyTotal":{"type":["number","null"],"description":"Supply emitido"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"uid":"34baf820-550c-4acd-b55a-e6593b80a654","ticker":"TERRE03","nome":"TERRE03","emissor":"Zuvia","rede":"xrpl","captadoBrl":38450921,"metaBrl":78125000,"situacaoDaCaptacao":"incomplete","retornoEsperado":"1.50% a.m.","vencimento":"2026-09-17T00:00:00Z","tipoDeAtivo":"loteamento-residencial","tipoDeProduto":"receivables_certificate","tipoDeRetorno":"fixed_income","setorEconomico":"real-estate","marcoRegulatorio":"RCVM88","tipoDeOferta":"public","tipoDeTokenizacao":"onchain_represented","holders":41,"transferencias":41,"supplyTotal":78125000,"endereco":null,"urlExterna":null,"criadoEm":"2026-09-17T00:00:00Z"}],"total":5790,"dataAsOf":"2026-06-15T11:00:10.379Z","freshness":"stale","degraded":true,"slaSeconds":86400,"timestamp":"2026-09-20T22:14:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/rwa/issuances/{uid}":{"get":{"operationId":"rwa-pub-issuance","summary":"Detalhe da emissao","description":"Uma emissao. 404 quando ela nao existe — distinto de 500, que e falha da origem.\n\nuid fora do formato devolve 400; uid valido e inexistente devolve 404.","tags":["RWA Brasil"],"parameters":[{"name":"uid","in":"path","required":true,"description":"Identificador da emissao","schema":{"type":"string","default":"a15c9e56-7bf5-455e-8c78-1fbf0245b8d4"}}],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"uid":{"type":"string","description":"Identificador da emissao na origem"},"ticker":{"type":["string","null"],"description":"Codigo do token"},"emissor":{"type":["string","null"],"description":"Tokenizadora responsavel"},"rede":{"type":["string","null"],"description":"Blockchain onde o ativo vive"},"captadoBrl":{"type":["number","null"],"description":"Captado ate agora, em REAIS. null = a origem nao tem o dado (nao e zero)"},"metaBrl":{"type":["number","null"],"description":"Meta de captacao, em REAIS"},"situacaoDaCaptacao":{"type":["string","null"],"description":"complete | incomplete"},"retornoEsperado":{"type":["string","null"],"description":"Como a oferta anuncia o retorno (ex.: \"1.50% a.m.\")"},"vencimento":{"type":["string","null"],"description":"Data de vencimento (ISO-8601)"},"tipoDeAtivo":{"type":["string","null"],"description":"Lastro (Nota Fiscal, Duplicata, CPR...)"},"setorEconomico":{"type":["string","null"],"description":"finance, real-estate, energy, agro..."},"marcoRegulatorio":{"type":["string","null"],"description":"RCVM88 e afins"},"tipoDeOferta":{"type":["string","null"],"description":"public | private"},"holders":{"type":["number","null"],"description":"Detentores. null = nao medido"},"supplyTotal":{"type":["number","null"],"description":"Supply emitido"}},"description":"Carga util."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"uid":"34baf820-550c-4acd-b55a-e6593b80a654","ticker":"TERRE03","nome":"TERRE03","emissor":"Zuvia","rede":"xrpl","captadoBrl":38450921,"metaBrl":78125000,"situacaoDaCaptacao":"incomplete","retornoEsperado":"1.50% a.m.","vencimento":"2026-09-17T00:00:00Z","tipoDeAtivo":"loteamento-residencial","tipoDeProduto":"receivables_certificate","tipoDeRetorno":"fixed_income","setorEconomico":"real-estate","marcoRegulatorio":"RCVM88","tipoDeOferta":"public","tipoDeTokenizacao":"onchain_represented","holders":41,"transferencias":41,"supplyTotal":78125000,"endereco":null,"urlExterna":null,"criadoEm":"2026-09-17T00:00:00Z"},"dataAsOf":"2026-06-15T11:00:10.379Z","freshness":"stale","degraded":true,"timestamp":"2026-09-20T22:14:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/rwa/summary":{"get":{"operationId":"rwa-pub-summary","summary":"Resumo do mercado","description":"O mercado brasileiro de RWA em um objeto: emissoes, emissores, holders, captado, meta e TVL.","tags":["RWA Brasil"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"emissoes":{"type":["number","null"],"description":"Total de emissoes"},"emissores":{"type":["number","null"],"description":"Total de tokenizadoras"},"holders":{"type":["number","null"],"description":"Detentores no mercado"},"transferencias":{"type":["number","null"],"description":"Transferencias acumuladas"},"captadoBrl":{"type":["number","null"],"description":"Captado no mercado, em REAIS"},"metaBrl":{"type":["number","null"],"description":"Meta somada, em REAIS"},"tvlBrl":{"type":["number","null"],"description":"TVL, em REAIS"}},"description":"Carga util."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"emissoes":5790,"emissores":14,"holders":269364,"transferencias":299421,"captadoBrl":12178567069.68,"metaBrl":13844117245.44,"tvlBrl":6631421},"timestamp":"2026-09-20T22:14:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/rwa/networks":{"get":{"operationId":"rwa-pub-networks","summary":"Agregado por rede","description":"Captacao, meta e TVL agregados por blockchain.","tags":["RWA Brasil"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"chave":{"type":"string","description":"O recorte agregado"},"captadoBrl":{"type":["number","null"],"description":"Captado, em REAIS"},"metaBrl":{"type":["number","null"],"description":"Meta, em REAIS"},"tvlBrl":{"type":["number","null"],"description":"TVL, em REAIS"},"emissoes":{"type":["number","null"],"description":"Quantidade de emissoes"},"holders":{"type":["number","null"],"description":"Detentores"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"chave":"xdc","captadoBrl":7886931792.79,"metaBrl":7888324641.16,"tvlBrl":0,"emissoes":1927,"holders":93192}],"total":14,"timestamp":"2026-09-20T22:14:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/rwa/sectors":{"get":{"operationId":"rwa-pub-sectors","summary":"Agregado por setor","description":"Captacao, meta e TVL agregados por setor economico.","tags":["RWA Brasil"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"chave":{"type":"string","description":"O recorte agregado"},"captadoBrl":{"type":["number","null"],"description":"Captado, em REAIS"},"metaBrl":{"type":["number","null"],"description":"Meta, em REAIS"},"tvlBrl":{"type":["number","null"],"description":"TVL, em REAIS"},"emissoes":{"type":["number","null"],"description":"Quantidade de emissoes"},"holders":{"type":["number","null"],"description":"Detentores"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"chave":"energy","captadoBrl":27271754.98,"metaBrl":27831154.98,"tvlBrl":0,"emissoes":16,"holders":3609}],"total":21,"timestamp":"2026-09-20T22:14:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/rwa/issuers":{"get":{"operationId":"rwa-pub-issuers","summary":"Agregado por emissor","description":"Captacao, meta e TVL agregados por tokenizadora.","tags":["RWA Brasil"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"chave":{"type":"string","description":"O recorte agregado"},"captadoBrl":{"type":["number","null"],"description":"Captado, em REAIS"},"metaBrl":{"type":["number","null"],"description":"Meta, em REAIS"},"tvlBrl":{"type":["number","null"],"description":"TVL, em REAIS"},"emissoes":{"type":["number","null"],"description":"Quantidade de emissoes"},"holders":{"type":["number","null"],"description":"Detentores"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"chave":"Bauen Invest","captadoBrl":1170000,"metaBrl":6200000,"tvlBrl":0,"emissoes":3,"holders":5}],"total":14,"timestamp":"2026-09-20T22:14:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/ping":{"get":{"operationId":"crypto-ping","summary":"Ping","description":"Confirma que a chave funciona. Nao toca no banco de mercado — quando esta responde 200 e outra nao, a diferenca esta no dado, nao na credencial.\n\nToda resposta traz X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset.","tags":["Cripto"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"message":{"type":"string","description":"Confirmacao de que a API esta no ar"},"plan":{"type":"string","description":"Plano da chave usada (free, pro, enterprise)"},"keyPrefix":{"type":"string","description":"Prefixo da chave, para conferir qual foi usada"}},"description":"Carga util."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"message":"RWA Monitor Crypto API online","plan":"free","keyPrefix":"rwa_live_a1b2c3d4"},"timestamp":"2026-09-12T13:40:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/coins":{"get":{"operationId":"crypto-coins","summary":"List Coins","description":"Ranking de criptoativos com preco em USD e BRL, FDV, volume e variacoes. Analogo ao /coins/markets do CoinGecko.\n\nchange1h/24h/7d podem ser null: significa \"janela nao medida\", que NAO e o mesmo que variacao zero.\n\nLimite de 250 por pagina (a rota interna do site aceita mais; a publica nao).","tags":["Cripto"],"parameters":[{"name":"page","in":"query","required":false,"description":"Numero da pagina (min: 1)","schema":{"type":"integer","default":"1"}},{"name":"limit","in":"query","required":false,"description":"Itens por pagina (1-250)","schema":{"type":"integer","default":"100"}},{"name":"filter","in":"query","required":false,"description":"Recorte do catalogo","schema":{"type":"string","enum":["all","rwa","stablecoin"],"default":"all"}},{"name":"network","in":"query","required":false,"description":"Rede do contrato","schema":{"type":"string","enum":["all","ethereum","polygon","base","arbitrum","optimism","bsc"],"default":"all"}},{"name":"ids","in":"query","required":false,"description":"Lista de ate 20 slugs separados por virgula (ex: bitcoin,ethereum,tether). Casa por igualdade, nao por substring. Acima de 20 a resposta e 400 com code=too_many_ids: cortar a lista devolveria 200 com os ativos restantes AUSENTES, e voce concluiria que eles nao existem","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"Campo de ordenacao","schema":{"type":"string","enum":["rank","price","change1h","change24h","change7d","marketCap","volume24h","circulatingSupply","turnover","listedAt"],"default":"rank"}},{"name":"sortOrder","in":"query","required":false,"description":"Direcao","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}},{"name":"search","in":"query","required":false,"description":"Busca por nome ou simbolo","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Slug do ativo, usado nas rotas de detalhe (ex: \"bitcoin\")"},"rank":{"type":"integer","description":"Posicao no ranking por FDV"},"symbol":{"type":"string","description":"Simbolo (ex: \"BTC\")"},"name":{"type":"string","description":"Nome do ativo"},"logo":{"type":"string","description":"URL do logo"},"isRwa":{"type":"boolean","description":"Se e um Real World Asset tokenizado"},"isStablecoin":{"type":"boolean","description":"Se e stablecoin"},"isBrazilian":{"type":"boolean","description":"Se e um ativo brasileiro"},"price":{"type":"number","description":"Preco em USD"},"priceBrl":{"type":"number","description":"Preco em BRL"},"change1h":{"type":["number","null"],"description":"Variacao 1h em %. null = janela nao medida (NAO e zero), ou stale=true — ver stale"},"change24h":{"type":["number","null"],"description":"Variacao 24h em %. null = janela nao medida, ou stale=true — ver stale"},"change7d":{"type":["number","null"],"description":"Variacao 7d em %. null = janela nao medida, ou stale=true — ver stale"},"marketCap":{"type":"number","description":"FDV em USD"},"volume24h":{"type":["number","null"],"description":"Volume 24h em USD (DEX). Leia SEMPRE junto de volumeIsMeasured: o 0 deste campo tanto pode ser medicao quanto piso. null = stale=true"},"volumeIsMeasured":{"type":"boolean","description":"false = o numero em volume24h NAO e medicao, e o 0 ali e piso. Acontece em ativo nativo (BTC, ETH, BNB, SOL...) e em fundo de NAV, que nao tem pool de DEX nas redes que indexamos, e tambem quando stale=true. Em 21/09/2026 eram 19 das 201 moedas assim, contra 1 com zero medido de verdade — some, compare ou ordene volume24h apenas quando este campo for true"},"circulatingSupply":{"type":"number","description":"Supply em circulacao"},"priceIsManual":{"type":"boolean","description":"true = o preco e um NAV informado pelo gestor, nao cotacao de mercado"},"priceUpdatedAt":{"type":"string","description":"ISO de quando o preco foi apurado NA ORIGEM — nao de quando gravamos. Acompanha priceSource: quando a origem e exchange-basket, e a observacao mais recente entre as corretoras que entraram na cesta. Vazio quando desconhecido"},"priceSource":{"type":"string","description":"De onde veio o preco. exchange-basket = mediana ponderada por volume dos livros das corretoras VIVAS, com faixa de plausibilidade de 20%. onchain-daily = preco diario on-chain, porque nao havia cesta que se sustentasse (sem corretora, sem fonte viva, duas fontes irreconciliaveis, ou sem taxa USD/BRL). Ativo sem par liquido NUNCA passa por tempo real: fica no diario e sai marcado aqui"},"high24hBrl":{"type":["number","null"],"description":"Maior preco OBSERVADO em 24h, em BRL. Nao e OHLC: e o extremo das observacoes de 15 em 15 minutos das corretoras vivas, entao um pico dentro do mesmo slot nao aparece. null quando priceSource = onchain-daily (extremo de corretora ao lado de preco on-chain seria fonte misturada) ou quando nao ha observacao na janela"},"low24hBrl":{"type":["number","null"],"description":"Menor preco observado em 24h, em BRL. Mesmas regras de high24hBrl"},"priceSourceCount":{"type":"integer","description":"Quantas corretoras sustentam o preco. 0 quando priceSource = onchain-daily. Um preco sustentado por uma fonte so nao tem contraprova — o campo existe para o cliente poder exigir mais"},"stale":{"type":"boolean","description":"true = o preco servido tem mais de 24h. O ultimo valor conhecido continua vindo (ele e informacao), mas NAO deve ser tratado como cotacao atual — e o item mantem rank, price, marketCap e priceUpdatedAt. Ja change1h, change24h, change7d e volume24h vem NULL: derivam da mesma observacao do preco, e uma variacao \"das ultimas 24h\" apurada ha semanas nao e um numero velho, e sim falso. Ordenar por esses campos tambem joga o item para o fim. Leia junto com priceIsManual: num ativo de NAV, stale significa que o gestor nao reapresentou o valor, e nao que o mercado parou"},"networks":{"type":"array","items":{"type":"string"},"description":"Redes onde o ativo tem contrato"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"id":"bitcoin","rank":1,"symbol":"BTC","name":"Bitcoin","logo":"https://.../bitcoin.png","isRwa":false,"isStablecoin":false,"isBrazilian":false,"price":78785.04,"priceBrl":403163.69,"change1h":-0.11,"change24h":-0.43,"change7d":2.18,"marketCap":1566000000000,"volume24h":18400000000,"circulatingSupply":19876543,"priceIsManual":false,"networks":[]}],"total":201,"dataAsOf":"2026-09-12T13:30:00.000Z","stalenessSeconds":420,"freshness":"fresh","degraded":false,"slaSeconds":93600,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/coins/{id}":{"get":{"operationId":"crypto-coin-detail","summary":"Coin Detail","description":"Detalhe completo do ativo: contratos por rede, mercados DEX, dados on-chain, historico de preco e as corretoras brasileiras onde negocia.\n\n404 quando o slug nao existe ou o ativo esta pausado no catalogo.","tags":["Cripto"],"parameters":[{"name":"id","in":"path","required":true,"description":"Slug do ativo (ex: \"bitcoin\"), o campo `id` de /coins","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"id":{"type":"string","description":"Slug do ativo"},"description":{"type":"string","description":"Descricao editorial"},"contracts":{"type":"array","items":{"type":"object"},"description":"Contratos por rede, com explorerUrl e decimals"},"markets":{"type":"array","items":{"type":"object"},"description":"Pools de DEX com preco e volume"},"ondeComprar":{"type":"array","items":{"type":"object"},"description":"Corretoras brasileiras com preco em BRL (ver /coins/:id/tickers)"},"onChain":{"type":"object","description":"Holders, transfers 24h e supply. holders pode ser null (desconhecido)"},"priceHistory":{"type":"object","description":"Series por janela: 24h, 7d, 30d, 1y, all"},"allTimeHigh":{"type":"object","description":"ATH com preco e data"},"allTimeLow":{"type":"object","description":"ATL com preco e data"}},"description":"Carga util."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"id":"bitcoin","symbol":"BTC","name":"Bitcoin","price":78785.04,"priceBrl":403163.69,"contracts":[],"markets":[],"ondeComprar":[{"exchangeSlug":"binance","exchangeName":"Binance","exchangeType":"international","pairSymbol":"BTC-BRL","lastPriceBrl":326630,"volumeBrl24h":21445294.75,"collectedAt":"2026-09-12T13:30:00.000Z","stale":false}],"onChain":{"holders":null,"transferCount24h":0},"allTimeHigh":{"price":124500,"date":"2025-01-20T00:00:00.000Z"}},"dataAsOf":"2026-09-12T13:30:00.000Z","freshness":"fresh","degraded":false,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/coins/{id}/tickers":{"get":{"operationId":"crypto-coin-tickers","summary":"Coin Tickers (Brasil)","description":"Onde a moeda negocia no Brasil, com preco de LIVRO em BRL de ate 15 corretoras. Nao e cotacao de dolar convertida — e o preco pelo qual a pessoa compra aqui.\n\nFonte vencida (stale=true) vem no FIM da lista, com o ultimo preco conhecido. Ela nao e escondida: some-la em silencio ja mascarou uma parada de 26 dias.\n\nArray vazio quando o ativo nao tem par BRL em nenhuma das fontes.","tags":["Cripto"],"parameters":[{"name":"id","in":"path","required":true,"description":"Slug do ativo (ex: \"bitcoin\")","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"exchangeSlug":{"type":"string","description":"Identificador da corretora (usar em /exchanges/:slug)"},"exchangeName":{"type":"string","description":"Nome da corretora"},"exchangeType":{"type":"string","description":"\"national\" = corretora brasileira; \"international\" = global com par BRL"},"pairSymbol":{"type":"string","description":"Par negociado (ex: \"BTC-BRL\")"},"quoteAsset":{"type":"string","description":"Ativo de cotacao do par"},"lastPriceBrl":{"type":["number","null"],"description":"Ultimo preco em BRL. null = a fonte nunca publicou preco para este par"},"volumeBrl24h":{"type":["number","null"],"description":"Volume 24h em BRL"},"collectedAt":{"type":["object","null"],"description":"Quando este preco foi observado"},"stale":{"type":"boolean","description":"true = sem coleta ha mais de 24h; o preco acima e historico"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"exchangeSlug":"binance","exchangeName":"Binance","exchangeType":"international","pairSymbol":"BTC-BRL","quoteAsset":"BRL","lastPriceBrl":326630,"volumeBrl24h":21445294.75,"collectedAt":"2026-09-12T13:30:00.000Z","stale":false},{"exchangeSlug":"mercado-bitcoin","exchangeName":"Mercado Bitcoin","exchangeType":"national","pairSymbol":"BTC-BRL","quoteAsset":"BRL","lastPriceBrl":326481,"volumeBrl24h":6583187.4,"collectedAt":"2026-09-12T13:30:00.000Z","stale":false}],"total":14,"dataAsOf":"2026-09-12T13:30:00.000Z","freshness":"fresh","degraded":false,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/global":{"get":{"operationId":"crypto-global","summary":"Global Stats","description":"Agregados do mercado: FDV total, volume, dominancia de BTC/ETH, indice de sentimento e cambio USD/BRL.","tags":["Cripto"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"totalFdv":{"type":"number","description":"FDV somado do catalogo, em USD"},"fdvChange24h":{"type":"number","description":"Variacao 24h do FDV em %"},"totalVolume24h":{"type":"number","description":"Volume 24h em USD (DEX)"},"btcShare":{"type":"number","description":"Dominancia do BTC em %"},"ethShare":{"type":"number","description":"Dominancia do ETH em %"},"sentimentIndex":{"type":"integer","description":"Indice de medo e ganancia (0-100)"},"altcoinSeasonIndex":{"type":"integer","description":"Indice de altseason (0-100)"},"activeCoins":{"type":"integer","description":"Moedas ativas no catalogo"},"usdBrl":{"type":"number","description":"Cambio USD/BRL derivado das stablecoins de real. 0 = desconhecido"}},"description":"Carga util."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"totalFdv":2840000000000,"fdvChange24h":-0.82,"totalVolume24h":94300000000,"btcShare":55.1,"ethShare":13.4,"sentimentIndex":48,"sentimentLabel":"neutral","altcoinSeasonIndex":31,"activeCoins":201,"usdBrl":5.1957,"lastUpdate":"2026-09-12T13:30:00.000Z"},"dataAsOf":"2026-09-12T13:30:00.000Z","freshness":"fresh","degraded":false,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/categories":{"get":{"operationId":"crypto-categories","summary":"List Categories","description":"Categorias do catalogo com FDV, volume e contagem de ativos agregados.","tags":["Cripto"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Slug da categoria"},"name":{"type":"string","description":"Nome exibivel"},"coinCount":{"type":"integer","description":"Ativos na categoria"},"totalFdv":{"type":"number","description":"FDV somado, em USD"},"volume24h":{"type":"number","description":"Volume 24h somado, em USD"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"id":"rwa","name":"RWA","coinCount":38,"totalFdv":14200000000,"volume24h":184000000}],"total":9,"dataAsOf":"2026-09-12T13:30:00.000Z","freshness":"fresh","degraded":false,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/networks":{"get":{"operationId":"crypto-networks","summary":"List Networks","description":"Redes cobertas pelo catalogo, com FDV e contagem de ativos por rede.","tags":["Cripto"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Slug da rede (ex: \"ethereum\")"},"name":{"type":"string","description":"Nome exibivel"},"coinCount":{"type":"integer","description":"Ativos com contrato nesta rede"},"totalFdv":{"type":"number","description":"FDV somado, em USD"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"id":"ethereum","name":"Ethereum","coinCount":96,"totalFdv":420000000000}],"total":6,"dataAsOf":"2026-09-12T13:30:00.000Z","freshness":"fresh","degraded":false,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/exchanges":{"get":{"operationId":"crypto-exchanges","summary":"List Exchanges","description":"Ranking de corretoras com par BRL por volume 24h. Traz os dois cortes: total e cripto (sem pares stable-fiat).\n\nCorretora vencida aparece na lista marcada, mas NAO entra nas somas de volume 24h.","tags":["Cripto"],"parameters":[],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Identificador da corretora"},"name":{"type":"string","description":"Nome"},"exchangeType":{"type":"string","description":"\"national\" ou \"international\""},"volumeBrl24h":{"type":"number","description":"Volume 24h em BRL (corte total)"},"volumeBrl24hCrypto":{"type":"number","description":"Volume 24h excluindo pares stable-fiat"},"stale":{"type":"boolean","description":"true = fonte sem coleta ha mais de 24h; nao entra nas somas"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"exchanges":[{"slug":"binance","name":"Binance","exchangeType":"international","volumeBrl24h":712400000,"volumeBrl24hCrypto":354100000,"stale":false}]},"total":15,"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/crypto/exchanges/{slug}":{"get":{"operationId":"crypto-exchange-detail","summary":"Exchange Detail","description":"Detalhe da corretora: KPIs, principais ativos, pares com metodo de volume e frescor por par, e saude da fonte.\n\nvolumeBrlMethod diz se o volume veio pronto da fonte (\"reported\") ou foi calculado (\"derived\").","tags":["Cripto"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Identificador da corretora (ex: \"mercado-bitcoin\")","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"slug":{"type":"string","description":"Identificador"},"name":{"type":"string","description":"Nome"},"pairs":{"type":"array","items":{"type":"object"},"description":"Pares com ultimo preco, volume e frescor"},"health":{"type":["object","null"],"description":"Estado da coleta: status, falhas consecutivas, ultima checagem"}},"description":"Carga util."},"dataAsOf":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Hora da observacao mais recente que sustenta esta resposta (ISO-8601). E a idade do DADO, nao a da resposta. null = origem sem marca de tempo."},"stalenessSeconds":{"oneOf":[{"type":"integer"},{"type":"null"}],"description":"Idade do dado em segundos. null quando dataAsOf e null."},"freshness":{"type":"string","description":"fresh = dentro do SLO. stale = fora dele. unknown = sem marca de origem — que tambem conta como degradado, porque silencio nao e o mesmo que \"esta fresco\"."},"degraded":{"type":"boolean","description":"true quando a resposta nao cumpre o SLO de frescor declarado em slaSeconds."},"slaSeconds":{"type":"integer","description":"Limiar usado para decidir degraded, exposto para o consumidor poder julgar sozinho."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","freshness","degraded","slaSeconds","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"slug":"mercado-bitcoin","name":"Mercado Bitcoin","exchangeType":"national","pairs":[{"pairSymbol":"BTC-BRL","lastPrice":326481,"volumeBrl":6583187.4,"volumeBrlMethod":"derived","slotTs":"2026-09-12T13:30:00.000Z"}],"health":{"status":"ok","consecutiveFailures":0}},"timestamp":"2026-09-12T13:37:00.000Z"}}}}}},"401":{"description":"Chave ausente, invalida, revogada ou vencida. Leia `code`: repetir a chamada nao resolve nenhum dos tres, e `expired_api_key` pede chave nova.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","expired_api_key"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"Limite por minuto ou cota mensal excedidos. Leia `code` para saber qual: os prazos de espera sao muito diferentes.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["rate_limit_exceeded","quota_exceeded"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"Erro interno.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"Indisponibilidade temporaria. Leia `code`: `service_unavailable` traz Retry-After e passa na nova tentativa; `metering_unavailable` e o medidor fora.","headers":{"X-RateLimit-Limit":{"description":"Teto de requisicoes por minuto desta chave.","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Quantas ainda cabem no minuto corrente.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Epoch em segundos do proximo minuto do relogio.","schema":{"type":"string"}},"X-Quota-Limit":{"description":"Cota mensal da chave.","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Quanto resta da cota no mes corrente.","schema":{"type":"string"}},"X-Quota-Mode":{"description":"block = 429 ao estourar a cota. bill = passa e cobra o excedente.","schema":{"type":"string"}},"X-Quota-Overage":{"description":"Chamadas acima da cota neste mes. Ausente quando nao ha excedente.","schema":{"type":"string"}},"X-Quota-Overage-Cost-USD":{"description":"Custo acumulado do excedente em USD. Presente apenas no modo bill.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["metering_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/auth/login":{"post":{"operationId":"auth-login","summary":"Login","description":"Troca o e-mail e a senha da sua conta no RWA Monitor por um token de sessao (accessToken) de 1 hora. O token NAO abre os endpoints de dado: ele serve para listar, criar e revogar as suas chaves rwa_live_* em /api/v1/auth/keys. Nao ha refresh: vencido, faca login de novo.\n\nE-mail inexistente, senha errada e conta sem senha respondem igual (401 invalid_credentials): distinguir contaria a quem testa senha quais e-mails tem conta.\n\n5 falhas por e-mail em 15 minutos bloqueiam novas tentativas por um tempo (429 too_many_attempts, com Retry-After).","tags":["Autenticacao"],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"E-mail da sua conta no RWA Monitor"},"password":{"type":"string","format":"password","description":"Senha da conta. Conta criada so com codigo por e-mail ou Google nao tem senha: defina uma em /profile"}},"required":["email","password"]}}}},"responses":{"200":{"description":"Sucesso.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"accessToken":{"type":"string","description":"Token de sessao. Envie como Authorization: Bearer <accessToken> em /api/v1/auth/keys"},"tokenType":{"type":"string","description":"Sempre \"Bearer\""},"expiresIn":{"type":"integer","description":"Segundos ate o token vencer"},"expiresAt":{"type":"string","description":"ISO de quando o token vence. Depois disso, faca login de novo"}},"description":"Carga util."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"accessToken":"<token de sessao>","tokenType":"Bearer","expiresIn":3600,"expiresAt":"2026-10-19T14:00:00.000Z"},"timestamp":"2026-10-19T13:00:00.000Z"}}}}}},"400":{"description":"`invalid_request`: Corpo sem \"email\" e \"password\" em JSON.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["invalid_request"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"401":{"description":"`invalid_credentials`: E-mail ou senha invalidos. Conta inexistente e conta sem senha (criada so com codigo por e-mail ou Google; defina uma em /profile) respondem igual de proposito: distinguir contaria a quem testa senha quais e-mails tem conta.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["invalid_credentials"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"403":{"description":"`user_disabled`: A conta esta desativada. Fale com o RWA Monitor.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["user_disabled"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"429":{"description":"`too_many_attempts`: 5 falhas por e-mail em 15 minutos, ou 30 tentativas por IP em 1 hora. Retry-After traz os segundos de espera: repetir antes so renova o bloqueio.","headers":{"Retry-After":{"description":"Segundos de espera antes de repetir.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["too_many_attempts"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"`auth_unavailable`: O servico de identidade nao respondeu. Transitorio e sem relacao com a sua senha: repita depois do Retry-After. `service_unavailable`: O servidor que atendeu nao conseguiu falar com o banco. Repita depois do Retry-After. No login a falha e FECHADA: sem a contagem de tentativas, nenhuma senha e conferida.","headers":{"Retry-After":{"description":"Segundos de espera antes de repetir.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["auth_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/auth/keys":{"get":{"operationId":"auth-keys-list","summary":"List Keys","description":"Lista as chaves rwa_live_* ativas da sua conta, com validade e consumo do minuto e do mes.\n\nEnvie Authorization: Bearer <accessToken> (de POST /api/v1/auth/login). A chave rwa_live_* NAO vale aqui: responde 401 api_key_not_accepted.","tags":["Autenticacao"],"security":[{"sessaoDaConta":[]}],"parameters":[],"responses":{"200":{"description":"Sucesso.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identificador da chave, usado em DELETE /api/v1/auth/keys/{id}"},"name":{"type":"string","description":"Rotulo dado pelo dono"},"apiKey":{"type":"string","description":"A chave rwa_live_* em claro. E ela que vai no header X-Api-Key dos endpoints de dado"},"keyPrefix":{"type":"string","description":"Prefixo da chave, o mesmo que o /ping devolve"},"plan":{"type":"string","description":"Plano (free, pro, enterprise). Chave criada por aqui e sempre free"},"rateLimitPerMinute":{"type":"integer","description":"Teto de requisicoes por minuto"},"quotaPerMonth":{"type":"integer","description":"Cota mensal"},"overageMode":{"type":"string","description":"block = 429 ao estourar a cota; bill = passa e cobra o excedente"},"expiresAt":{"type":["string","null"],"description":"ISO da validade. null = nao expira. Vencida, a chave responde 401 expired_api_key"},"lastUsedAt":{"type":["string","null"],"description":"ISO do ultimo uso. null = nunca usada"},"createdAt":{"type":"string","description":"ISO da criacao"},"usage":{"type":"object","description":"Consumo corrente: { minuto, mes }"}}},"description":"Carga util."},"total":{"type":"integer","description":"Total de itens disponiveis."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","total","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":[{"id":"6f1c2a9e-3b4d-4e8f-9a01-2b3c4d5e6f70","name":"Chave via API","apiKey":"rwa_live_...","keyPrefix":"rwa_live_a1b2c3d4","plan":"free","rateLimitPerMinute":30,"quotaPerMonth":10000,"overageMode":"block","overagePriceUsd":0,"canEnableOverage":false,"overage":{"calls":0,"costUsd":0},"sustainedOverQuota":false,"lastUsedAt":null,"expiresAt":null,"createdAt":"2026-10-19T13:00:00.000Z","usage":{"minuto":0,"mes":0}}],"total":1,"timestamp":"2026-10-19T13:00:00.000Z"}}}}}},"401":{"description":"`missing_session_token`: Header Authorization: Bearer <accessToken> ausente. O cookie do site nao vale aqui. `api_key_not_accepted`: O Bearer trouxe uma chave rwa_live_*. Aqui vai o accessToken de POST /api/v1/auth/login; a chave vale so nos endpoints de dado. `invalid_session_token`: Token de sessao invalido ou vencido (dura 1 hora, sem refresh). Faca login de novo.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_session_token","api_key_not_accepted","invalid_session_token"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"`internal_error`: Falha inesperada no servidor.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"`auth_unavailable`: O servico de identidade nao respondeu. Transitorio e sem relacao com a sua senha: repita depois do Retry-After. `service_unavailable`: O servidor que atendeu nao conseguiu falar com o banco. Repita depois do Retry-After. No login a falha e FECHADA: sem a contagem de tentativas, nenhuma senha e conferida.","headers":{"Retry-After":{"description":"Segundos de espera antes de repetir.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["auth_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}},"post":{"operationId":"auth-keys-create","summary":"Create Key","description":"Gera uma chave rwa_live_* nova, do plano free, na hora. A chave em claro volta na resposta e na listagem.\n\nSempre plano free: o plano nao vem do corpo. Plano pago e com o RWA Monitor.\n\nTeto de 5 chaves ativas por conta (vencidas nao contam). A 6a responde 409 key_limit_reached: revogue uma antes.\n\nEnvie Authorization: Bearer <accessToken> (de POST /api/v1/auth/login). A chave rwa_live_* NAO vale aqui: responde 401 api_key_not_accepted.","tags":["Autenticacao"],"security":[{"sessaoDaConta":[]}],"parameters":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Rotulo da chave, ate 60 caracteres"}}}}}},"responses":{"201":{"description":"Sucesso.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"id":{"type":"string","description":"Identificador da chave, usado em DELETE /api/v1/auth/keys/{id}"},"name":{"type":"string","description":"Rotulo dado pelo dono"},"apiKey":{"type":"string","description":"A chave rwa_live_* em claro. E ela que vai no header X-Api-Key dos endpoints de dado"},"keyPrefix":{"type":"string","description":"Prefixo da chave, o mesmo que o /ping devolve"},"plan":{"type":"string","description":"Plano (free, pro, enterprise). Chave criada por aqui e sempre free"},"rateLimitPerMinute":{"type":"integer","description":"Teto de requisicoes por minuto"},"quotaPerMonth":{"type":"integer","description":"Cota mensal"},"overageMode":{"type":"string","description":"block = 429 ao estourar a cota; bill = passa e cobra o excedente"},"expiresAt":{"type":["string","null"],"description":"ISO da validade. null = nao expira. Vencida, a chave responde 401 expired_api_key"},"lastUsedAt":{"type":["string","null"],"description":"ISO do ultimo uso. null = nunca usada"},"createdAt":{"type":"string","description":"ISO da criacao"},"usage":{"type":"object","description":"Consumo corrente: { minuto, mes }"}},"description":"Carga util."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"id":"6f1c2a9e-3b4d-4e8f-9a01-2b3c4d5e6f70","name":"Chave via API","apiKey":"rwa_live_...","keyPrefix":"rwa_live_a1b2c3d4","plan":"free","rateLimitPerMinute":30,"quotaPerMonth":10000,"overageMode":"block","overagePriceUsd":0,"canEnableOverage":false,"overage":{"calls":0,"costUsd":0},"sustainedOverQuota":false,"lastUsedAt":null,"expiresAt":null,"createdAt":"2026-10-19T13:00:00.000Z","usage":{"minuto":0,"mes":0}},"timestamp":"2026-10-19T13:00:00.000Z"}}}}}},"401":{"description":"`missing_session_token`: Header Authorization: Bearer <accessToken> ausente. O cookie do site nao vale aqui. `api_key_not_accepted`: O Bearer trouxe uma chave rwa_live_*. Aqui vai o accessToken de POST /api/v1/auth/login; a chave vale so nos endpoints de dado. `invalid_session_token`: Token de sessao invalido ou vencido (dura 1 hora, sem refresh). Faca login de novo.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_session_token","api_key_not_accepted","invalid_session_token"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"409":{"description":"`key_limit_reached`: A conta ja tem 5 chaves ativas (vencidas nao contam). Revogue uma antes de criar outra.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["key_limit_reached"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"`internal_error`: Falha inesperada no servidor.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"`auth_unavailable`: O servico de identidade nao respondeu. Transitorio e sem relacao com a sua senha: repita depois do Retry-After. `service_unavailable`: O servidor que atendeu nao conseguiu falar com o banco. Repita depois do Retry-After. No login a falha e FECHADA: sem a contagem de tentativas, nenhuma senha e conferida.","headers":{"Retry-After":{"description":"Segundos de espera antes de repetir.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["auth_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}},"/api/v1/auth/keys/{id}":{"delete":{"operationId":"auth-keys-revoke","summary":"Revoke Key","description":"Revoga uma chave da sua conta. A partir dai ela responde 401 invalid_api_key.\n\nChave inexistente e chave de outra conta respondem o mesmo 404 key_not_found.\n\nEnvie Authorization: Bearer <accessToken> (de POST /api/v1/auth/login). A chave rwa_live_* NAO vale aqui: responde 401 api_key_not_accepted.","tags":["Autenticacao"],"security":[{"sessaoDaConta":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"O campo id da chave, de GET /api/v1/auth/keys","schema":{"type":"string"}}],"responses":{"200":{"description":"Sucesso.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"true em resposta bem-sucedida."},"data":{"type":"object","properties":{"id":{"type":"string","description":"A chave revogada"},"revoked":{"type":"boolean","description":"Sempre true"}},"description":"Carga util."},"timestamp":{"type":"string","description":"Hora da RESPOSTA (ISO-8601) — nao confundir com dataAsOf."}},"required":["success","data","timestamp"]},"examples":{"exemplo":{"value":{"success":true,"data":{"id":"6f1c2a9e-3b4d-4e8f-9a01-2b3c4d5e6f70","revoked":true},"timestamp":"2026-10-19T13:00:00.000Z"}}}}}},"401":{"description":"`missing_session_token`: Header Authorization: Bearer <accessToken> ausente. O cookie do site nao vale aqui. `api_key_not_accepted`: O Bearer trouxe uma chave rwa_live_*. Aqui vai o accessToken de POST /api/v1/auth/login; a chave vale so nos endpoints de dado. `invalid_session_token`: Token de sessao invalido ou vencido (dura 1 hora, sem refresh). Faca login de novo.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["missing_session_token","api_key_not_accepted","invalid_session_token"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"404":{"description":"`key_not_found`: Chave inexistente ou de outra conta. Os dois respondem igual: dizer \"existe, mas nao e sua\" confirmaria uma chave alheia.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["key_not_found"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"500":{"description":"`internal_error`: Falha inesperada no servidor.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["internal_error"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}},"503":{"description":"`auth_unavailable`: O servico de identidade nao respondeu. Transitorio e sem relacao com a sua senha: repita depois do Retry-After. `service_unavailable`: O servidor que atendeu nao conseguiu falar com o banco. Repita depois do Retry-After. No login a falha e FECHADA: sem a contagem de tentativas, nenhuma senha e conferida.","headers":{"Retry-After":{"description":"Segundos de espera antes de repetir.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Mensagem legivel por humano."},"code":{"type":"string","enum":["auth_unavailable","service_unavailable"],"description":"Codigo legivel por maquina."}},"required":["success","error","code"]}}}}}}}}}