CNF API · v1

Una sola API para c.nf: zonas y registros DNS, archivos personales, paquetes, credenciales guardadas, consultas de dominios y unos cuantos servicios públicos que no requieren cuenta. Cada operación autenticada queda limitada a la cuenta cuya clave hizo la llamada.

Descripción general

La versión 1 expone operaciones DNS para las zonas que haya reclamado mediante Administración de DNS. Cree y revoque tokens en Cuenta → Claves de API.

El mismo límite de confianza que la consola. La API usa la comprobación de propiedad de zonas verificadas de la consola. Una zona disponible para su cuenta de la consola está disponible para su clave de API; cualquier otra zona devuelve 403 forbidden_zone.
Para obtener un catálogo de endpoints legible por máquinas, solicite GET /v1?format=json o envíe Accept: application/json a /v1.

URL base y versiones

https://api.c.nf/v1

Todos los endpoints se encuentran bajo /v1. Los cambios incompatibles usarán una ruta de nueva versión principal. Se pueden añadir campos y endpoints compatibles con versiones anteriores a v1, que se anotarán en el registro de cambios.

Autenticación y ámbitos

Cada solicitud que lea o modifique datos de una cuenta debe incluir un token Bearer. Los tokens comienzan por cnf_ seguido de 32 caracteres hexadecimales.

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

Los tokens se guardan como hashes unidireccionales y el valor completo solo se muestra al crearlo. Si pierde un token, revóquelo y cree otro.

Use únicamente la cabecera Authorization. No se aceptan la autenticación básica ni los tokens en la cadena de consulta. Un token incluido en una URL puede filtrarse mediante registros, cabeceras de referencia y el historial del navegador.

Cada token contiene ámbitos. Un token sin ámbitos configurados recibe dns:read de forma predeterminada. El ámbito de escritura también permite leer.

ÁmbitoPermite
dns:read Enumerar zonas y registros, y leer registros individuales.
dns:write Leer, crear, actualizar y eliminar registros DNS y reclamaciones de zonas.
* Todos los ámbitos. Úselo únicamente cuando sea realmente necesario.

Una discrepancia devuelve 403 forbidden_scope e incluye tanto required_scopes como token_scopes para facilitar el diagnóstico.

Aislamiento por usuario

Un token Bearer se asocia con exactamente un user_id. Cada controlador de zona comprueba la reclamación verificada de ese usuario antes de cualquier lectura o escritura. No existe ninguna excepción para administradores, ruta de suplantación ni forma de eludir el aislamiento entre usuarios.

Incluso un token con * solo puede actuar sobre las zonas verificadas de su propio usuario. Intentar usar la zona de otra cuenta devuelve 403 forbidden_zone.

Estructura de respuesta

Respuesta correcta

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

Respuesta de error

{
  "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 en todas las respuestas y puede registrarse de forma segura en los registros del cliente.

Códigos de error

HTTPCódigo de errorSignificado
400 bad_request Falta un campo obligatorio, el cuerpo está mal formado o una entrada no es válida.
401 unauthorized El token Bearer falta, no es válido o está revocado.
403 forbidden_scope El token no tiene el ámbito requerido.
403 forbidden_zone La zona no está verificada para esta cuenta o no existe.
404 not_found No se encontró la zona, el registro o el usuario solicitado.
405 method_not_allowed Este endpoint no admite el método HTTP.
502 upstream_error El proveedor de DNS devolvió un error.

Verificación de zonas

Cuando POST /v1/dns/zones reclama una zona, el servidor elige una de estas vías:

  1. Verificación instantánea (method: "auto") — Se usa cuando ninguna otra cuenta ha reclamado la zona. La reclamación se verifica de inmediato. Los registros solo pasan a ser autoritativos después de que el propietario dirija la delegación NS del registrador a los servidores de nombres devueltos.
  2. Verificación mediante TXT — Se usa para una reclamación disputada. Añada el valor TXT devuelto en _cnfdns-verify.<zone> y llame después a POST /v1/dns/zones/{zone}/verify.
  3. Verificación NS antigua — Las reclamaciones pendientes antiguas pueden usar verify_method: "ns". La verificación compara las respuestas NS activas de la zona con el conjunto esperado de servidores de nombres.
Por qué es segura la verificación instantánea. Los registros almacenados por c.nf permanecen inactivos hasta que el propietario del dominio cambia la delegación NS autoritativa en el registrador. Una primera reclamación por sí sola no puede hacer que se sirvan esos registros.
Zonas inversas El mismo modelo se aplica a in-addr.arpa e ip6.arpa. Reclame la zona, obtenga expected_ns y envíe esos destinos de delegación al registro correspondiente.

La verificación es idempotente. Repetirla para una reclamación verificada devuelve verified: true sin cambiar la reclamación.

Tipos de registro y límites

Tipos de registro admitidos

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

priority es obligatorio para MX y SRV, y se ignora para los demás tipos. ttl debe estar entre 60 y 2.592.000 segundos.

Puntos de conexión

Servicios públicos

Endpoints pequeños y fiables que no requieren cuenta: hora, dirección, país, tipos de cambio y hashes.

MétodoRutaÁmbitoFinalidad
GET /v1/public/time Público La hora UTC actual en ISO 8601, RFC 2822 y formato Unix.
GET /v1/public/timestamp Público La marca de tiempo Unix actual, en segundos y milisegundos.
GET /v1/public/ip Público La dirección desde la que llegó esta solicitud.
GET /v1/public/geo Público El país desde el que llegó esta solicitud, según el edge.
GET /v1/public/fx Público Tipos de cambio para una moneda base, actualizados cada hora.
GET /v1/public/hash Público Calcula el hash de una cadena con SHA-256 u otro algoritmo admitido.

Cuenta

A quién pertenece un token y qué puede hacer.

MétodoRutaÁmbitoFinalidad
GET /v1/account/me Cualquier token La cuenta del token, sus permisos y los endpoints que abren.
GET /v1/account/sessions account:read Todas las sesiones de navegador con la sesión iniciada en esta cuenta.
POST /v1/account/sessions/revoke account:write Cerrar una sesión.
POST /v1/account/sessions/revoke-all account:write Cerrar todas las sesiones.
POST /v1/account/profile account:write Cambiar tu nombre visible.

DNS

Reclama un dominio, demuestra que lo controlas y gestiona sus registros.

MétodoRutaÁmbitoFinalidad
GET /v1/dns/zones dns:read Todas las zonas reclamadas por esta cuenta.
POST /v1/dns/zones dns:write Reclama una zona. Sin disputa es inmediato; en disputa se emite un reto TXT.
GET /v1/dns/zones/{zone} dns:read Una zona, con sus instrucciones de verificación si sigue pendiente.
POST /v1/dns/zones/{zone}/verify dns:write Ejecuta la comprobación y marca la zona como verificada si coincide.
DELETE /v1/dns/zones/{zone} dns:write Libera una reclamación. Los registros no se tocan.
GET /v1/dns/zones/{zone}/records dns:read Todos los registros de una zona verificada.
POST /v1/dns/zones/{zone}/records dns:write Añade un registro a una zona verificada.
GET /v1/dns/zones/{zone}/records/{id} dns:read Un registro concreto.
PATCH /v1/dns/zones/{zone}/records/{id} dns:write Cambia parte de un registro; lo que omitas conserva su valor.
DELETE /v1/dns/zones/{zone}/records/{id} dns:write Elimina un registro.

Credenciales

El almacén privado de credenciales que hay detrás de la herramienta de credenciales.

MétodoRutaÁmbitoFinalidad
GET /v1/cred cred:read cred:write Credenciales guardadas, con filtro opcional por plataforma.
POST /v1/cred cred:write Guarda una credencial.

Archivos

Almacenamiento personal de archivos: listar, subir, editar, compartir y eliminar.

MétodoRutaÁmbitoFinalidad
GET /v1/files files:read files:write Tus archivos guardados, los más recientes primero.
GET /v1/files/{id} files:read files:write Un archivo, con su enlace de uso compartido si lo tiene.
GET /v1/files/download files:read files:write Descarga un archivo.
POST /v1/files/upload files:write Sube un archivo.
POST /v1/files/update files:write Edita los datos de un archivo, incluido si está compartido.
POST /v1/files/rename files:write Cambia el nombre con el que se descarga un archivo.
POST /v1/files/delete files:write Elimina un archivo y su contenido.
POST /v1/files/upload-chunk files:write Enviar una parte de una subida grande.
POST /v1/files/upload-finalize files:write Unir las partes en un archivo.

CDN

Caché en el borde y tráfico de los archivos que compartes.

MétodoRutaÁmbitoFinalidad
GET /v1/cdn/stats cdn:read Configuración de caché y número de peticiones de tus archivos compartidos.
POST /v1/cdn/config cdn:write Definir cuánto conserva el borde un archivo, o dejar de servirlo.
POST /v1/cdn/purge cdn:write Quitar un archivo del caché del borde ahora.

Reenvío de SMS

Mensajes retransmitidos desde tu teléfono y las claves que lo permiten.

MétodoRutaÁmbitoFinalidad
GET /v1/sms/messages sms:read Mensajes reenviados a tu cuenta.
GET /v1/sms/keys sms:read sms:write Las claves de reenvío que usan tus dispositivos.
POST /v1/sms/keys sms:write Emitir una clave de reenvío. Cinco como máximo.
DELETE /v1/sms/keys sms:write Revocar una clave de reenvío.

Sitios estáticos

Sube un zip y sirve un sitio.

MétodoRutaÁmbitoFinalidad
GET /v1/sites sites:read sites:write Tus sitios estáticos, del desplegado más reciente al más antiguo.
POST /v1/sites/deploy sites:write Desplegar un zip como sitio.
POST /v1/sites/delete sites:write Eliminar un sitio y sus archivos.

Despliegues

Los endpoints de formulario, webhook y enlace corto que has desplegado.

MétodoRutaÁmbitoFinalidad
GET /v1/deployments deploy:read deploy:write Tus despliegues y cuántas veces se ha usado cada uno.
POST /v1/deployments/toggle deploy:write Activar o desactivar un despliegue.
POST /v1/deployments/delete deploy:write Eliminar un despliegue.

Dominios

Tu cartera de dominios y sus datos de registro.

MétodoRutaÁmbitoFinalidad
GET /v1/domains domain:read domain:write Tus dominios, primero los que vencen antes.
POST /v1/domains/whois-sync domain:write Actualizar un dominio desde su registro.

Paquetes

Publica versiones y consulta sus versiones y totales de descargas.

MétodoRutaÁmbitoFinalidad
GET /v1/packages packages:read packages:write Tus paquetes, con número de versiones y total de descargas.
GET /v1/packages/{slug} packages:read packages:write Un paquete, con todas sus versiones y artefactos.
POST /v1/packages/publish packages:write Publica una versión y crea el paquete si es nuevo.
POST /v1/packages/update packages:write Edita los datos de un paquete.
POST /v1/packages/delete packages:write Elimina un paquete, todas sus versiones y todos sus artefactos.

WHOIS

Datos de registro de un dominio, en caché y compartidos con las herramientas de dominios.

MétodoRutaÁmbitoFinalidad
GET /v1/whois whois:read Datos de registro de un dominio.

Para agentes de IA

Dirige un agente a /v1/ai para obtener un resumen pensado para pegarlo en un prompt, o a /v1/ai?format=json para los mismos endpoints como definiciones de herramientas. /v1/openapi.json es el contrato OpenAPI 3.1 completo y /llms.txt es el mapa para rastreadores. Los cuatro se generan a partir de la misma tabla de rutas que esta página, así que ninguno puede describir un endpoint que no 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 de solicitud

Crear una reclamación de zona

CampoTipoRequisitoNotas
zone string Obligatorio Zona raíz, convertida a minúsculas por el servidor. Se aceptan zonas inversas.

Crear un registro DNS

CampoTipoRequisitoNotas
type string Obligatorio Uno de A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR o SPF.
host string Opcional Solo el subdominio. Use una cadena vacía o @ para la raíz.
value string Obligatorio Contenido del registro, como una dirección IP, un nombre de destino o un valor de texto.
ttl integer Opcional Entre 60 y 2.592.000 segundos. El valor predeterminado es 3.600.
priority integer Opcional Obligatorio para MX y SRV; se ignora para los demás tipos.

Actualizar un registro DNS

CampoTipoRequisitoNotas
host string Opcional Subdominio sustituto.
value string Opcional No puede quedar vacío después de combinarlo con el registro actual.
ttl integer Opcional Entre 60 y 2.592.000 segundos.
priority integer Opcional Se usa solo para MX y SRV.
El tipo de registro no puede cambiarse con PATCH. Elimine el registro y cree otro para cambiar el tipo.

Ejemplos

Enumerar zonas

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

Reclamar una 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 una zona

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

Crear un 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"}'

Inicio rápido

  1. Cree una clave de API con dns:write en Cuenta → Claves de API y cópiela cuando se muestre.
  2. Guarde el token en una variable de entorno protegida de su equipo.
  3. Llame a GET /v1/account/me para confirmar el token y sus ámbitos.
  4. Reclame una zona. La respuesta indica si la verificación es instantánea, se basa en TXT o usa el método NS antiguo.
  5. Complete la prueba DNS devuelta cuando sea necesaria y llame después al endpoint de verificación.
  6. Cree, lea, actualice o elimine registros solo después de verificar la reclamación.

Registro de cambios

v1.1.0 — administración de zonas

  • Se añadieron reclamaciones de zonas mediante la API, incluidas las vías de verificación instantánea y mediante TXT.
  • Se añadieron endpoints de estado de zona individual y verificación idempotente.
  • Se añadió la revocación de reclamaciones sin eliminar implícitamente los registros.
  • Se añadieron filtros de zonas verificadas, pendientes y todas a la lista de zonas.

v1.0.0 — versión inicial

  • Se añadieron autenticación mediante token Bearer y aislamiento de zonas por usuario.
  • Se añadieron ámbitos de lectura y escritura.
  • Se añadieron endpoints de cuenta, lista de zonas y administración de registros.
  • Se añadió una estructura de respuesta uniforme con un identificador de solicitud.