cloudflare-api

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Cloudflare API

Cloudflare API

Hit the Cloudflare REST API directly when wrangler CLI or MCP servers aren't the right tool. For bulk operations, fleet-wide changes, and features that wrangler doesn't expose.
当wrangler CLI或MCP服务器不是合适工具时,直接调用Cloudflare REST API。适用于批量操作、全集群变更以及wrangler未暴露的功能。

When to Use This Instead of Wrangler or MCP

何时使用本技能而非Wrangler或MCP

Use caseWranglerMCPThis skill
Deploy a WorkerYesYesNo
Create a D1 databaseYesYesNo
Bulk update 50 DNS recordsSlow (one at a time)Slow (one tool call each)Yes — batch script
Custom hostnames for white-labelNoPartialYes
Email routing rulesNoPartialYes
WAF/firewall rulesNoYes but verboseYes — direct API
Redirect rules in bulkNoOne at a timeYes — batch script
Zone settings across 20 zonesNo20 separate callsYes — fleet script
Cache purge by tag/prefixNoYesYes (when scripting)
Worker route managementLimitedYesYes (when bulk)
Analytics/logs queryNoPartialYes — GraphQL
D1 query/export across databasesOne DB at a timeOne DB at a timeYes — cross-DB scripts
R2 bulk object operationsNoOne at a timeYes — S3 API + batch
KV bulk read/write/deleteOne at a timeOne at a timeYes — bulk endpoints
Vectorize query/deleteNoVia Worker onlyYes — direct API
Queue message injectionNoVia Worker onlyYes — direct API
Audit all resources in accountNoTediousYes — inventory script
Rule of thumb: Single operations → MCP or wrangler. Bulk/fleet/scripted → API directly.
使用场景WranglerMCP本技能
部署Worker
创建D1数据库
批量更新50条DNS记录缓慢(逐条操作)缓慢(每次调用一个工具)是 — 批处理脚本
白标自定义主机名部分支持
邮件路由规则部分支持
WAF/防火墙规则支持但繁琐是 — 直接调用API
批量重定向规则逐条操作是 — 批处理脚本
20个Zone的配置设置20次单独调用是 — 全集群脚本
按标签/前缀清除缓存是(脚本化操作时)
Worker路由管理有限支持是(批量操作时)
分析/日志查询部分支持是 — GraphQL
跨数据库的D1查询/导出单库操作单库操作是 — 跨库脚本
R2批量对象操作逐条操作是 — S3 API + 批处理
KV批量读/写/删除逐条操作逐条操作是 — 批量端点
Vectorize查询/删除仅通过Worker支持是 — 直接调用API
队列消息注入仅通过Worker支持是 — 直接调用API
审计账户内所有资源繁琐是 — 清单脚本
经验法则:单次操作 → 使用MCP或wrangler。批量/全集群/脚本化操作 → 直接调用API。

Auth Setup

认证设置

API Token (recommended)

API令牌(推荐)

Create a scoped token at: Dashboard → My Profile → API Tokens → Create Token
bash
undefined
在以下位置创建带权限范围的令牌:控制台 → 我的资料 → API令牌 → 创建令牌
bash
undefined

Store it

存储令牌

export CLOUDFLARE_API_TOKEN="your-token-here"
export CLOUDFLARE_API_TOKEN="your-token-here"

Test it

测试令牌

curl -s "https://api.cloudflare.com/client/v4/user/tokens/verify"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.success'

**Token scopes**: Always use minimal permissions. Common presets:
- "Edit zone DNS" — for DNS operations
- "Edit zone settings" — for zone config changes
- "Edit Cloudflare Workers" — for Worker route management
- "Read analytics" — for GraphQL analytics
curl -s "https://api.cloudflare.com/client/v4/user/tokens/verify"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.success'

**令牌权限范围**:始终使用最小权限。常见预设:
- "Edit zone DNS" — 用于DNS操作
- "Edit zone settings" — 用于Zone配置变更
- "Edit Cloudflare Workers" — 用于Worker路由管理
- "Read analytics" — 用于GraphQL分析

Account and Zone IDs

账户与Zone ID

bash
undefined
bash
undefined

List your zones (find zone IDs)

列出所有Zone(查找Zone ID)

curl -s "https://api.cloudflare.com/client/v4/zones?per_page=50"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result[] | {name, id}'
curl -s "https://api.cloudflare.com/client/v4/zones?per_page=50"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result[] | {name, id}'

Get zone ID by domain name

通过域名获取Zone ID

ZONE_ID=$(curl -s "https://api.cloudflare.com/client/v4/zones?name=example.com"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result[0].id')

Store IDs in environment or a config file — don't hardcode them in scripts.
ZONE_ID=$(curl -s "https://api.cloudflare.com/client/v4/zones?name=example.com"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result[0].id')

将ID存储在环境变量或配置文件中 — 不要在脚本中硬编码。

Workflows

工作流

Bulk DNS Operations

批量DNS操作

Add/update many records at once (e.g. migrating a domain, setting up a new client):
bash
undefined
批量添加/更新记录(例如迁移域名、设置新客户端):
bash
undefined

Pattern: read records from a file, create in batch

模式:从文件读取记录,批量创建

while IFS=',' read -r type name content proxied; do curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d "{"type":"$type","name":"$name","content":"$content","proxied":$proxied,"ttl":1}"
| jq '{name: .result.name, id: .result.id, success: .success}' sleep 0.25 # Rate limit: 1200 req/5min done < dns-records.csv

**Export all records from a zone** (backup or migration):

```bash
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?per_page=100" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  | jq -r '.result[] | [.type, .name, .content, .proxied] | @csv' > dns-export.csv
Find and replace across records (e.g. IP migration):
bash
OLD_IP="203.0.113.1"
NEW_IP="198.51.100.1"
while IFS=',' read -r type name content proxied; do curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d "{"type":"$type","name":"$name","content":"$content","proxied":$proxied,"ttl":1}"
| jq '{name: .result.name, id: .result.id, success: .success}' sleep 0.25 # 速率限制:1200请求/5分钟 done < dns-records.csv

**导出Zone的所有记录**(备份或迁移):

```bash
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?per_page=100" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  | jq -r '.result[] | [.type, .name, .content, .proxied] | @csv' > dns-export.csv
查找并替换记录(例如IP迁移):
bash
OLD_IP="203.0.113.1"
NEW_IP="198.51.100.1"

Find records pointing to old IP

查找指向旧IP的记录

RECORDS=$(curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?content=$OLD_IP"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result[].id')
RECORDS=$(curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?content=$OLD_IP"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result[].id')

Update each one

更新每条记录

for RECORD_ID in $RECORDS; do curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d "{"content":"$NEW_IP"}" | jq '.success' done
undefined
for RECORD_ID in $RECORDS; do curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d "{"content":"$NEW_IP"}" | jq '.success' done
undefined

Custom Hostnames (White-Label Client Domains)

自定义主机名(白标客户端域名)

For SaaS apps where clients use their own domain (e.g.
app.clientdomain.com
→ your Worker):
bash
undefined
适用于SaaS应用中客户端使用自有域名的场景(例如
app.clientdomain.com
→ 你的Worker):
bash
undefined

Create custom hostname

创建自定义主机名

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "hostname": "app.clientdomain.com", "ssl": { "method": "http", "type": "dv", "settings": { "min_tls_version": "1.2" } } }' | jq '{id: .result.id, status: .result.status, ssl_status: .result.ssl.status}'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "hostname": "app.clientdomain.com", "ssl": { "method": "http", "type": "dv", "settings": { "min_tls_version": "1.2" } } }' | jq '{id: .result.id, status: .result.status, ssl_status: .result.ssl.status}'

List custom hostnames

列出自定义主机名

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames?per_page=50"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
| jq '.result[] | {hostname, status, ssl_status: .ssl.status}'
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames?per_page=50"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
| jq '.result[] | {hostname, status, ssl_status: .ssl.status}'

Check status (client needs to add CNAME)

检查状态(客户端需要添加CNAME)

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames/$HOSTNAME_ID"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result.status'

**Client setup**: They add a CNAME: `app.clientdomain.com → your-worker.your-domain.com`
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames/$HOSTNAME_ID"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result.status'

**客户端设置**:他们需要添加CNAME记录:`app.clientdomain.com → your-worker.your-domain.com`

Email Routing Rules

邮件路由规则

bash
undefined
bash
undefined

Enable email routing on zone

在Zone上启用邮件路由

curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/enable"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/enable"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

Create a routing rule (forward info@ to a real address)

创建路由规则(将info@转发到真实邮箱)

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/rules"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "Forward info@", "enabled": true, "matchers": [{"type": "literal", "field": "to", "value": "info@example.com"}], "actions": [{"type": "forward", "value": ["real-inbox@gmail.com"]}] }' | jq '.success'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/rules"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "Forward info@", "enabled": true, "matchers": [{"type": "literal", "field": "to", "value": "info@example.com"}], "actions": [{"type": "forward", "value": ["real-inbox@gmail.com"]}] }' | jq '.success'

Create catch-all rule

创建 catch-all 规则

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/rules"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "Catch-all", "enabled": true, "matchers": [{"type": "all"}], "actions": [{"type": "forward", "value": ["catchall@company.com"]}] }' | jq '.success'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/rules"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "name": "Catch-all", "enabled": true, "matchers": [{"type": "all"}], "actions": [{"type": "forward", "value": ["catchall@company.com"]}] }' | jq '.success'

List rules

列出规则

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/rules"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result[] | {name, enabled, matchers, actions}'
undefined
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/rules"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result[] | {name, enabled, matchers, actions}'
undefined

Cache Purge

缓存清除

bash
undefined
bash
undefined

Purge everything (nuclear option)

清除所有缓存(终极选项)

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"purge_everything": true}'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"purge_everything": true}'

Purge specific URLs

清除指定URL的缓存

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"files": ["https://example.com/styles.css", "https://example.com/app.js"]}'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"files": ["https://example.com/styles.css", "https://example.com/app.js"]}'

Purge by cache tag (requires Enterprise or cache tag headers)

按缓存标签清除(需要企业版或缓存标签头)

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"tags": ["product-123", "homepage"]}'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"tags": ["product-123", "homepage"]}'

Purge by prefix

按前缀清除

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"prefixes": ["https://example.com/images/"]}'
undefined
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"prefixes": ["https://example.com/images/"]}'
undefined

Redirect Rules (Bulk)

重定向规则(批量)

bash
undefined
bash
undefined

Create a redirect rule

创建重定向规则

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_dynamic_redirect/entrypoint"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "rules": [ { "expression": "(http.request.uri.path eq "/old-page")", "description": "Redirect old-page to new-page", "action": "redirect", "action_parameters": { "from_value": { "target_url": {"value": "https://example.com/new-page"}, "status_code": 301 } } } ] }'

**For bulk redirects** (301s from a CSV), generate the rules array programmatically:

```python
import json, csv

rules = []
with open('redirects.csv') as f:
    for row in csv.reader(f):
        old_path, new_url = row
        rules.append({
            "expression": f'(http.request.uri.path eq "{old_path}")',
            "description": f"Redirect {old_path}",
            "action": "redirect",
            "action_parameters": {
                "from_value": {
                    "target_url": {"value": new_url},
                    "status_code": 301
                }
            }
        })
print(json.dumps({"rules": rules}, indent=2))
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_dynamic_redirect/entrypoint"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "rules": [ { "expression": "(http.request.uri.path eq "/old-page")", "description": "Redirect old-page to new-page", "action": "redirect", "action_parameters": { "from_value": { "target_url": {"value": "https://example.com/new-page"}, "status_code": 301 } } } ] }'

**批量重定向**(从CSV文件生成301重定向):程序化生成规则数组:

```python
import json, csv

rules = []
with open('redirects.csv') as f:
    for row in csv.reader(f):
        old_path, new_url = row
        rules.append({
            "expression": f'(http.request.uri.path eq "{old_path}")',
            "description": f"Redirect {old_path}",
            "action": "redirect",
            "action_parameters": {
                "from_value": {
                    "target_url": {"value": new_url},
                    "status_code": 301
                }
            }
        })
print(json.dumps({"rules": rules}, indent=2))

Zone Settings (Fleet-Wide)

Zone设置(全集群)

Apply the same settings across multiple zones:
bash
undefined
在多个Zone上应用相同设置:
bash
undefined

Settings to apply

要应用的设置

SETTINGS='{"value":"full"}' # SSL mode: full (strict)
SETTINGS='{"value":"full"}' # SSL模式:full(严格)

Get all active zones

获取所有活跃Zone

ZONES=$(curl -s "https://api.cloudflare.com/client/v4/zones?status=active&per_page=50"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result[].id')
ZONES=$(curl -s "https://api.cloudflare.com/client/v4/zones?status=active&per_page=50"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result[].id')

Apply to each zone

应用到每个Zone

for ZONE in $ZONES; do curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE/settings/ssl"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d "$SETTINGS" | jq "{zone: .result.id, success: .success}" sleep 0.25 done

Common fleet settings:
- `ssl` — "full" or "strict"
- `min_tls_version` — "1.2"
- `always_use_https` — "on"
- `security_level` — "medium"
- `browser_cache_ttl` — 14400
for ZONE in $ZONES; do curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE/settings/ssl"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d "$SETTINGS" | jq "{zone: .result.id, success: .success}" sleep 0.25 done

常见全集群设置:
- `ssl` — "full" 或 "strict"
- `min_tls_version` — "1.2"
- `always_use_https` — "on"
- `security_level` — "medium"
- `browser_cache_ttl` — 14400

WAF / Firewall Rules

WAF / 防火墙规则

bash
undefined
bash
undefined

Create a WAF custom rule (block by country)

创建WAF自定义规则(按国家拦截)

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_custom/entrypoint"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "rules": [{ "expression": "(ip.geoip.country in {"RU" "CN"})", "action": "block", "description": "Block traffic from RU and CN" }] }'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_custom/entrypoint"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "rules": [{ "expression": "(ip.geoip.country in {"RU" "CN"})", "action": "block", "description": "Block traffic from RU and CN" }] }'

Rate limiting rule

速率限制规则

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_ratelimit/entrypoint"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "rules": [{ "expression": "(http.request.uri.path contains "/api/")", "action": "block", "ratelimit": { "characteristics": ["ip.src"], "period": 60, "requests_per_period": 100 }, "description": "Rate limit API to 100 req/min per IP" }] }'
undefined
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_ratelimit/entrypoint"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "rules": [{ "expression": "(http.request.uri.path contains "/api/")", "action": "block", "ratelimit": { "characteristics": ["ip.src"], "period": 60, "requests_per_period": 100 }, "description": "Rate limit API to 100 req/min per IP" }] }'
undefined

Worker Routes

Worker路由

bash
undefined
bash
undefined

List routes

列出路由

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result[] | {pattern, id}'
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq '.result[] | {pattern, id}'

Create route

创建路由

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"pattern": "api.example.com/*", "script": "my-worker"}'
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{"pattern": "api.example.com/*", "script": "my-worker"}'

Delete route

删除路由

curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes/$ROUTE_ID"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
undefined
curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes/$ROUTE_ID"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
undefined

Analytics (GraphQL)

分析(GraphQL)

bash
undefined
bash
undefined

Worker analytics (requests, errors, CPU time)

Worker分析(请求数、错误数、CPU时间)

curl -s -X POST "https://api.cloudflare.com/client/v4/graphql"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "query": "{ viewer { zones(filter: {zoneTag: "'$ZONE_ID'"}) { httpRequests1dGroups(limit: 7, filter: {date_gt: "2026-03-10"}) { dimensions { date } sum { requests pageViews } } } } }" }' | jq '.data.viewer.zones[0].httpRequests1dGroups'
undefined
curl -s -X POST "https://api.cloudflare.com/client/v4/graphql"
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
-H "Content-Type: application/json"
-d '{ "query": "{ viewer { zones(filter: {zoneTag: "'$ZONE_ID'"}) { httpRequests1dGroups(limit: 7, filter: {date_gt: "2026-03-10"}) { dimensions { date } sum { requests pageViews } } } } }" }' | jq '.data.viewer.zones[0].httpRequests1dGroups'
undefined

Rate Limits

速率限制

EndpointLimit
Most API calls1200 requests / 5 minutes
DNS record operations1200 / 5 min (shared with above)
Cache purge1000 purge calls / day
Zone creation5 per minute
In scripts: Add
sleep 0.25
between calls for sustained operations. Use
p-limit
or
xargs -P 4
for controlled parallelism.
端点限制
大多数API调用1200请求/5分钟
DNS记录操作1200/5分钟(与上述共享)
缓存清除1000次清除调用/天
Zone创建5次/分钟
脚本中注意事项:持续操作时在调用之间添加
sleep 0.25
。使用
p-limit
xargs -P 4
进行可控并行处理。

Script Generation

脚本生成

When the user describes what they need, generate a script in
.jez/scripts/
that:
  • Reads API token from environment (never hardcode)
  • Handles pagination for list operations
  • Includes error checking (
    jq '.success'
    after each call)
  • Adds rate limit sleep between calls
  • Logs what it does
  • Supports
    --dry-run
    where possible
Prefer
curl
+
jq
for simple operations. Use Python for complex logic (pagination loops, error handling, CSV processing). Use TypeScript with the
cloudflare
npm package for type safety in larger scripts.
当用户描述需求时,在
.jez/scripts/
目录下生成脚本,要求:
  • 从环境变量读取API令牌(绝不硬编码)
  • 处理列表操作的分页
  • 包含错误检查(每次调用后使用
    jq '.success'
  • 在调用之间添加速率限制等待
  • 记录操作内容
  • 尽可能支持
    --dry-run
    模式
简单操作优先使用
curl
+
jq
。复杂逻辑(分页循环、错误处理、CSV处理)使用Python。大型脚本使用带
cloudflare
npm包的TypeScript以保证类型安全。

API Reference

API参考

Base URL:
https://api.cloudflare.com/client/v4/
Full docs:
https://developers.cloudflare.com/api/
The API follows a consistent pattern:
  • GET /zones
    — list
  • POST /zones
    — create
  • GET /zones/:id
    — read
  • PATCH /zones/:id
    — update
  • DELETE /zones/:id
    — delete
  • PUT /zones/:id/settings/:name
    — update setting
Every response has
{ success: bool, errors: [], messages: [], result: {} }
.
基础URL:
https://api.cloudflare.com/client/v4/
完整文档:
https://developers.cloudflare.com/api/
API遵循一致的模式:
  • GET /zones
    — 列出
  • POST /zones
    — 创建
  • GET /zones/:id
    — 读取
  • PATCH /zones/:id
    — 更新
  • DELETE /zones/:id
    — 删除
  • PUT /zones/:id/settings/:name
    — 更新设置
每个响应格式:
{ success: bool, errors: [], messages: [], result: {} }

Reference Files

参考文件

WhenRead
D1, R2, KV, Workers, Vectorize, Queues API patternsreferences/developer-platform-api.md
场景阅读文档
D1、R2、KV、Workers、Vectorize、Queues API模式references/developer-platform-api.md