API CNF · v1
Une seule API pour c.nf : zones et enregistrements DNS, fichiers personnels, paquets, identifiants enregistrés, recherches de domaines et quelques services publics qui ne demandent aucun compte. Toute opération authentifiée reste limitée au compte dont la clé a fait l’appel.
Vue d’ensemble
La version 1 permet d’effectuer des opérations DNS sur les zones que vous avez revendiquées depuis la gestion DNS. Créez et révoquez des jetons dans Compte → Clés d’API.
403 forbidden_zone.GET /v1?format=json ou envoyez Accept: application/json à /v1.URL de base et gestion des versions
https://api.c.nf/v1
Tous les points de terminaison se trouvent sous /v1. Toute modification incompatible utilisera un nouveau chemin de version majeure. Des champs et points de terminaison rétrocompatibles pourront être ajoutés à la v1 et seront consignés dans le journal des modifications.
Authentification et portées
Toute requête qui lit ou modifie des données de compte doit inclure un jeton Bearer. Les jetons commencent par cnf_, suivi de 32 caractères hexadécimaux.
curl https://api.c.nf/v1/dns/zones \
-H "Authorization: Bearer cnf_a1b2c3d4e5f60718293a4b5c6d7e8f90"
Les jetons sont stockés sous forme de hachages à sens unique et leur valeur complète n’est affichée qu’à leur création. Si vous perdez un jeton, révoquez-le et créez-en un autre.
Chaque jeton possède des portées. Un jeton sans portée configurée reçoit dns:read par défaut. La portée d’écriture autorise également la lecture.
| Portée | Autorisations |
|---|---|
dns:read |
Répertorier les zones et les enregistrements, et consulter un enregistrement précis. |
dns:write |
Lire, créer, modifier et supprimer des enregistrements DNS et des revendications de zone. |
* |
Toutes les portées. À utiliser uniquement si cela est réellement nécessaire. |
En cas de portée incompatible, l’API renvoie 403 forbidden_scope et inclut required_scopes ainsi que token_scopes pour faciliter le diagnostic.
Isolation entre utilisateurs
Un jeton Bearer correspond à un seul user_id. Chaque gestionnaire de zone vérifie la revendication validée de cet utilisateur avant toute lecture ou écriture. Il n’existe ni dérogation administrateur, ni mécanisme d’usurpation, ni contournement entre utilisateurs.
Même un jeton doté de * ne peut agir que sur les zones vérifiées de son propre utilisateur. Toute tentative d’utiliser la zone d’un autre compte renvoie 403 forbidden_zone.
Enveloppe de réponse
Réponse réussie
{
"success": true,
"data": { "zones": [] },
"request_id": "req_abc123def456abcd"
}
Réponse d’erreur
{
"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 figure dans chaque réponse et peut être enregistré sans risque dans les journaux côté client.
Codes d’erreur
| HTTP | Code d’erreur | Signification |
|---|---|---|
| 400 | bad_request |
Un champ obligatoire manque, le corps est mal formé ou une valeur saisie n’est pas valide. |
| 401 | unauthorized |
Le jeton Bearer est absent, non valide ou révoqué. |
| 403 | forbidden_scope |
Le jeton ne possède pas la portée requise. |
| 403 | forbidden_zone |
La zone n’est pas vérifiée pour ce compte, ou elle n’existe pas. |
| 404 | not_found |
La zone, l’enregistrement ou l’utilisateur demandé est introuvable. |
| 405 | method_not_allowed |
Ce point de terminaison ne prend pas en charge cette méthode HTTP. |
| 502 | upstream_error |
Le fournisseur DNS a renvoyé une erreur. |
Vérification des zones
Lorsque POST /v1/dns/zones revendique une zone, le serveur choisit l’une des méthodes suivantes :
-
Vérification instantanée (
method: "auto") — Utilisée si aucun autre compte n’a revendiqué la zone. La revendication est immédiatement vérifiée. Les enregistrements ne font autorité qu’après que le propriétaire a dirigé la délégation NS du bureau d’enregistrement vers les serveurs de noms renvoyés. -
Vérification TXT — Utilisée pour une revendication contestée. Ajoutez la valeur TXT renvoyée à
_cnfdns-verify.<zone>, puis appelezPOST /v1/dns/zones/{zone}/verify. -
Ancienne vérification NS — Les anciennes revendications en attente peuvent utiliser
verify_method: "ns". La vérification compare les réponses NS publiques de la zone avec le jeu de serveurs de noms attendu.
in-addr.arpa et ip6.arpa. Revendiquez la zone, obtenez expected_ns, puis transmettez ces cibles de délégation au registre concerné.La vérification est idempotente. La répéter pour une revendication déjà vérifiée renvoie verified: true sans modifier la revendication.
Types d’enregistrements et limites
Types d’enregistrements pris en charge
A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, SPF.
priority est obligatoire pour MX et SRV, et ignoré pour les autres types. ttl doit être compris entre 60 et 2 592 000 secondes.
Points de terminaison
Services publics
De petits points d’accès fiables et sans compte : heure, adresse, pays, taux de change et empreintes.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/public/time |
Public | L’heure UTC actuelle au format ISO 8601, RFC 2822 et Unix. |
| GET | /v1/public/timestamp |
Public | L’horodatage Unix actuel, en secondes et en millisecondes. |
| GET | /v1/public/ip |
Public | L’adresse d’où provient cette requête. |
| GET | /v1/public/geo |
Public | Le pays d’où provient cette requête, tel que déterminé en périphérie. |
| GET | /v1/public/fx |
Public | Taux de change pour une devise de base, actualisés toutes les heures. |
| GET | /v1/public/hash |
Public | Calculer l’empreinte d’une chaîne avec SHA-256 ou un autre algorithme pris en charge. |
Compte
À qui appartient un jeton et ce qu’il permet de faire.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/account/me |
N’importe quel jeton | Le compte du jeton, ses portées et les points d’accès qu’elles ouvrent. |
| GET | /v1/account/sessions |
account:read |
Toutes les sessions de navigateur actuellement connectées à ce compte. |
| POST | /v1/account/sessions/revoke |
account:write |
Déconnecter une session. |
| POST | /v1/account/sessions/revoke-all |
account:write |
Déconnecter toutes les sessions. |
| POST | /v1/account/profile |
account:write |
Changer votre nom affiché. |
DNS
Revendiquez un domaine, prouvez que vous le contrôlez, puis gérez ses enregistrements.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/dns/zones |
dns:read |
Toutes les zones revendiquées par ce compte. |
| POST | /v1/dns/zones |
dns:write |
Revendiquer une zone. Sans conflit, c’est immédiat ; sinon, un défi TXT est émis. |
| GET | /v1/dns/zones/{zone} |
dns:read |
Une zone, avec ses instructions de vérification si elle est encore en attente. |
| POST | /v1/dns/zones/{zone}/verify |
dns:write |
Lancer la vérification et marquer la zone comme vérifiée si elle correspond. |
| DELETE | /v1/dns/zones/{zone} |
dns:write |
Abandonner une revendication. Les enregistrements ne sont pas touchés. |
| GET | /v1/dns/zones/{zone}/records |
dns:read |
Tous les enregistrements d’une zone vérifiée. |
| POST | /v1/dns/zones/{zone}/records |
dns:write |
Ajouter un enregistrement à une zone vérifiée. |
| GET | /v1/dns/zones/{zone}/records/{id} |
dns:read |
Un enregistrement précis. |
| PATCH | /v1/dns/zones/{zone}/records/{id} |
dns:write |
Modifier une partie d’un enregistrement ; ce que vous omettez garde sa valeur. |
| DELETE | /v1/dns/zones/{zone}/records/{id} |
dns:write |
Supprimer un enregistrement. |
Identifiants
Le coffre d’identifiants privé derrière l’outil du même nom.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/cred |
cred:read cred:write |
Identifiants enregistrés, filtrables par plateforme. |
| POST | /v1/cred |
cred:write |
Enregistrer un identifiant. |
Fichiers
Stockage personnel : lister, envoyer, modifier, partager et supprimer.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/files |
files:read files:write |
Vos fichiers, les plus récents d’abord. |
| GET | /v1/files/{id} |
files:read files:write |
Un fichier, avec son lien de partage s’il en a un. |
| GET | /v1/files/download |
files:read files:write |
Télécharger un fichier. |
| POST | /v1/files/upload |
files:write |
Envoyer un fichier. |
| POST | /v1/files/update |
files:write |
Modifier les informations d’un fichier, y compris son partage. |
| POST | /v1/files/rename |
files:write |
Changer le nom sous lequel un fichier est téléchargé. |
| POST | /v1/files/delete |
files:write |
Supprimer un fichier et son contenu. |
| POST | /v1/files/upload-chunk |
files:write |
Envoyer une partie d’un envoi volumineux. |
| POST | /v1/files/upload-finalize |
files:write |
Assembler les parties en un fichier. |
CDN
Mise en cache en périphérie et trafic de vos fichiers partagés.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/cdn/stats |
cdn:read |
Réglages de cache et nombre de requêtes pour vos fichiers partagés. |
| POST | /v1/cdn/config |
cdn:write |
Définir la durée de conservation en périphérie, ou cesser de servir le fichier. |
| POST | /v1/cdn/purge |
cdn:write |
Retirer immédiatement un fichier du cache de périphérie. |
Transfert de SMS
Les messages relayés depuis votre téléphone, et les clés qui l’autorisent.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/sms/messages |
sms:read |
Messages transférés vers votre compte. |
| GET | /v1/sms/keys |
sms:read sms:write |
Les clés de transfert utilisées par vos appareils. |
| POST | /v1/sms/keys |
sms:write |
Émettre une clé de transfert. Cinq au maximum. |
| DELETE | /v1/sms/keys |
sms:write |
Révoquer une clé de transfert. |
Sites statiques
Envoyez un zip, servez un site.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/sites |
sites:read sites:write |
Vos sites statiques, du plus récemment déployé au plus ancien. |
| POST | /v1/sites/deploy |
sites:write |
Déployer un zip comme site. |
| POST | /v1/sites/delete |
sites:write |
Supprimer un site et ses fichiers. |
Déploiements
Vos points d’accès formulaire, webhook et lien court déployés.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/deployments |
deploy:read deploy:write |
Vos déploiements et leur nombre d’utilisations. |
| POST | /v1/deployments/toggle |
deploy:write |
Activer ou désactiver un déploiement. |
| POST | /v1/deployments/delete |
deploy:write |
Supprimer un déploiement. |
Domaines
Votre portefeuille de domaines et ses données d’enregistrement.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/domains |
domain:read domain:write |
Vos domaines, les plus proches de l’expiration d’abord. |
| POST | /v1/domains/whois-sync |
domain:write |
Actualiser un domaine depuis sa fiche de registre. |
Paquets
Publiez des versions et consultez leurs versions et totaux de téléchargement.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/packages |
packages:read packages:write |
Vos paquets, avec le nombre de versions et le total des téléchargements. |
| GET | /v1/packages/{slug} |
packages:read packages:write |
Un paquet, avec toutes ses versions et tous ses artefacts. |
| POST | /v1/packages/publish |
packages:write |
Publier une version, en créant le paquet s’il est nouveau. |
| POST | /v1/packages/update |
packages:write |
Modifier les informations d’un paquet. |
| POST | /v1/packages/delete |
packages:write |
Supprimer un paquet, toutes ses versions et tous ses artefacts. |
WHOIS
Données d’enregistrement d’un domaine, mises en cache et partagées avec les outils de domaines.
| Méthode | Chemin | Portée | Rôle |
|---|---|---|---|
| GET | /v1/whois |
whois:read |
Informations d’enregistrement d’un domaine. |
Pour les agents IA
Orientez un agent vers /v1/ai pour un résumé conçu pour être collé tel quel dans une invite, ou vers /v1/ai?format=json pour les mêmes points d’accès sous forme de définitions d’outils. /v1/openapi.json est le contrat OpenAPI 3.1 complet et /llms.txt la carte destinée aux robots. Les quatre sont générés depuis la même table de routes que cette page : aucun ne peut décrire un point d’accès inexistant.
curl https://api.c.nf/v1/ai
curl https://api.c.nf/v1/ai?format=json
curl https://api.c.nf/v1/openapi.json
Champs de requête
Créer une revendication de zone
| Champ | Type | Obligation | Notes |
|---|---|---|---|
zone |
string |
Obligatoire | Zone apex, convertie en minuscules par le serveur. Les zones inversées sont acceptées. |
Créer un enregistrement DNS
| Champ | Type | Obligation | Notes |
|---|---|---|---|
type |
string |
Obligatoire | A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR ou SPF. |
host |
string |
Facultatif | Sous-domaine uniquement. Utilisez une chaîne vide ou @ pour l’apex. |
value |
string |
Obligatoire | Contenu de l’enregistrement, par exemple une adresse IP, un nom cible ou une valeur textuelle. |
ttl |
integer |
Facultatif | Entre 60 et 2 592 000 secondes. La valeur par défaut est 3 600. |
priority |
integer |
Facultatif | Obligatoire pour MX et SRV ; ignoré pour les autres types. |
Modifier un enregistrement DNS
| Champ | Type | Obligation | Notes |
|---|---|---|---|
host |
string |
Facultatif | Sous-domaine de remplacement. |
value |
string |
Facultatif | Ne peut pas être vide après fusion avec l’enregistrement actuel. |
ttl |
integer |
Facultatif | Entre 60 et 2 592 000 secondes. |
priority |
integer |
Facultatif | Utilisé uniquement pour MX et SRV. |
PATCH. Supprimez l’enregistrement et créez-en un autre pour changer son type.Exemples
Répertorier les zones
curl -H "Authorization: Bearer $CNF_TOKEN" \
https://api.c.nf/v1/dns/zonesRevendiquer une zone
curl -X POST https://api.c.nf/v1/dns/zones \
-H "Authorization: Bearer $CNF_TOKEN" \
-H "Content-Type: application/json" \
-d '{"zone":"example.com"}'Vérifier une zone
curl -X POST https://api.c.nf/v1/dns/zones/example.com/verify \
-H "Authorization: Bearer $CNF_TOKEN"Créer un enregistrement
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"}'Démarrage rapide
- Créez une clé d’API avec
dns:writedans Compte → Clés d’API, puis copiez-la lorsqu’elle s’affiche. - Stockez le jeton dans une variable d’environnement protégée sur votre machine.
- Appelez
GET /v1/account/mepour vérifier le jeton et ses portées. - Revendiquez une zone. La réponse indique si la vérification est instantanée, fondée sur TXT ou fondée sur l’ancienne méthode NS.
- Effectuez la preuve DNS renvoyée lorsqu’elle est requise, puis appelez le point de terminaison de vérification.
- Ne créez, consultez, modifiez ou supprimez des enregistrements qu’une fois la revendication vérifiée.
Journal des modifications
v1.1.0 — gestion des zones
- Ajout des revendications de zone par API, avec vérification instantanée ou par TXT.
- Ajout de l’état d’une zone et de points de terminaison de vérification idempotents.
- Ajout de la révocation d’une revendication sans suppression implicite des enregistrements.
- Ajout des filtres « vérifiées », « en attente » et « toutes » à la liste des zones.
v1.0.0 — version initiale
- Ajout de l’authentification par jeton Bearer et de l’isolation des zones entre utilisateurs.
- Ajout des portées de lecture et d’écriture.
- Ajout des points de terminaison de compte, de liste des zones et de gestion des enregistrements.
- Ajout d’une enveloppe de réponse cohérente comprenant un identifiant de requête.