Cloudflare's Account API Will Start Rejecting Names on September 27 — It Silently Truncates Them Today

On September 27, 2026, Cloudflare's account API starts enforcing a 65-character limit on account names. After that date, POST /accounts rejects any name longer than 65 characters with an HTTP 400 error.

That's the loud change, and loud is the easy kind. A 400 is unambiguous — your account-creation call fails, you see it immediately, you shorten the name, you move on. The teams that get bitten aren't the ones who hit the 400 in October. They're the ones relying on what the API does right now, before the enforcement date — because today, the same endpoint fails silently.

Two endpoints, two behaviors, one contract that already disagrees with itself

Here's the situation Cloudflare documented. There are two account APIs:

The update API already enforces the 65-character limit. The create API does not — today it silently truncates names up to 120 bytes and returns success.

Sit with what that means. You can create an account with an 80-character name, get a clean 200, and everything looks fine. But that name was quietly truncated on the way in. And because the update API enforces the 65-char limit, that account can't later be renamed — the value that was silently accepted at creation is now rejected on update. You created a record the rest of the API won't let you edit, and nothing errored to tell you.

That's not a bug you'll catch in testing. Your create call returned 200. Your account exists. The failure only surfaces later, in a different endpoint, when someone tries to rename it and can't figure out why.

Silent now, loud later — same endpoint

What makes this a near-perfect illustration of contract drift is the two-stage arc:

Today: POST /accounts silently truncates. The contract (create accepts up to 120 bytes) disagrees with the contract next door (update caps at 65). The result is malformed data that flows in without a single error.

After September 27: POST /accounts rejects >65 chars with a 400. The silent failure becomes a loud one.

Most teams will only react to the second stage, because the 400 is visible. But the first stage — the silent truncation that's live right now — is the one quietly creating un-editable accounts in production today. If you're programmatically creating Cloudflare accounts with names derived from user input, company names, or generated identifiers, you may already have truncated records you don't know about.

This is not a Cloudflare problem. It's the shape of every API.

Pick through any large provider's deprecation log and you'll find the same pattern, because this is just how APIs evolve. In the same Cloudflare changelog:

None of these throw when they land. They change what a live response contains, and your code keeps running against the old assumption until something downstream quietly produces the wrong result. This is API contract drift: the live API stops matching the contract your code was written against, while still returning a perfectly valid response.

Why your tests won't catch the silent stage

Your integration tests validate your code against the contract you think the API has. When Cloudflare's create API silently truncates a name, your test — which sends a short name and gets a success — passes. The truncation only shows up with a long name, in production, and only becomes visible when a different endpoint later rejects the value. The gap between "the call succeeded" and "the data is correct" is exactly where testing doesn't look, because testing asserts against the contract, and the contract is the thing that quietly drifted.

Contract testing is worth doing — it catches breaking changes in your own API at build time. But it structurally cannot see a provider silently changing behavior on a live endpoint, because there's no build of yours to fail. That's the gap runtime monitoring is for.

What to actually do

Before September 27, and as a general practice for any provider API you depend on:

The lesson outlives the date

September 27 is one enforcement date on one Cloudflare endpoint. If you don't create accounts via that API, it isn't your problem. But the shape of it is everyone's problem: a provider's contract quietly disagreed with itself, accepted data it shouldn't have, and returned success the whole time. The loud version arrives on a scheduled date you can plan for. The silent version is already live — and the only question that matters is whether you find out before it causes damage, or after.

Frequently asked questions

What is changing with Cloudflare's account name API on September 27, 2026?

Cloudflare is enforcing a 65-character limit on account names across all account creation and update APIs. After September 27, 2026, POST /accounts will reject any name longer than 65 characters with an HTTP 400 error. Before that date, the create API silently truncates names up to 120 bytes and returns success, while the update API already enforces the 65-character limit.

Why is the silent truncation a problem if the API returns success?

Because the create API accepts and truncates a long name, but the update API rejects it, you can create an account whose name was silently altered and which can no longer be renamed through the update endpoint. The create call returns 200 with no indication that the name was changed, so the failure is invisible until someone later tries to rename the account and cannot.

How do I know if I already have affected accounts?

If you create Cloudflare accounts programmatically with names longer than 65 characters — for example, names derived from user input or generated identifiers — read back the stored account name and compare it to what you sent. Any account whose stored name differs from the submitted name was silently truncated and may not be editable via the update API.

How is this related to API contract drift in general?

It is a concrete example of it. Contract drift is when a live API's behavior stops matching the contract your code was written against, while still returning valid responses. A silent truncation, a removed response field, or a restructured enum all change what the live API does without throwing an error, so your integration keeps running against a stale assumption until something downstream produces a wrong result. Catching it requires validating live responses against a schema rather than trusting the status code.

← All posts