Cloudflare::API

Cloudflare::API is a pure Perl client for a focused subset of the Cloudflare API. It covers mainstream compute and storage management, including Workers, R2, KV, D1, Queues, Hyperdrive, and Secrets Store. HTTP transport is provided by HTTP::API::Core.

The distribution requires Perl 5.10 or later, HTTP::API::Core 1.08 or later, and HTTPS support through IO::Socket::SSL.

Example

use Cloudflare::API;

my $api=Cloudflare::API->new(
    token      => $ENV{'CLOUDFLARE_API_TOKEN'},
    account_id => $ENV{'CLOUDFLARE_ACCOUNT_ID'}
);

my $bucket=$api->r2()->create_bucket({ name => 'my-app-assets' });
my $database=$api->d1()->create_database({ name => 'my-app-data' });
my $namespaces=$api->kv()->list_namespaces();

List methods automatically follow Cloudflare pagination and return one flat array reference containing every item. This is convenient but retains the full result set in memory. For large collections, use the corresponding _page() method and consume its HTTP::API::Core::Pagination object incrementally:

my $page_or=$api->kv()->list_keys_page($namespace_id, limit => 1_000);
while (defined(my $key_hr=$page_or->next())) {
    process_key($key_hr);
}

The corresponding _page_response() method makes one request and returns the complete decoded Cloudflare response, including result_info when supplied.

Authentication

Pass token and account_id to the constructor, or set CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID. Account and zone lookups do not require a default account ID. Other account-scoped methods do.

The cloudflare-api command can also use --auth=wrangler to obtain a token from an existing Wrangler login. When Wrangler reports one account, the command uses its account ID automatically. Use --account-id or CLOUDFLARE_ACCOUNT_ID to select an account explicitly.

Non-list JSON methods return Cloudflare's decoded result by default. Pass full_response => 1 to retain the complete decoded Cloudflare response. request() provides access to JSON endpoints without a named method, while response() returns the HTTP::API::Core::Response object for non-JSON bodies or HTTP-level details.

Worker uploads

The Workers interface uploads prepared modules, versions, deployments, secrets, routes, and static asset sets. upload_assets() can recursively upload a directory and return the completion token needed for a Worker version.

The module does not bundle JavaScript, resolve npm dependencies, or build a Worker project. Continue to use Wrangler for uploads that require bundling or a project build, and use Cloudflare::API when the Worker modules and metadata are already prepared.

Current resource methods

| Resource | Methods | | --- | --- | | Accounts | list, get | | Zones | list, get | | Workers | list_scripts, search_scripts, download_script, upload_script, upload_version, list_versions, get_version, upload_assets, delete_script, list_deployments, get_deployment, create_deployment, list_secrets, add_secret, delete_secret, get_subdomain, set_subdomain, list_routes, create_route, update_route, delete_route | | R2 | list_buckets, get_bucket, create_bucket, update_bucket, delete_bucket | | KV | list_namespaces, get_namespace, create_namespace, rename_namespace, delete_namespace, list_keys, get_value, put_value, delete_value | | D1 | list_databases, get_database, create_database, update_database, delete_database, query_database, query_sql | | Queues | list_queues, get_queue, create_queue, update_queue, delete_queue, list_consumers, create_consumer, delete_consumer | | Hyperdrive | list_configs, get_config, create_config, replace_config, update_config, delete_config | | Secrets Store | list_stores, get_store, create_store, delete_store, list_secrets, get_secret, create_secret, update_secret, delete_secret, get_quota |

Every listed list... method also has ..._page and ..._page_response variants; search_scripts has the same variants. Create and update methods take a hash reference containing Cloudflare's request body. The named methods intentionally cover a subset of the Cloudflare API; use request() for other JSON endpoints.

Command-line client

The installed cloudflare-api command exposes the same resource methods and also supports low-level requests:

cloudflare-api --resource r2 --action list_buckets --paginate --max-pages 2
cloudflare-api --resource kv --action create_namespace --arg-json '{"title":"my-app-cache"}'
cloudflare-api --resource zones --action list --param status=active --output dumper
cloudflare-api --method GET --path /accounts --full-response

Arguments and named parameters can be supplied as strings, booleans, JSON, or JSON files. List actions support numbered and cursor-based pagination. Output is pretty JSON by default, with Data::Dumper available through --output dumper. Use cloudflare-api --man for the complete option reference.

Documentation

Reference documentation is available in the doc/ directory and from the GitHub Pages site linked from the repository. Module-specific Markdown pages are stored alongside their modules under lib/Cloudflare.