Plan, prices and limits

Cloudflare’s own pricing and limits pages are the authority. When this page and Cloudflare disagree, Cloudflare is right. What is here is how the capability’s routes map onto those meters.

Workers Paid only

Cloudflare Artifacts runs on the Workers Paid plan and nowhere else. On a Free plan the binding composes, the Worker deploys, and the first create is refused at runtime, in production. Check the plan before you ship.

Billing begins 14 October 2026

Cloudflare bills Artifacts on two dimensions, each past a monthly allowance.

DimensionIncludedThen
Operations10,000 a month$0.15 per 1,000
Storage1 GB-month$0.50 per GB-month

Source: Artifacts · Pricing.

What each route costs

Cloudflare counts repository operations “such as create, push, pull, and clone”. It does not publish a complete list. So estimate from what each route calls, and treat the calls it does not name as possible operations.

RouteCalls into Cloudflare
GET /artifacts/repos, GET /artifacts/organization/reposNone. D1 only
Set or remove a grantNone. D1 only
Read a repositoryTwo: open it, then its info
Mint a tokenThree: open, the token, and the repository’s remote
Create a repositoryFour: the repository, then open it, revoke the token Cloudflare made with it, and list its tokens to record that one
GET /artifacts/admin/reposTwo for each repository on the page: open, then its info
GET /artifacts/admin/repos/:nameThree: open, its info, and its log
GET /artifacts/admin/repos/:name/tokensTwo: open, and the list
Revoke one tokenTwo: open, and the revoke. Three when the revoke takes nothing back and the kit holds no record of the token, because the list is read
Revoke every token, by a management client or the owner’s break-glassOpen, one revoke for each unexpired token the kit recorded, then a list and a revoke for each live token it still shows, until a list shows none live
A replayed revocationNone
Every other routeOne to open the repository, then its own

Revoking every token starts from the kit’s records, because the list is one page with no cursor. Revoking by record reaches every token the kit minted, whatever the list shows. The list then catches a live token the kit did not mint, made on the binding by your own code or over Cloudflare’s REST API. The binding’s list answers 30 tokens a page, newest first, active tokens only: a revoked token leaves the list, so each round reaches the next page, until a list shows none live or a round revokes none. A live suite records that page size and order against a real namespace, mints more live tokens than one page holds, revokes them on the list alone, and fails if git still accepts any of them; the integration suites are required before a release. With every recorded token revoked and nothing else live, a revoke-all is open, one call per recorded token and one list. Revoking one token: a dead token the kit minted answers revoked: 0 from its record without the list, and a dead token it did not mint answers 404, like one that does not exist.

Each git clone, fetch or push is Cloudflare’s own operation. A git client mints once for each one it runs. That is by design: a busy repository costs operations rather than standing credentials.

Limits

LimitValue
Storage per repository1 GB
Storage per account1 TB, raised on request
Largest file or blob32 MB
Control-plane requests2,000 per 10 seconds, per namespace
Git requests2,000 per 10 seconds, per repository
Namespace name2 to 63 characters
Repository nameA letter or digit, then letters, digits, ., _ and -. Pithy holds it to 63 characters

Source: Artifacts · Limits.

The kit does not meter a customer’s storage against either cap. GET /artifacts/repos/:name reports what Cloudflare holds. What to do about a large repository is your decision.

One namespace per environment

Each environment has its own namespace, <project>-<env>. So production’s rate limit is production’s alone.

A feature’s is <project>-f<issue>-<slug>--artifacts. pithy feature destroy deletes every repository in it, because a repository nobody deletes counts against the account’s terabyte forever. Then it deletes the namespace.

ESC