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.