En bref
Les API de Cloudflare permettent de gérer DNS, zones, Workers, sécurité et analyses de façon automatisée. Utilisez les jetons API (recommandé) ou les clés globales pour l'authentification, ciblez api.cloudflare.com/client/v4, et gérez les limites de débit proprement. Pour tester vos intégrations, validez les modifications DNS, les déploiements Workers et automatisez la configuration sur différents environnements avec Apidog.
Essayez Apidog dès aujourd'hui
Introduction
Cloudflare protège et accélère des millions de sites web : DNS, CDN, protection DDoS, WAF, Workers sans serveur, etc. Pour les petites architectures, le dashboard suffit. À grande échelle, automatisez avec l’API.
Presque toutes les fonctions du dashboard sont exposées : création de zones, gestion DNS, déploiement de Workers, règles de page, SSL, analyses, etc.
Les usages typiques de l’API Cloudflare :
- Infrastructure as code (Terraform, Pulumi)
- Intégration dans les pipelines CI/CD
- Gestion multi-zones
- Mise à jour DNS automatisée
- Déploiement de Workers
💡 Astuce : Pour tester vos appels API Cloudflare, valider les réponses et documenter vos intégrations, Apidog permet d’enregistrer les configurations de zones sous forme de requêtes réutilisables et partageables avec votre équipe.
Testez les API Cloudflare avec Apidog - gratuit
À la fin de ce guide, vous serez capable de :
- Vous authentifier avec les jetons API Cloudflare
- Gérer zones et enregistrements DNS
- Déployer/gérer les Workers
- Configurer la sécurité
- Extraire analyses et logs
Authentification
Cloudflare propose deux méthodes d’authentification. Utilisez les jetons API, pas la clé globale.
Méthode 1 : Jetons API (recommandé)
Les jetons API sont limités à des permissions précises. En cas de fuite, l'impact reste limité.
Créer un jeton :
- Dashboard Cloudflare → Mon profil → Jetons API
- Créer un jeton
- Choisir un modèle (ex. : DNS, Workers) ou personnalisé
- Définir les zones (spécifiques ou toutes)
- Copier le jeton
Utiliser le jeton :
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Méthode 2 : Clé API globale (non recommandé)
La clé globale donne un accès complet au compte. À éviter.
curl -X GET "https://api.cloudflare.com/client/v4/user" \
-H "X-Auth-Email: your-email@example.com" \
-H "X-Auth-Key: YOUR_GLOBAL_API_KEY"
Format de réponse
Toutes les réponses Cloudflare :
{
"result": { ... },
"success": true,
"errors": [],
"messages": []
}
Vérifiez toujours success avant de traiter result.
Gestion des zones
Une zone représente un domaine dans Cloudflare.
Lister les zones
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Réponse :
{
"result": [
{
"id": "023e105f4ecef8ad9ca31a8372d0c353",
"name": "example.com",
"status": "active",
"paused": false,
"type": "full",
"development_mode": 0,
"name_servers": [
"ns1.cloudflare.com",
"ns2.cloudflare.com"
],
"original_name_servers": [
"ns1.example.com"
],
"original_registrar": null
}
],
"success": true
}
Créer une zone
curl -X POST "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "newdomain.com",
"account": {
"id": "ACCOUNT_ID"
},
"type": "full"
}'
Obtenir les détails d'une zone
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Gestion des enregistrements DNS
Gérez l’association des noms de domaine avec des IP/services.
Lister les enregistrements DNS
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Créer un enregistrement DNS
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "A",
"name": "www",
"content": "192.0.2.1",
"ttl": 3600,
"proxied": true
}'
Types d’enregistrements :
-
A– IPv4 -
AAAA– IPv6 -
CNAME– Alias -
MX– Mail -
TXT– Texte (SPF, DKIM…) -
NS– Serveur de noms
Mettre à jour un enregistrement DNS
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "A",
"name": "www",
"content": "192.0.2.2",
"ttl": 3600,
"proxied": true
}'
Supprimer un enregistrement DNS
curl -X DELETE "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Cloudflare Workers
Exécutez du JavaScript en edge, proche des utilisateurs.
Lister les Workers
curl -X GET "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/workers/scripts" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Uploader un Worker
curl -X PUT "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/workers/scripts/my-worker" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/javascript" \
--data-binary @worker.js
Exemple de Worker :
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url)
if (url.pathname === '/api/hello') {
return new Response(JSON.stringify({ message: 'Hello from the edge!' }), {
headers: { 'Content-Type': 'application/json' }
})
}
return fetch(request)
}
}
Lier une route
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/workers/routes" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"pattern": "example.com/api/*",
"script": "my-worker"
}'
Espace de noms KV Worker
Stockez des données accessibles depuis les Workers :
curl -X POST "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/storage/kv/namespaces" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "my-kv-namespace"
}'
Sécurité et WAF
Règles de page
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/pagerules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"targets": [
{
"target": "url",
"constraint": {
"operator": "matches",
"value": "example.com/*"
}
}
],
"actions": [
{
"id": "ssl",
"value": "flexible"
},
{
"id": "cache_level",
"value": "aggressive"
}
]
}'
Règles de pare-feu
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/firewall/rules" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"expression": "ip.geoip.country eq \"CN\"",
"paused": false
},
"action": "block",
"description": "Bloquer le trafic venant de Chine"
}'
Limitation de débit
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/rate_limits" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"disabled": false,
"description": "Limiter le débit des points d'accès API",
"match": {
"request": {
"methods": ["POST"],
"url_pattern": "*/api/*"
}
},
"threshold": 100,
"period": 60,
"action": {
"mode": "ban",
"timeout": 600
}
}'
Analyses et logs
Analyses de zone
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/analytics/dashboard?since=-1440&continuous=true" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Réponse :
{
"result": {
"totals": {
"requests": {
"all": 1000000,
"cached": 800000,
"uncached": 200000
},
"bandwidth": {
"all": 50000000000,
"cached": 40000000000
},
"threats": {
"all": 5000
},
"pageviews": {
"all": 250000
}
}
}
}
Logs de zone (Logpush)
Activez Logpush pour envoyer les logs vers votre stockage :
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/logpush/jobs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Mon travail Logpush",
"destination_conf": "s3://my-bucket/logs?region=us-east-1",
"dataset": "http_requests",
"logpull_options": "fields=ClientIP,ClientRequestPath,EdgeResponseStatus×tamps=rfc3339"
}'
Tester avec Apidog
Les modifications Cloudflare impactent la prod. Testez systématiquement.
1. Configuration de l'environnement
CLOUDFLARE_API_TOKEN: your_token
CLOUDFLARE_ACCOUNT_ID: abc123
ZONE_ID: xyz789
BASE_URL: https://api.cloudflare.com/client/v4
2. Valider les réponses
pm.test('La requête a réussi', () => {
const response = pm.response.json()
pm.expect(response.success).to.be.true
pm.expect(response.errors).to.be.empty
})
pm.test('Enregistrement DNS créé correctement', () => {
const response = pm.response.json()
pm.expect(response.result.type).to.eql('A')
pm.expect(response.result.name).to.eql('www')
pm.expect(response.result.proxied).to.be.true
})
3. Tester les déploiements de Workers
Enregistrez les scripts Worker comme fichiers dans Apidog et testez les uploads :
pm.test('Worker téléchargé', () => {
const response = pm.response.json()
pm.expect(response.result.id).to.eql('my-worker')
})
Testez les API Cloudflare avec Apidog – gratuit
Erreurs courantes et solutions
403 Interdit
Cause : Jeton sans permission requise.
Solution : Vérifiez les permissions du jeton. Par exemple, modifications DNS : Zone:DNS:Edit. Workers : Account:Workers:Edit.
1003 : Zone invalide ou manquante
Cause : L’ID de zone n’existe pas ou le jeton n’y a pas accès.
Solution : Vérifiez l’ID de zone, et la portée du jeton.
81057 : L’enregistrement existe déjà
Cause : Un enregistrement DNS identique existe déjà.
Solution : Utilisez PUT (update), ou supprimez d’abord l’enregistrement.
Limite de débit dépassée
Cause : Trop de requêtes (par défaut 1200/5min).
Solution : Mettez en place un backoff et batch.
async function updateRecords(records) {
for (const record of records) {
try {
await updateRecord(record)
await sleep(100) // Tampon limitation de débit
} catch (error) {
if (error.status === 429) {
await sleep(60000) // Attendre une minute
await updateRecord(record) // Réessayer
}
}
}
}
Alternatives et comparaisons
| Fonctionnalité | Cloudflare | AWS Route 53 | Fastly |
|---|---|---|---|
| API DNS | ✓ | ✓ | ✓ |
| API CDN | ✓ | API CloudFront | ✓ |
| Fonctions Edge | Workers | Lambda@Edge | Compute@Edge |
| API WAF | ✓ | AWS WAF | ✓ |
| Niveau gratuit | Généreux | Paiement à l'utilisation | Limité |
| Format de réponse | JSON | XML/JSON | JSON |
L’API Cloudflare est plus unifiée que les services AWS. Les Workers offrent plus de flexibilité que Lambda@Edge.
Cas d'utilisation concrets
SaaS multi-tenant. Une plateforme crée automatiquement des zones Cloudflare à chaque ajout de domaine client. Workers pour le routage, API DNS pour les enregistrements, certificats SSL provisionnés en API.
Déploiements bleu-vert. Mise à jour automatique des enregistrements DNS pour basculer le trafic entre environnements : propagation instantanée via Cloudflare.
Automatisation réponse DDoS. Surveillance du trafic via l’API d’analyse : les attaques déclenchent l’ajout de règles de pare-feu automatiquement, réduisant le temps de réponse.
En résumé
Ce que vous pouvez désormais faire :
- Authentification sécurisée par jetons API
- Gestion programmatique des zones et DNS
- Déploiement de Workers en edge
- Sécurité : firewall, limitation de débit
- Extraction d’analyses, logs
- Tests automatisés avec Apidog avant la mise en production
FAQ
Quelle est la différence entre une zone et un domaine ?
Une zone est la représentation d'un domaine chez Cloudflare. L’ajout d’un domaine crée une zone, identifiée par un ID utilisé dans l’API.
Comment trouver mon ID de zone ?
Dashboard Cloudflare → domaine → Aperçu → section API.
Puis-je utiliser l'API Cloudflare sans forfait payant ?
Oui, la plupart des fonctions sont incluses dans les forfaits gratuits. Les Workers ont un généreux niveau gratuit. Certaines options avancées (WAF avancé, Logpush) sont payantes.
Combien de temps pour propager une modification DNS ?
Immédiat côté Cloudflare ; propagation DNS globale dépend du TTL (généralement quelques minutes).
Quelle est la limite de débit ?
Par défaut : 1200 requêtes/5min/jeton. Vérifiez X-RateLimit-Remaining. Les clients Enterprise ont plus.
Gérer plusieurs comptes avec un seul jeton ?
Non : un jeton = un compte. Pour plusieurs comptes, créez plusieurs jetons ou utilisez un jeton utilisateur avec droits multi-comptes.
Différences Workers vs Lambda ?
Workers : s’exécutent en edge (300+ villes), min. de cold start, usage idéal manipulation requêtes/réponses, pas de traitements longs.
Purger le cache via API ?
Oui :
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"files": ["https://example.com/style.css"]
}'

Top comments (0)