> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Cloudflare Integration for AI Agents & Workflows

> Cloudflare DNS, WAF, zones, firewall rules, and load balancer management.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/cloudflare.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=e87203d84311015fc2765466970f4bd6" alt="Cloudflare logo" width="72" height="72" data-path="logos/cloudflare.svg" />

## Overview

Add **Cloudflare** to any ModuleX agent or workflow. Cloudflare v4 API integration: DNS, WAF lists, zones, firewall rules, load balancer monitors & pools, account discovery. All against `api.cloudflare.com/client/v4`.

<Info>
  **Categories**: Developer Tools & Infrastructure · Security · Infrastructure · Networking · **Auth**: API Token · **Actions**: 13
</Info>

## Authentication

### API Token Authentication

Authenticate using your Cloudflare API Token (recommended)

#### Required Credentials

| Field                | Description                                  | Required | Format                                     |
| -------------------- | -------------------------------------------- | -------- | ------------------------------------------ |
| Cloudflare API Token | Your Cloudflare API Token for authentication | Yes      | `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |

## Available Actions

<AccordionGroup>
  <Accordion title="list_zones — List, search, sort, and filter your Cloudflare zones">
    ### Parameters

    <ResponseField name="name" type="string">
      Zone name filter
    </ResponseField>

    <ResponseField name="status" type="string">
      Zone status: active, pending, initializing, moved, deleted, deactivated
    </ResponseField>

    <ResponseField name="account_id" type="string">
      Account identifier filter
    </ResponseField>

    <ResponseField name="page" type="integer">
      Page number (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 50 for most endpoints) (Default: `20`)
    </ResponseField>

    <ResponseField name="order" type="string">
      Sort order: name, status, account.id, account.name
    </ResponseField>

    <ResponseField name="direction" type="string">
      Sort direction (asc/desc) (Default: `asc`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListZonesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_dns_record — Create a new DNS record within a specific zone">
    ### Parameters

    <ResponseField name="zone_id" type="string" required>
      Zone identifier
    </ResponseField>

    <ResponseField name="type" type="string" required>
      DNS record type (A, AAAA, CNAME, TXT, MX, NS, SRV, etc.)
    </ResponseField>

    <ResponseField name="name" type="string" required>
      DNS record name
    </ResponseField>

    <ResponseField name="content" type="string" required>
      DNS record content
    </ResponseField>

    <ResponseField name="ttl" type="integer">
      TTL (1 = automatic) (Default: `1`)
    </ResponseField>

    <ResponseField name="priority" type="integer">
      Priority for MX/SRV records
    </ResponseField>

    <ResponseField name="proxied" type="boolean">
      Proxy through Cloudflare (Default: `false`)
    </ResponseField>

    <ResponseField name="comment" type="string">
      DNS record comment
    </ResponseField>

    <ResponseField name="tags" type="array">
      DNS record tags
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateDNSRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_dns_record — Update an existing DNS record. Only provided fields are modified.">
    ### Parameters

    <ResponseField name="zone_id" type="string" required>
      Zone identifier
    </ResponseField>

    <ResponseField name="record_id" type="string" required>
      DNS record identifier
    </ResponseField>

    <ResponseField name="type" type="string">
      DNS record type
    </ResponseField>

    <ResponseField name="name" type="string">
      DNS record name
    </ResponseField>

    <ResponseField name="content" type="string">
      DNS record content
    </ResponseField>

    <ResponseField name="ttl" type="integer">
      TTL
    </ResponseField>

    <ResponseField name="priority" type="integer">
      Priority for MX/SRV records
    </ResponseField>

    <ResponseField name="proxied" type="boolean">
      Proxy through Cloudflare
    </ResponseField>

    <ResponseField name="comment" type="string">
      DNS record comment
    </ResponseField>

    <ResponseField name="tags" type="array">
      DNS record tags
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateDNSRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_dns_record — Delete a DNS record within a specific zone">
    ### Parameters

    <ResponseField name="zone_id" type="string" required>
      Zone identifier
    </ResponseField>

    <ResponseField name="record_id" type="string" required>
      DNS record identifier to delete
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteDNSRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_waf_lists — Fetch all WAF lists (no items) for an account">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListWAFListsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_waf_list — Create a new empty WAF list for the account">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    <ResponseField name="name" type="string" required>
      Name of the list
    </ResponseField>

    <ResponseField name="kind" type="string" required>
      List type: ip, redirect, hostname, asn
    </ResponseField>

    <ResponseField name="description" type="string">
      Description of the list
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateWAFListOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_waf_list — Update the description of a WAF list (cannot update items)">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    <ResponseField name="list_id" type="string" required>
      List identifier
    </ResponseField>

    <ResponseField name="description" type="string" required>
      New description for the list
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateWAFListOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_waf_list — Delete a WAF list">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    <ResponseField name="list_id" type="string" required>
      List identifier to delete
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteWAFListOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_accounts — List all accounts accessible to the user">
    ### Parameters

    <ResponseField name="page" type="integer">
      Page number (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 50 for most endpoints) (Default: `20`)
    </ResponseField>

    <ResponseField name="direction" type="string">
      Sort direction (asc/desc) (Default: `asc`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListAccountsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_account_members — List members of a given Cloudflare account">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    <ResponseField name="page" type="integer">
      Page number (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 50 for most endpoints) (Default: `20`)
    </ResponseField>

    <ResponseField name="order" type="string">
      Sort: user.first\_name, user.last\_name, user.email, status (Default: `status`)
    </ResponseField>

    <ResponseField name="direction" type="string">
      Sort direction (asc/desc) (Default: `asc`)
    </ResponseField>

    <ResponseField name="status" type="string">
      Filter by status: accepted, pending, rejected
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListAccountMembersOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_firewall_rules — List firewall rules for a specific zone">
    ### Parameters

    <ResponseField name="zone_id" type="string" required>
      Zone identifier
    </ResponseField>

    <ResponseField name="page" type="integer">
      Page number (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 50 for most endpoints) (Default: `25`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListFirewallRulesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_monitors — List all load-balancer monitors in a Cloudflare account">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    <ResponseField name="page" type="integer">
      Page number (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 50 for most endpoints) (Default: `25`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListMonitorsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_pools — List all load balancer pools in a Cloudflare account">
    ### Parameters

    <ResponseField name="account_id" type="string" required>
      Account identifier
    </ResponseField>

    <ResponseField name="page" type="integer">
      Page number (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Results per page (max 50 for most endpoints) (Default: `25`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "default": null,
          "title": "Result"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page"
        },
        "per_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Per Page"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListPoolsOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* Cloudflare wraps every response in
  `{"success", "errors", "messages", "result", "result_info"}`. The
  shared `_call` helper checks the envelope's `success` flag (not just
  HTTP status), pulls `errors[0].message` on failure, and lifts
  `result_info` pagination (`total_count`, `page`, `per_page`) onto
  the output's top-level `total`/`page`/`per_page` fields for list
  actions.
* Most list endpoints cap `per_page` at 50; firewall rules cap at 100.
* `result` is open: list endpoints return a JSON array; CRUD
  endpoints return the object directly. Mirrors the upstream shape.

## Related integrations

<CardGroup cols={3}>
  <Card title="Algolia" href="/integrations/tools/algolia" />

  <Card title="Amazon Web Services" href="/integrations/tools/aws" />

  <Card title="Apify" href="/integrations/tools/apify" />
</CardGroup>

## Links

* [Cloudflare](https://cloudflare.com)
