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.01 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();

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.

JSON methods return Cloudflare's decoded result by default. Pass
full_response => 1 to retain the complete response envelope and
pagination information. request() provides access to JSON endpoints
without a named method, while raw_request() returns the
HTTP::API::Core::Response object for non-JSON responses.

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, 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

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.
