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.
403 forbidden_zone.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.
Cada token contiene ámbitos. Un token sin ámbitos configurados recibe dns:read de forma predeterminada. El ámbito de escritura también permite leer.
| Ámbito | Permite |
|---|---|
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
| HTTP | Código de error | Significado |
|---|---|---|
| 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:
-
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. -
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 aPOST /v1/dns/zones/{zone}/verify. -
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.
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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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étodo | Ruta | Ámbito | Finalidad |
|---|---|---|---|
| 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
| Campo | Tipo | Requisito | Notas |
|---|---|---|---|
zone |
string |
Obligatorio | Zona raíz, convertida a minúsculas por el servidor. Se aceptan zonas inversas. |
Crear un registro DNS
| Campo | Tipo | Requisito | Notas |
|---|---|---|---|
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
| Campo | Tipo | Requisito | Notas |
|---|---|---|---|
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. |
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/zonesReclamar 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
- Cree una clave de API con
dns:writeen Cuenta → Claves de API y cópiela cuando se muestre. - Guarde el token en una variable de entorno protegida de su equipo.
- Llame a
GET /v1/account/mepara confirmar el token y sus ámbitos. - Reclame una zona. La respuesta indica si la verificación es instantánea, se basa en TXT o usa el método NS antiguo.
- Complete la prueba DNS devuelta cuando sea necesaria y llame después al endpoint de verificación.
- 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.