Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Comprehensive Cloudflare platform skill covering Workers, D1, R2, KV, AI, Durable Objects, and security.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/snippets/api.md
1# Snippets API Reference23## Request Object45### HTTP Properties6```javascript7request.method // GET, POST, PUT, DELETE, etc.8request.url // Full URL string9request.headers // Headers object10request.body // ReadableStream (for POST/PUT)11request.cf // Cloudflare properties (see below)12```1314### URL Operations15```javascript16const url = new URL(request.url);17url.hostname // "example.com"18url.pathname // "/path/to/page"19url.search // "?query=value"20url.searchParams.get("q") // "value"21url.searchParams.set("q", "new")22url.searchParams.delete("q")23```2425### Header Operations26```javascript27// Read headers28request.headers.get("User-Agent")29request.headers.has("Authorization")30request.headers.getSetCookie() // Get all Set-Cookie headers3132// Modify headers (create new request)33const modifiedRequest = new Request(request);34modifiedRequest.headers.set("X-Custom", "value")35modifiedRequest.headers.delete("X-Remove")36```3738### Cloudflare Properties (`request.cf`)39Access Cloudflare-specific metadata about the request:4041```javascript42// Geolocation43request.cf.city // "San Francisco"44request.cf.continent // "NA"45request.cf.country // "US"46request.cf.region // "California" or "CA"47request.cf.regionCode // "CA"48request.cf.postalCode // "94102"49request.cf.latitude // "37.7749"50request.cf.longitude // "-122.4194"51request.cf.timezone // "America/Los_Angeles"52request.cf.metroCode // "807" (DMA code)5354// Network55request.cf.colo // "SFO" (airport code of datacenter)56request.cf.asn // 13335 (ASN number)57request.cf.asOrganization // "Cloudflare, Inc."5859// Bot Management (if enabled)60request.cf.botManagement.score // 1-99 (1=bot, 99=human)61request.cf.botManagement.verified_bot // true/false62request.cf.botManagement.static_resource // true/false6364// TLS/HTTP version65request.cf.tlsVersion // "TLSv1.3"66request.cf.tlsCipher // "AEAD-AES128-GCM-SHA256"67request.cf.httpProtocol // "HTTP/2"6869// Request metadata70request.cf.requestPriority // "weight=192;exclusive=0"71```7273**Use cases**: Geo-routing, bot detection, security decisions, analytics.7475## Response Object7677### Response Constructors78```javascript79// Plain text80new Response("Hello", { status: 200 })8182// JSON83Response.json({ key: "value" }, { status: 200 })8485// HTML86new Response("<h1>Hi</h1>", {87status: 200,88headers: { "Content-Type": "text/html" }89})9091// Redirect92Response.redirect("https://example.com", 301) // or 3029394// Stream (pass through)95new Response(response.body, response)96```9798### Response Headers99```javascript100// Create modified response101const newResponse = new Response(response.body, response);102103// Set/modify headers104newResponse.headers.set("X-Custom", "value")105newResponse.headers.append("Set-Cookie", "session=abc; Path=/")106newResponse.headers.delete("Server")107108// Common headers109newResponse.headers.set("Cache-Control", "public, max-age=3600")110newResponse.headers.set("Content-Type", "application/json")111```112113### Response Properties114```javascript115response.status // 200, 404, 500, etc.116response.statusText // "OK", "Not Found", etc.117response.headers // Headers object118response.body // ReadableStream119response.ok // true if status 200-299120response.redirected // true if redirected121```122123## REST API Operations124125### List Snippets126```bash127GET /zones/{zone_id}/snippets128```129130### Get Snippet131```bash132GET /zones/{zone_id}/snippets/{snippet_name}133```134135### Create/Update Snippet136```bash137PUT /zones/{zone_id}/snippets/{snippet_name}138Content-Type: multipart/form-data139141metadata={"main_module":"snippet.js"}142```143144### Delete Snippet145```bash146DELETE /zones/{zone_id}/snippets/{snippet_name}147```148149### List Snippet Rules150```bash151GET /zones/{zone_id}/rulesets/phases/http_request_snippets/entrypoint152```153154### Update Snippet Rules155```bash156PUT /zones/{zone_id}/snippets/snippet_rules157Content-Type: application/json158159{160"rules": [{161"description": "Apply snippet",162"enabled": true,163"expression": "http.host eq \"example.com\"",164"snippet_name": "my_snippet"165}]166}167```168169## Available APIs in Snippets170171### ✅ Supported172- `fetch()` - HTTP requests (2-5 subrequests per plan)173- `Request` / `Response` - Standard Web APIs174- `URL` / `URLSearchParams` - URL manipulation175- `Headers` - Header manipulation176- `TextEncoder` / `TextDecoder` - Text encoding177- `crypto.subtle` - Web Crypto API (hashing, signing)178- `crypto.randomUUID()` - UUID generation179180### ❌ Not Supported in Snippets181- `caches` API - Not available (use Workers)182- `KV`, `D1`, `R2` - Storage APIs (use Workers)183- `Durable Objects` - Stateful objects (use Workers)184- `WebSocket` - WebSocket upgrades (use Workers)185- `HTMLRewriter` - HTML parsing (use Workers)186- `import` statements - No module imports187- `addEventListener` - Use `export default { async fetch() {}` pattern188189## Snippet Structure190```javascript191export default {192async fetch(request) {193// Your logic here194const response = await fetch(request);195return response; // or modified response196}197}198```