Laravel Cloudflare

PHP MIT

Complete Laravel Cloudflare API SDK for managing DNS records, zones, cache, SSL, firewall rules, workers, analytics, and Cloudflare services with a fluent Laravel-first developer experience.

Stars
2
Forks
0
Downloads
N/A
Open Issues
0
Files main

Repository Files

Loading file structure...
docs/index.html
<!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()-&gt;all();

// Find account by ID
$account = Cloudflare::accounts()-&gt;find(&#039;account_id&#039;);</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()-&gt;all();

// Create new zone
$zone = Cloudflare::zones()-&gt;create([
    &#039;name&#039; =&gt; &#039;example.com&#039;,
    &#039;account&#039; =&gt; [&#039;id&#039; =&gt; &#039;account_id&#039;]
]);</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()-&gt;all($zoneId);

// Update specific setting
Cloudflare::zoneSettings()-&gt;update($zoneId, &#039;security_level&#039;, [&#039;value&#039; =&gt; &#039;high&#039;]);</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()-&gt;all($zoneId);

// Create DNS Record
$record = Cloudflare::dns()-&gt;create($zoneId, [
    &#039;type&#039; =&gt; &#039;A&#039;,
    &#039;name&#039; =&gt; &#039;www&#039;,
    &#039;content&#039; =&gt; &#039;1.2.3.4&#039;,
    &#039;proxied&#039; =&gt; 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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;purgeAll($zoneId);

// Purge specific files
Cloudflare::cache()-&gt;purgeFiles($zoneId, [&#039;https://example.com/main.css&#039;]);</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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;putValue($accountId, $namespaceId, &#039;key&#039;, &#039;value&#039;);

// Read value
$value = Cloudflare::kv()-&gt;getValue($accountId, $namespaceId, &#039;key&#039;);</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()-&gt;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()-&gt;query($accountId, $databaseId, &#039;SELECT * FROM users&#039;);</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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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()-&gt;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>