# A API do Registro.br que não existe: endpoints, status e limites

> O endpoint da busca do Registro.br, o RDAP, o ISAVAIL e as listas da rodada: respostas reais, a tabela oficial do status e os limites, medidos.

*Atualizado em 2026-10-02.*

Não existe API HTTP documentada para o processo de liberação. O que existe são cinco coisas: o endpoint que a caixa de busca do site usa, o serviço ISAVAIL por trás dele, o RDAP, três arquivos de texto e o painel autenticado. Esta página é o que aprendemos sondando cada um, com a data de cada medição, e no fim os [arquivos que o Liberados publica](#nossos-dados). Se você vai escrever código em cima disso, leia inteira antes: três das armadilhas abaixo produzem resultado errado com HTTP 200.

## [O endpoint de disponibilidade](https://liberados.com.br/api-registrobr/#avail)

É o mesmo que a caixa de busca de `registro.br` chama. Devolve JSON, não é documentado nem versionado, e pode mudar sem aviso. Os testes deste projeto guardam respostas reais justamente para que uma mudança de formato quebre um teste em vez de passar despercebida.

```
GET https://registro.br/v2/ajax/avail/raw/<dominio>
```

Respostas reais, uma por situação (nomes e tickets ilustrativos):

Livre para registro imediato:

```
{"status": 0, "fqdn": "exemplolivre.com.br", "exempt": false}
```

Registrado e no ar:

```
{"status": 2, "fqdn": "google.com.br", "publication-status": "published",
 "expires-at": "2027-05-18T00:00:00-03:00",
 "hosts": ["ns1.google.com", "ns2.google.com"]}
```

Em liberação, sem candidato visível (o alvo do garimpo):

```
{"status": 6, "fqdn": "anabolizantes.com.br",
 "begins-at": "2026-09-09T15:00:00-03:00",
 "ends-at": "2026-09-16T15:00:00-03:00"}
```

Em liberação, já com candidatos:

```
{"status": 7, "fqdn": "medidas.com.br",
 "tickets": [30001101, 30001102],
 "begins-at": "2026-09-09T15:00:00-03:00",
 "ends-at": "2026-09-16T15:00:00-03:00"}
```

Em processo competitivo (leilão):

```
{"status": 9, "fqdn": "combustiveis.com.br",
 "tickets": [30002201, 30002202],
 "ends-at": "2026-09-16T15:00:00-03:00",
 "accepting-new-tickets-until": "2026-09-16T15:00:00-03:00"}
```

No leilão, `ends-at` e `accepting-new-tickets-until` são o fim da **rodada**, não o das ofertas, que o Registro.br não publica (conferido em 16/09/2026, com a rodada já fechada e o leilão aberto).

Nome travado, esperando a rodada seguinte (resposta real de 17/09/2026):

```
{"status": 5, "fqdn": "one.com.br", "fqdnace": "", "exempt": false}
```

Bloqueado por excesso de consultas. Repare: HTTP 200.

```
{"status": 8, "fqdn": "", "fqdnace": "", "exempt": false,
 "reasons": ["Taxa máxima de consultas excedida"]}
```

O CORS deste endpoint é fechado (`access-control-allow-origin: https://registro.br`). Um site em outra origem não consegue chamá-lo do navegador, e `no-cors`, iframe, popup e JSONP também não passam. Medido em 10/09/2026.

## [O campo `status` é uma enumeração, não um bitmask](https://liberados.com.br/api-registrobr/#status)

Até 11/09/2026 esta página dizia "bitmask, confirmado por sondagem": `0x1` tickets, `0x2` existe, `0x4` liberação, `0x8` competitivo. Os valores observados (0, 2, 3, 6, 7, 8, 9) batiam com essa leitura, e foi coincidência. Em 12/09/2026 encontramos a tabela oficial em `Protocolo-ISAVAIL.txt`, no FTP do Registro.br ([ver ISAVAIL](#isavail)):

| `status` | Oficial | Leitura |
|---|---|---|
| `0` | disponível | livre para registro imediato |
| `1` | disponível, com tickets concorrentes | fora da rodada, mas alguém tem pedido pendente. Nunca visto |
| `2` | registrado | registrado e publicado |
| `3` | indisponível, com motivo | **equivalente já registrado**, reserva, transição EDU.BR... ver abaixo |
| `4` | consulta inválida | erro de quem perguntou |
| `5` | **aguardando processo de liberação** | **nome travado** esperando a rodada seguinte. Hipótese até 16/09/2026; naquele dia, 15 minutos depois do fechamento, os nomes travados passaram a responder 5 |
| `6` | em liberação | em liberação, **sem candidato visível** (zero ou um) |
| `7` | em liberação, com tickets | em liberação, **com candidatos** |
| `8` | erro | com `fqdn` vazio: **bloqueio por excesso de consultas** |
| `9` | processo competitivo | leilão em andamento |

Por que a diferença importa: lido como bits, o `5` é `4|1`, "em liberação com tickets", e como não vem array `tickets`, cairia em "em liberação, sem candidato". Um nome que **nem está na rodada** apareceria como joia. É o mesmo tipo de erro que produziu 28 joias falsas em 10/09/2026, esperando para acontecer. Desde 12/09/2026 o código mapeia os dez valores um a um.

## [Três armadilhas: status 8, status 3 e o RDAP vazio](https://liberados.com.br/api-registrobr/#armadilhas)

### [Status 8: o bloqueio que parece leilão](https://liberados.com.br/api-registrobr/#status-8-o-bloqueio-que-parece-leilao)

O bloqueio por excesso de consultas volta com **HTTP 200**, não 429, e com `status: 8` no corpo. Na tabela oficial, 8 é simplesmente "erro"; mas quem lê o status como bitmask vê em `0x8` o bit de processo competitivo, e um mapeamento ingênuo transforma toda resposta bloqueada num falso "domínio em leilão". Foi o que aconteceu aqui em 09/09/2026: 370 nomes rotulados como leilão que eram respostas de bloqueio. O sintoma é "leilão" com zero tickets e sem `ends-at`; leilão de verdade sempre traz os dois.

Como distinguir, nesta ordem:

1. se vier o campo `reasons`, é erro ou indisponibilidade: não classifique pelo número;

2. resposta válida sempre traz `fqdn` preenchido;

3. só então aplique a tabela.

### [Status 3: hífen e acento não criam nome novo](https://liberados.com.br/api-registrobr/#status-3-hifen-e-acento-nao-criam-nome-novo)

Sondado em 10/09/2026. O `status: 3` não traz tickets: vem com `reasons` e significa que o nome colide com um equivalente já registrado por outro titular.

```
café.com.br        → status 3, fqdnace xn--caf-dma.com.br,
                     reasons ["Domínio já registrado sob sintaxe similar"]
cafe.com.br        → status 2, registrado
casa-verde.com.br  → status 3, "Domínio já registrado sob sintaxe similar"
casaverde.com.br   → status 2, registrado
```

A regra é oficial: para comparar nomes, o Registro.br converte acentos e cedilha para as versões sem acento e descarta os hífens. `aventura-esportes` e `aventuraesportes` são o mesmo nome, e só coexistem se forem do mesmo dono. Duas consequências:

- **Hífen e acento não são inventário.** Em `.com`, `casa-verde.com` e `casaverde.com` são dois ativos. Em `.br` são um só. A varredura confirma: nos 125.453 nomes da rodada de setembro de 2026 há **zero** rótulos com hífen.

- O `3` também aparece com outros motivos (`açaí.com.br` responde "Domínio reservado para a transição EDU.BR"). Trate-o como "bloqueado, leia `reasons`", não como um motivo único.

### [RDAP 200 vazio: o nome travado que parece registrado](https://liberados.com.br/api-registrobr/#rdap-200-vazio-o-nome-travado-que-parece-registrado)

Desde 16/09/2026, 15 minutos depois do fechamento da rodada, um nome travado responde no RDAP com **HTTP 200** e um objeto `domain` vazio (sem `status`, eventos nem `publicIds`), e no endpoint de disponibilidade com `status: 5`. Quem lê "200 no RDAP = registrado" rotula como registrado um nome que volta na rodada seguinte. O que separa é o cabeçalho `Nicbr-Resource: release-process-waiting` ([ver RDAP](#rdap)).

## [O array `tickets`: público, com dois cortes](https://liberados.com.br/api-registrobr/#tickets)

É a informação mais valiosa do endpoint: diz quantas candidaturas já existem antes de você gastar a sua, sem autenticação. Com dois cortes que mudam a leitura:

1. **Candidato único é invisível.** O array só aparece com dois ou mais candidatos. Isso é documentado pelo próprio Registro.br, e os dados batem: em 1.657 nomes verificados em 09/09/2026, nenhum tinha exatamente 1; dezenas tinham exatamente 2. Portanto "0" quer dizer "zero ou um", e candidatar-se num nome com candidato oculto trava o nome para os dois. O RDAP esconde do mesmo jeito.

2. **A lista para em 10.** Medido em 11/09/2026: `one.com.br` mostrava 10 tickets aqui e 67 no RDAP; `vacina.com.br`, 10 contra 42. Contagem acima de 10 só pelo RDAP. É a especificação: o ISAVAIL define `ticket1|...|ticket10`.

## [ISAVAIL: o serviço oficial por trás do endpoint](https://liberados.com.br/api-registrobr/#isavail)

Encontrado em 12/09/2026 em `ftp.registro.br/pub/isavail/` (versão 0.10, de janeiro de 2025). É um protocolo de texto sobre **UDP, porta 43, em `avail.registro.br`**, com especificação (`Protocolo-ISAVAIL.txt`) e clientes-exemplo em Python, Perl, PHP, Java, C++ e Ruby. O README oficial lista três formas de uso: "o proxy no site do Registro.br" (o endpoint acima), os clientes-exemplo, ou "implementação própria". A "API que não existe" existe; só não é HTTP.

```
pergunta   2 <cookie> 1 <qid> vacina.com.br 0
resposta   % Copyright Nic.br
           ST 9 727976103
           vacina.com.br
           2026-09-26 15:00:00|2026-09-26 15:00:00|2026-09-26 15:00:00
           90000001|90000002|...|90000010
```

- Sem cookie válido a resposta é `CK <cookie> <qid>`: guarda-se o cookie e repete-se a pergunta.

- O último campo (`0`, "não sugerir outras extensões") é obrigatório da versão 1 em diante. Sem ele, `ST 4 consulta inválida` para qualquer nome.

- **Confere com o endpoint web**, nos mesmos nomes no mesmo minuto: status, fqdn com o ACE de nomes acentuados, os tickets (também cortados em 10) e o motivo do 3.

- **Não confere: as datas.** Para a rodada de 09/09 a 16/09, o ISAVAIL devolveu `2026-09-26 15:00:00` nos três campos de vacina.com.br e nos dois de one.com.br, enquanto o endpoint web devolvia 09/09 e 16/09.

- **Limite não publicado.** O bloqueio vem como `ST 8` com "Query rate limit exceeded". Não medimos, de propósito: medir é bater. Este canal é contingência para o dia em que o endpoint web mudar, risco que o próprio Registro.br apontou (issue #98 do módulo oficial para WHMCS, julho de 2025).

## [RDAP: o único caminho a partir do navegador](https://liberados.com.br/api-registrobr/#rdap)

```
GET https://rdap.registro.br/domain/<nome>
```

- **CORS aberto** (`*`), então uma página em qualquer origem consulta direto. É o que o botão *conferir* deste site usa. Medido em 10/09/2026, em 45 nomes batendo com o endpoint de disponibilidade.

- O cabeçalho `Nicbr-Resource` é exposto pelo CORS e separa as fases: `release-process-running` (liberação) e `competitive-release-process-running;date=...` (leilão). Depois que a rodada fecha aparecem mais dois: `competitive-release-process-closed;date=...` (leilão com ofertas até o dia seguinte) e `release-process-waiting` (nome travado, com HTTP 200 e um objeto vazio, sem tickets). Conferido em 16/09/2026. Repare na terceira armadilha: nome travado responde **HTTP 200**, e quem lê "200 = registrado" erra aqui. Nome fora desses com `objectClassName: domain` é registrado. HTTP 404 é nome que não existe no cadastro: livre, **se o rótulo for válido**. Rótulo com menos de 2 ou mais de 26 caracteres, ou só de números, também dá 404, e não é livre: o endpoint de disponibilidade responde `status 3`, "Domínio inválido" (`a.com.br`, conferido em 15/09/2026). Nome acentuado cuja versão sem acento existe responde 303 para ela.

- Os tickets vêm em `publicIds`, com `type: ticket`. Todos, sem o corte em 10. Candidato único continua escondido.

- **Nome registrado** traz os eventos `registration`, `last changed` e `expiration`, e o `status`: `active` no ar, `inactive` vencido e fora do ar (congelado), `nicbr inactive court order` ou `nicbr inactive CG` fora do ar por decisão. Nome na rodada vem com `pending create`, sem eventos, e a data do cabeçalho `Nicbr-Resource` é o fim da rodada, também no leilão — e não o fim do leilão, que o Registro.br não publica: as ofertas seguem *pelo menos* 24 h além disso, e podem ir muito mais (em 17/09/2026, com a rodada de setembro fechada, ainda havia leilão aberto da rodada de julho). Conferido em 14/09/2026 em `galoegolo.com.br`, `google.com.br`, `one.com.br` e `vacina.com.br`. É a leitura da [ficha Quando volta](https://liberados.com.br/quando-volta/), que também abre direto em `/quando-volta/?d=nome.com.br`.

- **Acabado o leilão, o RDAP diz quem levou em cerca de um minuto.** Em 17/09/2026, dos 9 leilões conferidos, os 6 que tiveram oferta estavam `active`, com titular e `registration` um minuto depois do fim previsto. Os 3 sem oferta voltaram a `release-process-waiting`: ticket sem oferta não vira domínio. O valor da oferta vencedora não aparece em lugar nenhum do RDAP.

- **A resposta traz um link por ticket** (`domain/<nome>?ticket=<n>`, um `rel: archives` por concorrente, todos, sem o corte em 10). Cada um devolve o que a busca do Registro.br mostra ao clicar num ticket, conferido em 12/09/2026: um objeto `domain` com handle `<nome>#<ticket>`, um evento `registration` com o **instante exato em que o ticket foi emitido**, e a entidade do candidato com nome, documento mascarado, endereço e, no contato técnico, e-mail. O botão *quem disputa* lê isso no seu navegador e mostra nome, documento, hora e, para empresas, quantos domínios têm; endereço e e-mail não. O caminho `/ticket/<n>` da biblioteca oficial responde 403.

- **Limite não publicado, mas sinalizado.** Fontes de terceiros falam em 20 a 30 consultas por 5 minutos por IP; 45 em 4 minutos passaram sem bloqueio. O CORS expõe o cabeçalho `Nicbr-Rate-Limit-Exceeded` (visto em 12/09/2026 em `access-control-expose-headers`): é o sinal oficial do bloqueio, e o site para ao vê-lo. Conferência: no máximo 20 nomes por abertura, um a cada 2,5 s; *quem disputa*: dez tickets por vez.

- O corpo traz um aviso de uso que proíbe distribuição e uso comercial do dado. Por isso o resultado de uma conferência fica só no aparelho de quem conferiu: nada volta ao servidor.

## [A extensão NIC.br do RDAP: DNS conferido e tamanho do titular](https://liberados.com.br/api-registrobr/#nicbr)

O RDAP do `.br` implementa os RFCs 7480 a 7484 e uma extensão própria, documentada em `ftp.registro.br/pub/doc/br-rdap-extensions-02.txt` e tipada em `github.com/registrobr/rdap`. Conferida em 12/09/2026 contra respostas reais. O que ela acrescenta:

- **Por servidor de DNS, a conferência do próprio registro.** Cada item de `nameservers` traz um evento `delegation check` com status (`ns aa` quando responde com autoridade; `ns timeout`, `ns udn`, `ns uh`, `ns fail`... quando não) e um `last correct delegation check` com a data da última resposta certa. Para um nome que não resolve, essa data é o **"desde quando"**, sem precisar do Internet Archive.

- **Status só do NIC.br**: `nicbr inactive court order` e `nicbr inactive CG` marcam nome tirado do ar por ordem judicial ou pelo CGI.br.

- `nicbr_arbitration`: o titular aceitou a política de arbitragem (o SACI-Adm). Verdadeiro nos domínios recentes que conferimos, ausente em `google.com.br`, provavelmente por ser anterior à política (não conferido).

- **Na entidade** (`/entity/<cnpj>`): `nicbr_domainCount`, quantos domínios o titular tem. A titular de `pneus.com.br` tem 166. Um dono com 1 domínio é uma empresa com seu nome; com 166 é uma carteira. A mesma resposta traz o nome de uma pessoa (`legalRepresentative`); esta ferramenta não o lê, não o guarda e não o exibe.

## [As três listas da rodada](https://liberados.com.br/api-registrobr/#listas)

São três arquivos, e a diferença entre o segundo e o terceiro é sutil o bastante para ter custado um erro de leitura neste projeto:

| Arquivo | O que é |
|---|---|
| `lista-processo-liberacao.txt` | todos os nomes da rodada, cerca de 125 mil |
| `lista-processo-competitivo.txt` | os **elegíveis** ao leilão, por já terem acumulado rodadas travadas. A maioria está na rodada normal, muitos sem candidato visível. Não é quem está em leilão |
| `lista-competicao.txt` | os que estão **com leilão acontecendo agora** |

- Todas vêm em **ISO-8859-1**, não UTF-8.

- A terceira é **regerada a cada 5 minutos** durante a rodada (cabeçalho "Arquivo gerado em", medido em 10/09/2026), enquanto as outras duas ficam paradas desde a véspera. Ela manda sobre qualquer leitura antiga: uma requisição resolve a situação de todos os elegíveis.

- Em 09/09/2026 a classificação pelo bitmask concordou com ela em 58 de 59 nomes, sem falso positivo. Serve de conferência independente.

- Todo elegível entrou em leilão em cerca de 30 horas de rodada. Depois disso, "elegível fora do leilão" é lista vazia.

- **`lista-competicao.txt` é agrupada por rodada, e o leilão não acaba junto com ela.** Cada grupo abre com uma linha `# Processo de liberação no período de ...`. Em 17/09/2026, uma hora depois do fim da rodada de setembro, o arquivo tinha 28 nomes: 1 da rodada de julho, 25 da de agosto e 2 da de setembro. O parser precisa pular as linhas com `#` e não pode supor que todo nome é da rodada atual; "ainda está em leilão?" só se responde por este arquivo, nunca pela data da rodada.

## [O painel autenticado](https://liberados.com.br/api-registrobr/#painel)

- As páginas são renderizadas por JavaScript: `curl` devolve uma casca vazia. Para ler, Chromium headless com `--dump-dom` e orçamento de tempo virtual, ou os chunks em `/assets/`. Medido em 09/09/2026.

- A CSP e os cabeçalhos fecham os atalhos: `connect-src` só para a própria origem, o RDAP e o provedor de pagamento; `frame-ancestors 'none'`; COOP `same-origin`. Um bookmarklet não consegue mandar dado para fora.

- **Não existe cancelar candidatura**, nem no painel, nem na documentação. A vaga fica travada até a rodada resolver.

- **O painel não avisa quando você é ultrapassado** num leilão. A recomendação oficial é acompanhar os 10 minutos finais.

- **O preço de um leilão só existe para quem tem ticket nele.** O painel recebe, por WebSocket, uma linha por ticket do próprio usuário, com a maior oferta, a próxima oferta válida, o incremento e o fim. O servidor confere a origem no handshake (403 para origem estranha), e o feed inclui o documento do titular, que nunca deve sair da aba. Não há endpoint que liste todos os leilões com preço, nem página pública de resultados. Medido em 11/09/2026.

- Existe um endpoint que envia oferta. A oferta é vinculante, e não pagar gera restrição de 6 meses que o Registro.br correlaciona entre contas. Esta ferramenta nunca o chama, e nenhuma automação deveria.

- **Sem histórico público de preços.** O que existe são as estatísticas que o NIC.br publicou da primeira rodada, em setembro de 2017: mediana das ofertas vencedoras R$ 750, valor mais frequente R$ 250.

## [Limite de consultas, medido](https://liberados.com.br/api-registrobr/#limites)

O Registro.br limita por IP, e o limite vale para a máquina inteira, não só para o script. Medido em 09/09/2026, já com o detector de bloqueio correto:

| Ritmo | Taxa | Resultado |
|---|---|---|
| 2,0 s, uma conexão | 0,46 req/s | limpo |
| 1,0 s, uma conexão | 0,87 req/s | começam a aparecer falhas |
| 1,0 s, três conexões | 2,7 req/s | **bloqueia** |

A 2,7 req/s o site passou a responder "Taxa máxima de consultas excedida" para o navegador do próprio usuário, não só para o script. As regras de convivência que saíram disso:

- **2 segundos** entre consultas, no mínimo;

- **uma conexão só**, nada de paralelizar;

- filtrar a lista **antes**: nunca consultar os 125 mil nomes da rodada;

- em bloqueio, pausar 60 segundos e reconsultar o nome.

> A lista muda uma vez por mês. Varrer 15 mil nomes numa noite está de bom tamanho, e não há o que ganhar acelerando. Isto é pesquisa em cima de um endpoint público de quem hospeda o `.br` inteiro: se você for bloqueado por excesso de requisições, o problema foi seu.

## [Os arquivos do Liberados, documentados](https://liberados.com.br/api-registrobr/#nossos-dados)

O Registro.br não publica API; nós publicamos. Os arquivos abaixo são os mesmos que as páginas usam, sem chave e sem cadastro. Eles são **derivados** das listas oficiais: a fonte é o Registro.br, a nota e as categorias são nossas.

- [`/dados.json`](https://liberados.com.br/dados.json) — os nomes de melhor nota que já **consultamos** no Registro.br, com a situação de cada um. É o que a lista da página mostra. Regerado a cada execução da varredura, algumas vezes por dia (a hora está em `gerado_em`). Cerca de 950 KB, ou 120 KB comprimido (setembro de 2026).

- [`/todos.json`](https://liberados.com.br/todos.json) — a rodada **inteira** (~125 mil nomes) com nota e categoria, mas **sem situação**: ninguém consultou esses nomes um a um. Serve para busca e recorte. Muda uma vez por rodada. Cerca de 3,8 MB, ou 880 KB comprimido (setembro de 2026).

Os arquivos **não mandam cabeçalho CORS** (conferido em 17/09/2026): um script, um servidor ou um agente baixam normalmente, mas o `fetch` de uma página em outra origem é barrado pelo navegador.

Os dois são **posicionais** de propósito: cada domínio é uma lista, e valor que se repete vira índice num vocabulário no topo do arquivo. Em objetos nomeados, os 15 mil itens passariam de 3 MB. **Leia sempre o campo `versao`** antes de interpretar as colunas.

Os vocabulários do topo são listas, e o índice de cada coluna aponta para a posição nelas. Em `status`, as oito situações possíveis: `LIBERACAO_LIVRE` (na rodada, sem candidato visível), `LIBERACAO_DISPUTADA` (dois ou mais), `COMPETITIVO` (leilão), `LIVRE`, `REGISTRADO`, `AGUARDANDO_LIBERACAO` (o [status 5](#status), nome travado), `INDISPONIVEL` (o status 3) e `LIVRE_COM_TICKET` (o status 1, nunca visto). Sempre pelo nome, nunca pela posição: a ordem da lista pode mudar entre versões.

### [dados.json, versão 11](https://liberados.com.br/api-registrobr/#dados-json)

Cada item de `itens` tem 16 posições, nesta ordem:

| # | Campo | O que é |
|---|---|---|
| 0 | domínio | o nome completo, com extensão |
| 1 | situação | índice em `status` (ex.: `LIBERACAO_LIVRE`, `COMPETITIVO`) |
| 2 | candidatos | quantos aparecem na consulta pública. **0 e 1 são indistinguíveis** na fonte: veja o catálogo |
| 3 | nota | 0 a 100, critério nosso ([como calculamos](https://liberados.com.br/como-selecionamos/)) |
| 4 | elegível | 1 se está na lista de elegíveis ao leilão |
| 5 | motivos | lista de índices em `motivos` |
| 6 | risco de marca | índice em `marcas`: ok, atenção, risco |
| 7 | em leilão | 1 se está na `lista-competicao.txt` mais recente |
| 8 | verificado em | epoch UTC da nossa consulta; `0` = desconhecido |
| 9 | classe de frescor | índice em `frescor.classes`: com que prioridade o nome é reconferido |
| 10 | categorias | **bitmask**; o bit *n* é a categoria *n* de `categorias` |
| 11 | chegada do 1º | epoch estimado do primeiro concorrente; `0` = desconhecido |
| 12 | chegada do último | idem, do último visível |
| 13 | links | `[referentes, muito citados]` pelo grafo do CommonCrawl ([links/](#historico)), ou `0` quando o nome não está no índice |
| 14 | sinal | o sinal ruim mais recente do Cloudflare (`"Apostas"`, `"Estacionado ou à venda"`…), do índice [categorias/](#historico), ou `0` |
| 15 | .com | o `.com` do mesmo nome no grafo de links do CommonCrawl: `6`, `5`, `4`, `3` e `2` entre os 100, 1 mil, 10 mil, 100 mil e 1 milhão de domínios mais citados, `1` no grafo, `0` fora dele (o CommonCrawl não viu; não quer dizer que o `.com` está livre) |

As posições 11 e 12 são **estimativa** pelo ritmo de emissão de tickets da rodada, não leitura direta: o número do ticket de cada nome nunca vai para o site. No topo do arquivo vêm ainda `rodada` (início e fim), `gerado_em`, `em_leilao_em` (quando lemos a lista de leilões), `total_rodada`, `total_elegiveis`, `nao_verificados` (nomes da seleção ainda sem consulta), `criterios`, `frescor` (as classes de reconferência, com o prazo de cada uma em horas), `grafo_com` (de que grafo sai a posição 15 e quantos domínios ele tem, `{"grafo", "total"}`) e `ritmo`: a curva do contador de tickets do `.br` ao longo da rodada, pares `[epoch, maior ticket visto]`. Esse contador numera todo pedido de registro `.br`, não só candidaturas ([A11](#catalogo)), e não diz nada sobre um nome em particular.

Os dois arquivos trazem no topo o mesmo campo `previa`: os nomes que a [prévia do leilão](https://liberados.com.br/previa-do-leilao/) prevê na lista de elegíveis da rodada seguinte, como `{"alvo": "AAAA-MM", "publicado_em": "AAAA-MM-DD", "nomes": [...]}` (`alvo` é o mês da rodada do leilão), ou `null` quando não há prévia para ela. É previsão, não a lista oficial.

### [todos.json, versão 7](https://liberados.com.br/api-registrobr/#todos-json)

Seis posições (de sete a nove nos nomes com links, sinal ou `.com` no grafo), e o formato é **diferente** do outro arquivo:

| # | Campo | O que é |
|---|---|---|
| 0 | rótulo | **sem a extensão** (`padaria`, não `padaria.com.br`) |
| 1 | extensão | índice em `extensoes` |
| 2 | nota | 0 a 100 |
| 3 | motivos | índices; aqui só o **tipo** ("composto"), sem o detalhe |
| 4 | risco de marca | índice em `marcas` |
| 5 | categorias | bitmask, como no outro arquivo |
| 6 | links | `[referentes, muito citados]`; só existe nos ~5 mil nomes que estão no índice de links (`0` quando só há sinal) |
| 7 | sinal | o sinal ruim do Cloudflare, como no outro arquivo; só nos nomes que têm (`0` quando só há o `.com`) |
| 8 | .com | a faixa do `.com` do mesmo nome, como no outro arquivo; só nos nomes cujo `.com` está no grafo |

### [A série histórica e os índices da ficha](https://liberados.com.br/api-registrobr/#historico)

Em `/dados/historico/` ficam as contagens das rodadas guardadas desde 2017 (a origem de cada uma está em F5, abaixo) e os índices que a [ficha Quando volta](https://liberados.com.br/quando-volta/) lê. Mudam a cada lista nova, não a cada varredura.

| Arquivo | O que é |
|---|---|
| [`rodadas.json`](https://liberados.com.br/dados/historico/rodadas.json) | uma linha por rodada guardada (início e tamanho) e os totais por ano |
| `travas.json`, `bumerangues.json`, `modas.json` | as contagens por trás dos gráficos da aba [Dados](https://liberados.com.br/dados/) e dos Insights |
| [`disputas.json`](https://liberados.com.br/dados/historico/disputas.json) | desde setembro de 2026, por rodada: quantos candidatos cada nome conferido tinha no fim, e em que fase. `nomes` mapeia o domínio para `[candidatos, índice em fases]`. Só número: quem disputou não é gravado |
| `passagens/<xx>.txt` | em que rodadas cada nome esteve na lista, só para quem passou duas vezes ou mais (~1 milhão de nomes). Uma linha por nome, `nome⇥i,j,k`: posições na lista `rodadas` de `passagens/rodadas.json`, com `e` no fim quando o nome era elegível ao leilão naquela rodada. `com_elegiveis`, no mesmo arquivo, diz quais rodadas têm cópia da lista de elegíveis: sem ela, "não era elegível" é desconhecido |
| `arquivo/<xx>.txt` | "este domínio já teve site?", pelo Internet Archive: sendo preenchido desde 18/09/2026, começando pelos nomes de melhor nota. Uma linha por nome, 7 colunas separadas por tabulação: nome, primeira e última captura (`AAAAMM`), capturas, meses servindo página, meses redirecionando, dia da consulta (`AAAAMMDD`). Nome ausente é "ainda não consultado", nunca "sem site" |
| `links/<xx>.txt` | "quem aponta para este domínio?", pelo grafo de domínios do CommonCrawl (um por trimestre; o atual é de jul-set/2026). Uma linha por nome da lista presente no grafo, 10 colunas separadas por tabulação: nome, grafo, total de domínios no grafo, posição pela centralidade harmônica, posição pelo PageRank, referentes, referentes `.br`, referentes muito citados (entre os 1 milhão mais centrais, sem contar plataforma), referentes que são plataforma onde qualquer um publica (Blogspot, Google, redes) e até 5 principais separados por vírgula. Nome ausente é "o CommonCrawl não viu link", nunca "sem links": ele amostra a web |
| `referentes/<xx>.txt` | a lista inteira de quem aponta para cada nome: `nome⇥c:globo.com,:blog.net,p:blogspot.com`, do mais central para o menos (`c` muito citado, `p` plataforma) |
| `trafego/<xx>.txt` | visita de verdade pelo CrUX (o relatório de uso do Chrome), só Brasil: nome, melhor faixa (1 mil a 1 milhão), meses presentes, retratos guardados, primeiro e último mês, série `AAAAMM:faixa` |
| `citacoes/<xx>.txt` | nome, sites de notícia que linkaram (GDELT, 2016 a 2019), até 5 deles, páginas da Wikipédia em português e as entidades de que ele é o site oficial na Wikidata (separadas por ` \| `) |
| `categorias/<xx>.txt` | a classificação do Cloudflare com data: nome, dia da consulta, períodos `r:Apostas:202512:` separados por `;` (`r` = sinal ruim; fim vazio = até hoje). Linha sem período é "consultado, sem histórico" |

`<xx>` é a fatia do nome, de `00` a `ff`: FNV-1a de 32 bits sobre os bytes UTF-8 do nome em minúsculas, módulo 256, em hexadecimal com dois dígitos. Assim o navegador baixa só a fatia do nome consultado.

```
def fatia(nome):
    h = 0x811C9DC5
    for b in nome.strip().lower().encode("utf-8"):
        h = ((h ^ b) * 0x01000193) & 0xFFFFFFFF
    return f"{h % 256:02x}"
```

Para agentes de IA há ainda [`/llms.txt`](https://liberados.com.br/llms.txt), [`/llms-full.txt`](https://liberados.com.br/llms-full.txt) e, em cada página, um espelho em Markdown (`/<página>/index.md`, como [o desta](https://liberados.com.br/api-registrobr/index.md)). Os lembretes das rodadas são arquivos de calendário em `/lembretes/rodadas/AAAA-MM-DD.ics`.

### [Se você for consumir isso num script ou agente](https://liberados.com.br/api-registrobr/#usar-com-cuidado)

- **Baixe o JSON, não raspe a página.** É o mesmo dado, num arquivo só, e não custa nada a ninguém.

- **Para conferir a situação na hora, use o RDAP** (acima), nome a nome, e **pare no primeiro `Nicbr-Rate-Limit-Exceeded`** (ou HTTP 429). O limite é por IP e derruba o navegador de quem estiver usando junto. Para poucos nomes, 2 s entre consultas bastam; numa varredura longa o ritmo sustentável ficou perto de **3 por minuto** (12 a 15 s entre consultas, 14 e 15/09/2026), e a janela do limite não zera em 5 minutos.

- **Nunca colete o diretório em massa** nem guarde dado de titular: a Política de Uso do Registro.br proíbe, e `/entity/` bloqueia quase de imediato.

- **"0 competindo" não quer dizer sem concorrente.** A fonte não distingue nenhum de um; um candidato único fica invisível. Não prometa "livre" a partir desse número.

- **Acento e hífen não criam nome novo** no `.br`, e algumas extensões só aceitam CPF ou CNPJ (`med.br` e `adv.br` são só CPF, `ind.br` só CNPJ, sem comprovação da profissão). Já as extensões de fato restritas, como `org.br` e `gov.br`, exigem documento ou autorização, e nome livre nelas não é registrável por qualquer um.

## [Catálogo de limitações](https://liberados.com.br/api-registrobr/#catalogo)

Uma linha por limitação, para consulta rápida. O detalhe de cada uma está nas seções acima.

| # | Limitação | Consequência |
|---|---|---|
| A1 | O endpoint de disponibilidade não é API documentada (09/09/2026) | guardar respostas reais em teste para detectar mudança de formato |
| A2 | Candidato único é invisível: `tickets` só com 2 ou mais (09/09/2026, 1.657 nomes) | "0" significa "zero ou um" |
| A3 | `tickets` para em 10 (11/09/2026) | contagem acima de 10 só pelo RDAP |
| A4 | Bloqueio volta como HTTP 200 e `status: 8`, com `fqdn` vazio e `reasons` (09/09/2026, 370 falsos leilões) | tratar `reasons` e `fqdn` vazio antes do bitmask |
| A5 | `status: 3` é colisão por equivalência: acento, cedilha e hífen não criam nome (10/09/2026) | hífen e acento não são inventário |
| A6 | Limite por IP, para a máquina inteira (09/09/2026) | uma conexão, 2 s de pausa, nunca a lista inteira |
| A7 | CORS fechado (10/09/2026) | site em outra origem não consulta; sem atalho por iframe, popup ou JSONP |
| A8 | `status` é a enumeração do ISAVAIL, não um bitmask (12/09/2026) | o 5, "aguardando liberação", lido como bits vira joia falsa |
| A9 | O 5 é o nome travado: confirmado em 16/09/2026, 15 minutos depois do fechamento. O 1 nunca foi visto | nome travado não é registrado nem livre; volta na rodada seguinte |
| A10 | O endpoint é o "proxy no site" do ISAVAIL, e o Registro.br avisou que pode mudar (12/09/2026) | ISAVAIL e RDAP são as contingências |
| A11 | O número do ticket conta todo pedido de registro .br, não só candidaturas: 24.785 no contador contra 1.187 tickets visíveis em 15.167 nomes (12/09/2026) | o maior ticket é um teto para a rodada; a hora de chegada por nome continua valendo |
| R1 | RDAP com CORS aberto e `Nicbr-Resource` exposto (10/09/2026) | o único caminho para conferir ao vivo do navegador |
| R2 | RDAP também esconde o candidato único (10/09/2026) | mesma leitura "zero ou um" |
| R3 | Links por ticket no RDAP devolvem dado pessoal do candidato (10/09/2026) | fora de qualquer varredura; o site só consulta no navegador de quem pediu, mostra nome, documento mascarado e hora, e não guarda nada |
| R4 | Limite do RDAP não publicado; 45 em 4 min passaram | no máximo 20 por abertura, uma a cada 2,5 s, parar no primeiro erro |
| R5 | Aviso de uso proíbe distribuição e uso comercial (11/09/2026) | resultado fica no aparelho de quem conferiu |
| R6 | Cada servidor de DNS vem com a conferência do registro e a data da última resposta certa (12/09/2026) | o "desde quando" de um nome em branco, sem Internet Archive |
| R7 | A entidade traz quantos domínios o titular tem, e o nome de uma pessoa (12/09/2026) | a contagem é sinal; o nome nunca é lido |
| R8 | `nicbr_arbitration` e status de ordem judicial ou do CGI.br (12/09/2026) | nome fora do ar por decisão é exclusão |
| R9 | Consulta por ticket também existe como tipo próprio (12/09/2026) | mesma regra do R3 |
| R10 | O RDAP mostra o ciclo de vida de um nome registrado (`active`, `inactive`, `pending create`), mas o prazo do congelamento não é publicado (14/09/2026) | não publicar prazo em dias sem medir mais casos |
| R11 | 404 também para rótulo inválido (menos de 2 ou mais de 26 caracteres, só números); acento equivalente dá 303 (14 e 15/09/2026) | 404 só é "livre" com rótulo válido |
| R12 | Acabado o leilão, o RDAP mostra quem levou em cerca de um minuto; leilão sem oferta volta a `release-process-waiting` (17/09/2026, 9 nomes) | dá para acompanhar o resultado sem acesso privilegiado; o valor nunca aparece |
| I1 | ISAVAIL: serviço oficial e documentado, UDP 43 (12/09/2026) | contingência e consulta pontual, não varredura |
| I2 | As datas do ISAVAIL não batem com o endpoint web (12/09/2026) | datas só pelo endpoint web ou pelas listas |
| I3 | Limite do ISAVAIL não publicado; bloqueio é `ST 8` (12/09/2026) | 2 s de pausa, parar no primeiro erro |
| I4 | Sem o campo "sugerir" no fim da pergunta, tudo é "consulta inválida" (12/09/2026) | o cliente sempre manda `0` |
| L1 | Listas em ISO-8859-1 (09/09/2026) | converter antes de ler |
| L2 | `lista-processo-competitivo.txt` são os elegíveis, não os leilões (09/09/2026) | quem está em leilão é `lista-competicao.txt` |
| L3 | `lista-competicao.txt` é regerada a cada 5 min (10/09/2026) | ela manda sobre qualquer leitura antiga |
| L4 | Todo elegível entra em leilão em ~30 h (10/09/2026) | depois disso, "elegível fora do leilão" é lista vazia |
| L5 | `lista-competicao.txt` é agrupada por rodada, e o leilão dura mais que a rodada (17/09/2026: um de julho ainda aberto) | pular as linhas `#`; "está em leilão?" só por este arquivo |
| S1 | Páginas do site renderizadas por JavaScript (09/09/2026) | ler com navegador headless |
| S2 | CSP e cabeçalhos fecham bookmarklet e iframe (10 e 11/09/2026) | nada sai da aba por `fetch` |
| S3 | Não existe cancelar candidatura (09/09/2026) | vaga travada até a rodada resolver |
| S4 | O painel não avisa quando você é ultrapassado (09/09/2026) | lembrete do fim é responsabilidade sua |
| S5 | Preço do leilão só para quem tem ticket, por WebSocket, uma linha por ticket (11/09/2026) | não há lista pública de leilões com preço |
| S6 | O WebSocket confere a origem (11/09/2026) | só código na aba do Registro.br lê o feed |
| S7 | O feed traz o documento do titular (11/09/2026) | nunca sai da aba |
| S8 | Existe endpoint de oferta, e a oferta é vinculante (11/09/2026) | nenhuma automação deve chamar |
| S9 | Sem histórico público de preços (11/09/2026) | só as estatísticas do NIC.br de 2017 |
| S10 | O registro reserva nomes por marca conhecida, ordem judicial, CGI.br e baixo calão; a especificação EPP também tem a mensagem de reserva por mais de 6 processos de liberação (12/09/2026), mas essa regra (Res. CGI.br 2008/008) foi revogada pela Res. 2017/031 (17/09/2026) | um `status: 3` pode ser qualquer um; ler `reasons`; "mais de 6 processos" na mensagem é regra revogada, não vigente |
| S11 | O limite de tickets do processo de liberação por organização existe no protocolo (12/09/2026) | é o limite de 3 a 200, visto do outro lado |
| S12 | Nome travado cancela todos os tickets, que não passam para a rodada seguinte (12/09/2026, texto do e-mail de resultado em duas fontes públicas) | candidatar de novo; a vaga volta porque o limite conta tickets pendentes |
| S13 | Três travas e o nome vira elegível ao leilão na quarta rodada: 99,4% de 12.375 elegíveis (13/09/2026; refeito com a série completa em 02/10/2026) | a resolução não dá o número; o NIC.br disse três em entrevista de 2017 (17/09/2026) |
| S14 | Do vencimento à lista passam cerca de 5 meses (13/09/2026, série histórica) | dá para prever quando um domínio não pago volta |
| S15 | Nenhuma fonte pública guarda o passado de uma disputa: quantos se candidataram numa rodada que acabou (15/09/2026) | a contagem só existe se alguém gravar durante a rodada ([`disputas.json`](#historico)) |
| S16 | Às 15h do último dia mudam as respostas: status 5 e RDAP vazio para nome travado, `competitive-release-process-closed` para leilão, datas do leilão presas ao fim da rodada (16/09/2026) | tratar os dois cabeçalhos novos; nunca "200 = registrado" |
| C4 | A Política de Uso bloqueia a coleta em massa do diretório; a consulta é "de forma individual" (15/09/2026) | dado de titular, um por vez e a pedido de quem olha |
| T1 | Troca de titular não é online: procedimento administrativo, com assinatura gov.br ou ICP-Brasil (12/09/2026) | não existe API de transferência no `.br` |
| T2 | O EPP não transfere titularidade: `transfer` é "comando não implementado" (12/09/2026) | nem um provedor credenciado automatiza a troca |
| F1 | INPI sem API pública; o e-INPI exige sessão | checagem de marca é heurística; a final é manual |
| F2 | Cadastro de CNPJ da Receita é CC BY-ND | tabela derivada não pode ser redistribuída |
| F3 | Limite do Wayback: os "60 por minuto" que circulam não são publicados pelo Internet Archive nem foram medidos aqui (17/09/2026) | regra conservadora, não número documentado |
| F4 | RDAP e DNS mostram o presente | para dizer que um nome "nunca foi usado" é preciso o Wayback |
| F5 | O Registro.br não guarda as listas antigas. O Internet Archive tem 87 de 109 listas de liberação desde set/2017 e 69 de elegíveis; as 22 de liberação que faltavam vieram de listas cedidas por um leitor (02/10/2026) | a série de liberação está completa; a de elegíveis segue com buracos |
| F6 | O Wayback sai do ar em rajadas (HTTP 503) e demora até 33 s (14 e 15/09/2026) | erro nunca vira "sem capturas" |
| F7 | O `.com` tem RDAP público com CORS aberto na Verisign, e o dono mora no RDAP do registrador (15/09/2026) | dá para mostrar o dono do `.com` do navegador, com CSP larga |
| F8 | Nenhum endpoint do Internet Archive tem CORS; o `__wb/sparkline` responde "já teve site?" em ~1 KB e ~1 s (17/09/2026) | a consulta ao Wayback não pode sair do navegador de quem olha |
| F9 | Do GitHub Actions o Internet Archive recusa a conexão (Errno 111, sem 429), e mais devagar é pior; o IP de casa também é barrado numa coleta longa (18/09/2026) | coleta local, recuando e retomando; o resultado vira índice permanente |

Tudo acima foi medido com comandos públicos (curl e navegador headless) nas datas indicadas, e pode mudar sem aviso. Este projeto não tem vínculo com o Registro.br, o NIC.br ou o CGI.br.

---

Fonte: https://liberados.com.br/api-registrobr/ · Liberados, projeto independente, sem vínculo com o Registro.br, o NIC.br ou o CGI.br.
