CNF API · v1

Uma API só para o c.nf: zonas e registros DNS, arquivos pessoais, pacotes, credenciais salvas, consultas de domínio e alguns serviços públicos que dispensam conta. Toda operação autenticada fica restrita à conta cuja chave fez a chamada.

Visão geral

A versão 1 disponibiliza operações de DNS para zonas que você reivindicou pelo Gerenciamento de DNS. Crie e revogue tokens em Conta → Chaves de API.

O mesmo limite de confiança do console. A API usa a verificação de propriedade de zona confirmada do console. Uma zona disponível para sua conta do console está disponível para sua chave de API; qualquer outra zona retorna 403 forbidden_zone.
Para obter um catálogo de endpoints legível por máquina, solicite GET /v1?format=json ou envie Accept: application/json para /v1.

URL base e versionamento

https://api.c.nf/v1

Todos os endpoints ficam abaixo de /v1. Alterações incompatíveis usarão um novo caminho de versão principal. Campos e endpoints retrocompatíveis podem ser adicionados à v1 e serão registrados no histórico de alterações.

Autenticação e escopos

Toda requisição que leia ou altere dados da conta deve incluir um token Bearer. Os tokens começam com cnf_, seguido de 32 caracteres hexadecimais.

curl https://api.c.nf/v1/dns/zones \
  -H "Authorization: Bearer cnf_a1b2c3d4e5f60718293a4b5c6d7e8f90"

Os tokens são armazenados como hashes unidirecionais, e o valor completo é exibido somente quando o token é criado. Se você perder um token, revogue-o e crie outro.

Use somente o cabeçalho Authorization. Autenticação Basic e tokens na string de consulta não são aceitos. Um token em uma URL pode vazar por logs, cabeçalhos de referência e histórico do navegador.

Cada token tem escopos. Um token sem escopo configurado recebe dns:read por padrão. O escopo de gravação também permite leituras.

EscopoPermissões
dns:read Listar zonas e registros e ler registros individuais.
dns:write Ler, criar, atualizar e excluir registros DNS e reivindicações de zona.
* Todos os escopos. Use esta opção somente quando ela for realmente necessária.

Uma incompatibilidade retorna 403 forbidden_scope e inclui required_scopes e token_scopes para diagnóstico.

Isolamento por usuário

Um token Bearer corresponde a exatamente um user_id. Toda operação de zona verifica a reivindicação confirmada desse usuário antes de qualquer leitura ou gravação. Não existe exceção administrativa, mecanismo de personificação nem desvio entre usuários.

Mesmo um token com * só pode atuar em zonas verificadas por seu próprio usuário. Tentar usar a zona de outra conta retorna 403 forbidden_zone.

Envelope de resposta

Resposta bem-sucedida

{
  "success": true,
  "data": { "zones": [] },
  "request_id": "req_abc123def456abcd"
}

Resposta de erro

{
  "success": false,
  "error": "forbidden_zone",
  "message": "zone not verified for this account (or does not exist)",
  "request_id": "req_abc123def456abcd",
  "zone": "example.com"
}

request_id aparece em todas as respostas e pode ser registrado com segurança nos logs do cliente.

Códigos de erro

HTTPCódigo de erroSignificado
400 bad_request Um campo obrigatório está ausente, o corpo está malformado ou uma entrada é inválida.
401 unauthorized O token Bearer está ausente, é inválido ou foi revogado.
403 forbidden_scope O token não tem o escopo obrigatório.
403 forbidden_zone A zona não foi verificada para esta conta ou não existe.
404 not_found A zona, o registro ou o usuário solicitado não foi encontrado.
405 method_not_allowed Este endpoint não aceita o método HTTP usado.
502 upstream_error O provedor de DNS retornou um erro.

Verificação de zona

Quando POST /v1/dns/zones reivindica uma zona, o servidor escolhe um destes caminhos:

  1. Verificação instantânea (method: "auto") — Usada quando nenhuma outra conta reivindicou a zona. A reivindicação é verificada imediatamente. Os registros só se tornam autoritativos depois que o proprietário aponta a delegação NS no registrador para os servidores de nomes retornados.
  2. Verificação por TXT — Usada para uma reivindicação contestada. Adicione o valor TXT retornado em _cnfdns-verify.<zone> e chame POST /v1/dns/zones/{zone}/verify.
  3. Verificação NS legada — Reivindicações pendentes mais antigas podem usar verify_method: "ns". A verificação compara as respostas NS ativas da zona com o conjunto esperado de servidores de nomes.
Por que a verificação instantânea é segura. Os registros armazenados por c.nf ficam inertes até que o proprietário do domínio altere a delegação NS autoritativa no registrador. Uma primeira reivindicação, por si só, não pode colocar esses registros em operação.
Zonas reversas O mesmo modelo se aplica a in-addr.arpa e ip6.arpa. Reivindique a zona, obtenha expected_ns e envie esses destinos de delegação ao registro competente.

A verificação é idempotente. Repeti-la para uma reivindicação verificada retorna verified: true sem alterar a reivindicação.

Tipos de registro e limites

Tipos de registro aceitos

A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, SPF.

priority é obrigatório para MX e SRV e ignorado para os outros tipos. ttl deve estar entre 60 e 2.592.000 segundos.

Endpoints da API

Serviços públicos

Endpoints pequenos e confiáveis que dispensam conta: hora, endereço, país, câmbio e hashes.

MétodoCaminhoEscopoFinalidade
GET /v1/public/time Público A hora UTC atual em ISO 8601, RFC 2822 e formato Unix.
GET /v1/public/timestamp Público O timestamp Unix atual, em segundos e milissegundos.
GET /v1/public/ip Público O endereço de onde veio esta requisição.
GET /v1/public/geo Público O país de onde veio esta requisição, conforme resolvido na borda.
GET /v1/public/fx Público Taxas de câmbio para uma moeda base, atualizadas a cada hora.
GET /v1/public/hash Público Gere o hash de um texto com SHA-256 ou outro algoritmo suportado.

Conta

De quem é o token e o que ele pode fazer.

MétodoCaminhoEscopoFinalidade
GET /v1/account/me Qualquer token A conta do token, seus escopos e os endpoints que eles abrem.
GET /v1/account/sessions account:read Todas as sessões de navegador conectadas a esta conta.
POST /v1/account/sessions/revoke account:write Encerrar uma sessão.
POST /v1/account/sessions/revoke-all account:write Encerrar todas as sessões.
POST /v1/account/profile account:write Alterar seu nome de exibição.

DNS

Reivindique um domínio, comprove que o controla e gerencie os registros.

MétodoCaminhoEscopoFinalidade
GET /v1/dns/zones dns:read Todas as zonas reivindicadas por esta conta.
POST /v1/dns/zones dns:write Reivindique uma zona. Sem disputa é imediato; com disputa vem um desafio TXT.
GET /v1/dns/zones/{zone} dns:read Uma zona, com as instruções de verificação se ainda estiver pendente.
POST /v1/dns/zones/{zone}/verify dns:write Executa a verificação e marca a zona como verificada se corresponder.
DELETE /v1/dns/zones/{zone} dns:write Libera uma reivindicação. Os registros em si não são tocados.
GET /v1/dns/zones/{zone}/records dns:read Todos os registros de uma zona verificada.
POST /v1/dns/zones/{zone}/records dns:write Adiciona um registro a uma zona verificada.
GET /v1/dns/zones/{zone}/records/{id} dns:read Um registro específico.
PATCH /v1/dns/zones/{zone}/records/{id} dns:write Altera parte de um registro; o que for omitido mantém o valor.
DELETE /v1/dns/zones/{zone}/records/{id} dns:write Remove um registro.

Credenciais

O cofre privado de credenciais por trás da ferramenta de credenciais.

MétodoCaminhoEscopoFinalidade
GET /v1/cred cred:read cred:write Credenciais salvas, com filtro opcional por plataforma.
POST /v1/cred cred:write Salva uma credencial.

Arquivos

Armazenamento pessoal: listar, enviar, editar, compartilhar e excluir.

MétodoCaminhoEscopoFinalidade
GET /v1/files files:read files:write Seus arquivos salvos, dos mais recentes aos mais antigos.
GET /v1/files/{id} files:read files:write Um arquivo, incluindo o link de compartilhamento, se houver.
GET /v1/files/download files:read files:write Baixa um arquivo.
POST /v1/files/upload files:write Envia um arquivo.
POST /v1/files/update files:write Edita os dados de um arquivo, inclusive o compartilhamento.
POST /v1/files/rename files:write Altera o nome com que um arquivo é baixado.
POST /v1/files/delete files:write Exclui um arquivo e seu conteúdo.
POST /v1/files/upload-chunk files:write Enviar uma parte de um envio grande.
POST /v1/files/upload-finalize files:write Juntar as partes em um arquivo.

CDN

Cache na borda e tráfego dos arquivos que você compartilha.

MétodoCaminhoEscopoFinalidade
GET /v1/cdn/stats cdn:read Configurações de cache e contagem de requisições dos seus arquivos compartilhados.
POST /v1/cdn/config cdn:write Definir por quanto tempo a borda guarda um arquivo, ou parar de servi-lo.
POST /v1/cdn/purge cdn:write Remover um arquivo do cache da borda agora.

Encaminhamento de SMS

Mensagens retransmitidas do seu telefone e as chaves que permitem isso.

MétodoCaminhoEscopoFinalidade
GET /v1/sms/messages sms:read Mensagens encaminhadas para a sua conta.
GET /v1/sms/keys sms:read sms:write As chaves de encaminhamento usadas pelos seus aparelhos.
POST /v1/sms/keys sms:write Emitir uma chave de encaminhamento. No máximo cinco.
DELETE /v1/sms/keys sms:write Revogar uma chave de encaminhamento.

Sites estáticos

Envie um zip e sirva um site.

MétodoCaminhoEscopoFinalidade
GET /v1/sites sites:read sites:write Seus sites estáticos, do publicado mais recentemente ao mais antigo.
POST /v1/sites/deploy sites:write Publicar um zip como site.
POST /v1/sites/delete sites:write Excluir um site e seus arquivos.

Implantações

Os endpoints de formulário, webhook e link curto que você publicou.

MétodoCaminhoEscopoFinalidade
GET /v1/deployments deploy:read deploy:write Suas implantações e quantas vezes cada uma foi usada.
POST /v1/deployments/toggle deploy:write Ativar ou desativar uma implantação.
POST /v1/deployments/delete deploy:write Excluir uma implantação.

Domínios

Sua carteira de domínios e os dados de registro.

MétodoCaminhoEscopoFinalidade
GET /v1/domains domain:read domain:write Seus domínios, os que vencem primeiro no topo.
POST /v1/domains/whois-sync domain:write Atualizar um domínio a partir do registro.

Pacotes

Publique versões e consulte suas versões e totais de download.

MétodoCaminhoEscopoFinalidade
GET /v1/packages packages:read packages:write Seus pacotes, com contagem de versões e total de downloads.
GET /v1/packages/{slug} packages:read packages:write Um pacote, com todas as versões e artefatos.
POST /v1/packages/publish packages:write Publica uma versão e cria o pacote se ele for novo.
POST /v1/packages/update packages:write Edita os dados de um pacote.
POST /v1/packages/delete packages:write Exclui um pacote, todas as versões e todos os artefatos.

WHOIS

Dados de registro de um domínio, em cache e compartilhados com as ferramentas de domínio.

MétodoCaminhoEscopoFinalidade
GET /v1/whois whois:read Dados de registro de um domínio.

Para agentes de IA

Aponte um agente para /v1/ai e obtenha um resumo feito para colar direto em um prompt, ou para /v1/ai?format=json e receber os mesmos endpoints como definições de ferramentas. /v1/openapi.json é o contrato OpenAPI 3.1 completo e /llms.txt é o mapa para rastreadores. Os quatro são gerados a partir da mesma tabela de rotas desta página, então nenhum deles descreve um endpoint que não existe.

curl https://api.c.nf/v1/ai
curl https://api.c.nf/v1/ai?format=json
curl https://api.c.nf/v1/openapi.json

Campos da requisição

Criar uma reivindicação de zona

CampoTipoObrigatoriedadeObservações
zone string Obrigatório Zona apex, convertida em minúsculas pelo servidor. Zonas reversas são aceitas.

Criar um registro DNS

CampoTipoObrigatoriedadeObservações
type string Obrigatório Um entre A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR ou SPF.
host string Opcional Somente o subdomínio. Use uma string vazia ou @ para o apex.
value string Obrigatório Conteúdo do registro, como um endereço IP, nome de destino ou valor de texto.
ttl integer Opcional Entre 60 e 2.592.000 segundos. O padrão é 3.600.
priority integer Opcional Obrigatório para MX e SRV; ignorado para os outros tipos.

Atualizar um registro DNS

CampoTipoObrigatoriedadeObservações
host string Opcional Subdomínio substituto.
value string Opcional Não pode ficar vazio após a mesclagem com o registro atual.
ttl integer Opcional Entre 60 e 2.592.000 segundos.
priority integer Opcional Usado somente para MX e SRV.
O tipo do registro não pode ser alterado com PATCH. Exclua o registro e crie outro para mudar o tipo.

Exemplos

Listar zonas

curl -H "Authorization: Bearer $CNF_TOKEN" \
  https://api.c.nf/v1/dns/zones

Reivindicar uma zona

curl -X POST https://api.c.nf/v1/dns/zones \
  -H "Authorization: Bearer $CNF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"zone":"example.com"}'

Verificar uma zona

curl -X POST https://api.c.nf/v1/dns/zones/example.com/verify \
  -H "Authorization: Bearer $CNF_TOKEN"

Criar um registro

curl -X POST https://api.c.nf/v1/dns/zones/example.com/records \
  -H "Authorization: Bearer $CNF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"A","host":"api","value":"192.0.2.10"}'

Início rápido

  1. Crie uma chave de API com dns:write em Conta → Chaves de API e copie-a quando ela for exibida.
  2. Armazene o token em uma variável de ambiente protegida em sua máquina.
  3. Chame GET /v1/account/me para confirmar o token e seus escopos.
  4. Reivindique uma zona. A resposta informa se a verificação é instantânea, baseada em TXT ou baseada em NS legado.
  5. Conclua a prova DNS retornada quando ela for necessária e chame o endpoint de verificação.
  6. Crie, leia, atualize ou exclua registros somente depois que a reivindicação for verificada.

Registro de alterações

v1.1.0 — gerenciamento de zonas

  • Adicionadas reivindicações de zona pela API, incluindo os caminhos de verificação instantânea e por TXT.
  • Adicionados endpoints de status de zona individual e de verificação idempotente.
  • Adicionada a revogação de reivindicações sem exclusão implícita de registros.
  • Adicionados filtros de verificadas, pendentes e todas à lista de zonas.

v1.0.0 — versão inicial

  • Adicionadas autenticação por token Bearer e isolamento de zonas por usuário.
  • Adicionados escopos de leitura e gravação.
  • Adicionados endpoints de conta, lista de zonas e gerenciamento de registros.
  • Adicionado um envelope de resposta consistente com um identificador de requisição.