Select a file from the repository tree to inspect its code.
docs/index.html
Copy Code
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel Cloudflare SDK v1.0.0 Documentation</title>
<meta name="description" content="Complete documentation and interactive API testing client for the laravel-cloudflare SDK package. Manage DNS, Zones, Workers, KV, D1, R2 and more.">
<meta name="author" content="Ghost Compiler">
<meta name="robots" content="index,follow">
<meta name="theme-color" content="#22c55e">
<meta name="application-name" content="Cloudflare SDK Documentation">
<!-- Google Fonts Connection -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Laravel Cloudflare SDK v1.0.0 Documentation",
"about": "Laravel SDK for Cloudflare API v4",
"author": {
"@type": "Organization",
"name": "Ghost Compiler"
},
"version": "1.0.0"
}
</script>
</head>
<body class="docs-page">
<header class="site-header docs-header">
<button id="mobileMenuBtn" class="mobile-menu-btn" aria-label="Toggle navigation">
<svg viewBox="0 0 24 24" width="20" height="20" stroke="currentColor" stroke-width="2.2" fill="none" stroke-linecap="round" stroke-linejoin="round">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</button>
<a class="brand" href="#overview">
<img src="https://res.cloudinary.com/djgvfl1tv/image/upload/v1780666791/logo_mqnqn4.png" alt="Ghost Compiler logo">
<span>Cloudflare</span>
</a>
<span class="version-pill">v1.0.0</span>
<div class="doc-search">
<input id="docSearch" type="search" placeholder="Search documentation">
</div>
<nav class="top-links">
<a href="#overview">Overview</a>
<a href="#installation">Install</a>
<a href="#zones">Zones</a>
<!-- Segmented Theme Switcher Control -->
<div class="theme-segmented-control" role="radiogroup" aria-label="Theme switcher">
<button class="theme-control-btn" data-theme-val="light" aria-label="Light Mode" title="Light Mode">
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>
</button>
<button class="theme-control-btn" data-theme-val="dark" aria-label="Dark Mode" title="Dark Mode">
<svg viewBox="0 0 24 24"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>
</button>
<button class="theme-control-btn" data-theme-val="system" aria-label="System Mode" title="System Mode">
<svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line></svg>
</button>
</div>
</nav>
</header>
<!-- Overlay for mobile navigation drawer -->
<div class="sidebar-backdrop" id="sidebarBackdrop"></div>
<div class="docs-layout">
<aside class="docs-sidebar" id="docsSidebar" aria-label="Documentation navigation">
<div class="sidebar-header-mobile">
<span>Navigation</span>
<button id="closeSidebarBtn" class="close-sidebar-btn" aria-label="Close navigation">
<svg viewBox="0 0 24 24" width="18" height="18" stroke="currentColor" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round">
<line x1="18" y1="6" x2="6" y2="18"></line>
<line x1="6" y1="6" x2="18" y2="18"></line>
</svg>
</button>
</div>
<!-- Token Configuration Persistent Widget -->
<div class="token-config-box">
<div class="token-config-title">API Authentication</div>
<div class="token-input-row">
<input type="password" id="apiTokenInput" class="input-field" placeholder="Enter API Bearer Token...">
<button type="button" class="run-btn" id="saveTokenBtn" style="height: 38px; align-self: auto; border-radius: 8px;">Save</button>
</div>
<div class="token-helper-text">
<a href="https://dash.cloudflare.com/profile/api-tokens" target="_blank" rel="noopener">Generate Token in Dash ↗</a>
</div>
<div class="limits-mini-grid">
<div class="limit-cell"><span>Limit</span><strong id="globalLimitVal">-</strong></div>
<div class="limit-cell"><span>Rem.</span><strong id="globalRemainingVal">-</strong></div>
<div class="limit-cell"><span>Reset</span><strong id="globalResetVal">-</strong></div>
</div>
</div>
<div class="sidebar-group">
<p>Start</p>
<a href="#overview">Overview</a>
<a href="#installation">Installation</a>
<a href="#configuration">Configuration</a>
</div>
<div class="sidebar-group">
<p>Resources</p>
<a href="#accounts">Accounts</a>
<a href="#zones">Zones</a>
<a href="#zone-settings">Zone Settings</a>
<a href="#dns">DNS Records</a>
<a href="#ssl-certificates">SSL Certificates</a>
<a href="#certificate-packs">Certificate Packs</a>
<a href="#custom-hostnames">Custom Hostnames</a>
<a href="#firewall-rules">Firewall Rules</a>
<a href="#rulesets">Rulesets</a>
<a href="#page-rules">Page Rules</a>
<a href="#cache">Cache Purge</a>
<a href="#load-balancers">Load Balancers</a>
<a href="#load-balancer-pools">LB Pools</a>
<a href="#load-balancer-monitors">LB Monitors</a>
<a href="#workers">Workers</a>
<a href="#worker-routes">Worker Routes</a>
<a href="#kv">KV Storage</a>
<a href="#r2">R2 Storage</a>
<a href="#d1">D1 Databases</a>
<a href="#pages">Pages Projects</a>
<a href="#images">Images</a>
<a href="#stream">Stream Video</a>
<a href="#email-routing">Email Routing</a>
<a href="#access">Access Apps</a>
<a href="#tunnels">Tunnels</a>
<a href="#turnstile">Turnstile</a>
<a href="#healthchecks">Healthchecks</a>
<a href="#waiting-rooms">Waiting Rooms</a>
<a href="#logpush">Logpush Jobs</a>
<a href="#user">User Profile</a>
</div>
</aside>
<main class="doc-article">
<section id="overview" data-title="Overview">
<p class="eyebrow">Documentation v1.0.0</p>
<h1>Overview</h1>
<p class="lead">The Laravel Cloudflare SDK provides a premium client interface for managing domain zones, DNS settings, Worker scripts, KV stores, D1 Databases, and R2 buckets. Compatible with PHP 8.2 through 8.5, and Laravel 11 through 13.</p>
<div class="callout">
<strong>Fully Type-Safe DTOs.</strong>
Every response matches structured class mappings with static `fromArray()` hydrators, allowing autocomplete and IDE indexing.
</div>
</section>
<section id="installation" data-title="Installation">
<h2>Installation</h2>
<p>Install the package through Composer:</p>
<pre><code>composer require ghostcompiler/laravel-cloudflare</code></pre>
<p>Publish the configuration assets:</p>
<pre><code>php artisan vendor:publish --provider="Vendor\Cloudflare\Providers\CloudflareServiceProvider" --tag="config"</code></pre>
</section>
<section id="configuration" data-title="Configuration">
<h2>Configuration</h2>
<p>The configuration file is published at <code>config/cloudflare.php</code>. You can generate your API Token from the <a href="https://dash.cloudflare.com/profile/api-tokens" target="_blank" rel="noopener">Cloudflare Dashboard</a>.</p>
<pre><code>return [
'token' => env('CLOUDFLARE_TOKEN'),
'email' => env('CLOUDFLARE_EMAIL'),
'api_key' => env('CLOUDFLARE_API_KEY'),
'base_url' => env('CLOUDFLARE_BASE_URL', 'https://api.cloudflare.com/client/v4'),
'timeout' => (int) env('CLOUDFLARE_TIMEOUT', 30),
'retries' => (int) env('CLOUDFLARE_RETRIES', 3),
];</code></pre>
</section>
<section id="accounts" data-title="Accounts">
<h2>Accounts</h2>
<p>List and manage Cloudflare account profiles, member roles, and permissions.</p>
<pre><code>// List accounts
$accounts = Cloudflare::accounts()->all();
// Find account by ID
$account = Cloudflare::accounts()->find('account_id');</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts">
<div class="tester-title">Test API: Accounts</div>
<div class="tester-form">
<button type="button" class="run-btn">Run GET /accounts</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="zones" data-title="Zones">
<h2>Zones</h2>
<p>Manage domain zones, trigger activation checks, and control caching configurations.</p>
<pre><code>// List zones
$zones = Cloudflare::zones()->all();
// Create new zone
$zone = Cloudflare::zones()->create([
'name' => 'example.com',
'account' => ['id' => 'account_id']
]);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones">
<div class="tester-title">Test API: Zones</div>
<div class="tester-form">
<button type="button" class="run-btn">Run GET /zones</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="zone-settings" data-title="Zone Settings">
<h2>Zone Settings</h2>
<p>Manage advanced settings of a zone like SSL mode, security level, and minification.</p>
<pre><code>// Get all settings for a zone
$settings = Cloudflare::zoneSettings()->all($zoneId);
// Update specific setting
Cloudflare::zoneSettings()->update($zoneId, 'security_level', ['value' => 'high']);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/settings">
<div class="tester-title">Test API: Zone Settings</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/settings</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="dns" data-title="DNS Records">
<h2>DNS Records</h2>
<p>Provision and manage A, AAAA, CNAME, MX, and TXT records within a zone.</p>
<pre><code>// List DNS records
$records = Cloudflare::dns()->all($zoneId);
// Create DNS Record
$record = Cloudflare::dns()->create($zoneId, [
'type' => 'A',
'name' => 'www',
'content' => '1.2.3.4',
'proxied' => true
]);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/dns_records">
<div class="tester-title">Test API: DNS Records</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/dns_records</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="ssl-certificates" data-title="SSL Certificates">
<h2>SSL Certificates</h2>
<p>Upload and manage custom SSL certificates for custom domains.</p>
<pre><code>// List custom certificates
$certs = Cloudflare::sslCertificates()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/custom_certificates">
<div class="tester-title">Test API: SSL Certificates</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/custom_certificates</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="certificate-packs" data-title="Certificate Packs">
<h2>Certificate Packs</h2>
<p>Manage advanced SSL/TLS certificate packs ordered for the zone.</p>
<pre><code>// List certificate packs
$packs = Cloudflare::certificatePacks()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/ssl/certificate_packs">
<div class="tester-title">Test API: Certificate Packs</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/ssl/certificate_packs</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="custom-hostnames" data-title="Custom Hostnames">
<h2>Custom Hostnames</h2>
<p>Configure custom hostnames (SaaS applications) under your zone.</p>
<pre><code>// List custom hostnames
$hostnames = Cloudflare::customHostnames()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/custom_hostnames">
<div class="tester-title">Test API: Custom Hostnames</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/custom_hostnames</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="firewall-rules" data-title="Firewall Rules">
<h2>Firewall Rules</h2>
<p>Configure custom IP firewall, user-agent blocking, and security rules.</p>
<pre><code>// List firewall rules
$rules = Cloudflare::firewallRules()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/firewall/rules">
<div class="tester-title">Test API: Firewall Rules</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/firewall/rules</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="rulesets" data-title="Rulesets">
<h2>Rulesets</h2>
<p>Create and modify Rulesets for WAF (Web Application Firewall) at account or zone level.</p>
<pre><code>// List zone rulesets
$rulesets = Cloudflare::rulesets()->all($zoneId, false);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/rulesets">
<div class="tester-title">Test API: Rulesets</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/rulesets</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="page-rules" data-title="Page Rules">
<h2>Page Rules</h2>
<p>Set caching behaviors, URL forwarding, and custom headers based on URL patterns.</p>
<pre><code>// List page rules
$rules = Cloudflare::pageRules()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/pagerules">
<div class="tester-title">Test API: Page Rules</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/pagerules</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="cache" data-title="Cache Purge">
<h2>Cache Purge</h2>
<p>Purge files, tags, hosts, or prefixes from Cloudflare edge caches.</p>
<pre><code>// Purge everything
Cloudflare::cache()->purgeAll($zoneId);
// Purge specific files
Cloudflare::cache()->purgeFiles($zoneId, ['https://example.com/main.css']);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="POST" data-path="/zones/{zone_id}/purge_cache">
<div class="tester-title">Test API: Cache Purge</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run POST /zones/{zone_id}/purge_cache</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="load-balancers" data-title="Load Balancers">
<h2>Load Balancers</h2>
<p>Deploy custom HTTP load balancers under your zone.</p>
<pre><code>// List load balancers
$lbs = Cloudflare::loadBalancers()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/load_balancers">
<div class="tester-title">Test API: Load Balancers</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/load_balancers</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="load-balancer-pools" data-title="Load Balancer Pools">
<h2>Load Balancer Pools</h2>
<p>Configure origin server pools for your global load balancers.</p>
<pre><code>// List LB Pools
$pools = Cloudflare::loadBalancerPools()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/load_balancers/pools">
<div class="tester-title">Test API: Load Balancer Pools</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/load_balancers/pools</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="load-balancer-monitors" data-title="Load Balancer Monitors">
<h2>Load Balancer Monitors</h2>
<p>Configure active health monitors checking origin server availability.</p>
<pre><code>// List LB Monitors
$monitors = Cloudflare::loadBalancerMonitors()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/load_balancers/monitors">
<div class="tester-title">Test API: Load Balancer Monitors</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/load_balancers/monitors</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="workers" data-title="Workers">
<h2>Workers</h2>
<p>Deploy serverless JavaScript/TypeScript Worker scripts onto Cloudflare edge servers.</p>
<pre><code>// List Worker scripts
$scripts = Cloudflare::workers()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/workers/scripts">
<div class="tester-title">Test API: Workers</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/workers/scripts</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="worker-routes" data-title="Worker Routes">
<h2>Worker Routes</h2>
<p>Map custom URL patterns to Worker script execution namespaces.</p>
<pre><code>// List Worker routes
$routes = Cloudflare::workerRoutes()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/workers/routes">
<div class="tester-title">Test API: Worker Routes</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/workers/routes</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="kv" data-title="KV Storage">
<h2>KV Storage</h2>
<p>Read, write, and list low-latency key-value pairs globally.</p>
<pre><code>// Write value
Cloudflare::kv()->putValue($accountId, $namespaceId, 'key', 'value');
// Read value
$value = Cloudflare::kv()->getValue($accountId, $namespaceId, 'key');</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/storage/kv/namespaces">
<div class="tester-title">Test API: KV Storage</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/storage/kv/namespaces</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="r2" data-title="R2 Storage">
<h2>R2 Storage</h2>
<p>Zero egress-fee object storage bucket provisioning and management.</p>
<pre><code>// List buckets
$buckets = Cloudflare::r2()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/r2/buckets">
<div class="tester-title">Test API: R2 Storage</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/r2/buckets</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="d1" data-title="D1 Databases">
<h2>D1 Databases</h2>
<p>Serverless SQL databases at the edge built on SQLite.</p>
<pre><code>// Run SQL query
$result = Cloudflare::d1()->query($accountId, $databaseId, 'SELECT * FROM users');</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/d1/database">
<div class="tester-title">Test API: D1 Databases</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/d1/database</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="pages" data-title="Pages Projects">
<h2>Pages Projects</h2>
<p>Create and deploy Jamstack web sites and fullstack applications.</p>
<pre><code>// List Pages projects
$projects = Cloudflare::pages()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/pages/projects">
<div class="tester-title">Test API: Pages Projects</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/pages/projects</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="images" data-title="Cloudflare Images">
<h2>Cloudflare Images</h2>
<p>Upload, crop, resize, and deliver high-performance images.</p>
<pre><code>// List images
$images = Cloudflare::images()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/images/v1">
<div class="tester-title">Test API: Cloudflare Images</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/images/v1</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="stream" data-title="Cloudflare Stream">
<h2>Cloudflare Stream</h2>
<p>Upload, encode, storage, and deliver video content at scale.</p>
<pre><code>// List stream videos
$videos = Cloudflare::stream()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/stream">
<div class="tester-title">Test API: Cloudflare Stream</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/stream</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="email-routing" data-title="Email Routing">
<h2>Email Routing</h2>
<p>Configure catch-all routing rules and forwarding destinations for domain emails.</p>
<pre><code>// Get settings
$settings = Cloudflare::emailRouting()->getSettings($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/email/routing">
<div class="tester-title">Test API: Email Routing</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/email/routing</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="access" data-title="Access Applications">
<h2>Access Applications</h2>
<p>Secure internal applications using Cloudflare Access policy constraints.</p>
<pre><code>// List Access apps
$apps = Cloudflare::access()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/access/apps">
<div class="tester-title">Test API: Access Applications</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/access/apps</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="tunnels" data-title="Cloudflare Tunnels">
<h2>Cloudflare Tunnels</h2>
<p>Connect local web server origins securely without public IP openings.</p>
<pre><code>// List tunnels
$tunnels = Cloudflare::tunnels()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/cfd_tunnel">
<div class="tester-title">Test API: Cloudflare Tunnels</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/cfd_tunnel</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="turnstile" data-title="Turnstile widgets">
<h2>Turnstile widgets</h2>
<p>Zero-friction user CAPTCHA challenge replacement widgets.</p>
<pre><code>// List Turnstile widgets
$widgets = Cloudflare::turnstile()->all($accountId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/accounts/{account_id}/challenges/widgets">
<div class="tester-title">Test API: Turnstile widgets</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Account ID</label>
<input type="text" class="input-field param-input" data-param-name="account_id" placeholder="Enter Account ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /accounts/{account_id}/challenges/widgets</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="healthchecks" data-title="Healthchecks">
<h2>Healthchecks</h2>
<p>Set up health monitoring checks for domain origin paths.</p>
<pre><code>// List healthchecks
$checks = Cloudflare::healthchecks()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/healthchecks">
<div class="tester-title">Test API: Healthchecks</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/healthchecks</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="waiting-rooms" data-title="Waiting Rooms">
<h2>Waiting Rooms</h2>
<p>Deploy custom virtual queues to manage high-traffic spikes under your zone.</p>
<pre><code>// List waiting rooms
$rooms = Cloudflare::waitingRooms()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/waiting_rooms">
<div class="tester-title">Test API: Waiting Rooms</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/waiting_rooms</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="logpush" data-title="Logpush Jobs">
<h2>Logpush Jobs</h2>
<p>Configure automated high-speed log output exporting to S3, Datadog, or storage buckets.</p>
<pre><code>// List logpush jobs
$jobs = Cloudflare::logpush()->all($zoneId);</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/zones/{zone_id}/logpush/jobs">
<div class="tester-title">Test API: Logpush Jobs</div>
<div class="tester-form">
<div class="tester-fields">
<div class="form-group">
<label>Zone ID</label>
<input type="text" class="input-field param-input" data-param-name="zone_id" placeholder="Enter Zone ID..." required>
</div>
</div>
<button type="button" class="run-btn">Run GET /zones/{zone_id}/logpush/jobs</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
<section id="user" data-title="User Profile">
<h2>User Profile</h2>
<p>Manage current Cloudflare user profile settings and API tokens.</p>
<pre><code>// Get user profile
$user = Cloudflare::user()->get();</code></pre>
<!-- API Tester -->
<div class="tester-box" data-method="GET" data-path="/user">
<div class="tester-title">Test API: User Profile</div>
<div class="tester-form">
<button type="button" class="run-btn">Run GET /user</button>
</div>
<div class="tester-response" style="display:none;">
<div class="response-meta">
<span class="status-badge"><span class="status-dot"></span><span class="status-label"></span></span>
<span class="response-latency"></span>
<button type="button" class="copy-response-btn">Copy</button>
</div>
<pre class="response-body-pre"><code class="response-code"></code></pre>
</div>
</div>
</section>
</main>
<aside class="on-this-page" aria-label="On this page navigation">
<p>On This Page</p>
<div id="toc"></div>
</aside>
</div>
<script src="app.js"></script>
</body>
</html>