docs(r2): clarify billing for failed 4xx requests in pricing FAQ - #32832
docs(r2): clarify billing for failed 4xx requests in pricing FAQ#32832krys-cf wants to merge 2 commits into
Conversation
Review
👉 Fix in your agent 👈Fix the following review findings in PR #32832 (https://github.com/cloudflare/cloudflare-docs/pull/32832).
Before making changes, review each finding and present a brief summary table:
- For each finding, state whether you agree, disagree, or need clarification
- If you disagree (e.g. the fix requires disproportionate effort for minimal benefit,
or the finding is factually incorrect), explain why
- If you need clarification before deciding, ask those questions
- Then share your plan for which issues to tackle and in what order
After triaging, follow this order:
1. Post a comment on this PR for any findings you are skipping, with the finding ID and your reasoning.
2. Then commit the fixes for the legitimate findings.
The comment must come before the commit — the bot reads PR comments when a new
push triggers a review, so skip comments posted after the push will be missed.
---
## Style Guide Review
### Warnings (5)
#### SG-e88bed526a40 · No trailing punctuation in headings
- **File:** `src/content/docs/r2/pricing.mdx` line 167
- **Issue:** Heading `### Will I be charged for failed requests to my R2 bucket?` ends with `?`
- **Fix:** Remove the trailing `?`, e.g. `### Charges for failed requests to an R2 bucket`
#### SG-b6363bf83cf6 · Monospace for HTTP status codes
- **File:** `src/content/docs/r2/pricing.mdx` line 171
- **Issue:** `HTTP 401` appears in prose without backticks
- **Fix:** Wrap the HTTP status code in backticks: `` `HTTP 401` ``
#### SG-9c4c381cc2d7 · Monospace for HTTP status codes
- **File:** `src/content/docs/r2/pricing.mdx` line 173
- **Issue:** `HTTP 403` appears in prose without backticks
- **Fix:** Wrap the HTTP status code in backticks: `` `HTTP 403` ``
#### SG-68b78d3987ac · Monospace for HTTP status codes
- **File:** `src/content/docs/r2/pricing.mdx` line 177
- **Issue:** `HTTP 412` appears in prose without backticks
- **Fix:** Wrap the HTTP status code in backticks: `` `HTTP 412` ``
#### SG-0485b5513e8b · Monospace for HTTP status codes
- **File:** `src/content/docs/r2/pricing.mdx` line 178
- **Issue:** `HTTP 400` appears in prose without backticks
- **Fix:** Wrap the HTTP status code in backticks: `` `HTTP 400` ``
### Suggestions (1)
#### SG-fa83f6f5132b · Bullet list with fewer than three items
- **File:** `src/content/docs/r2/pricing.mdx` line 177
- **Issue:** The bulleted list on lines 177–178 has only two items
- **Fix:** Consider writing the two examples as prose instead of a bulleted list
Code ReviewThis code review is in beta and may not always be helpful — use your judgment. No code review issues found. ConventionsNo convention issues found. Style Guide ReviewWarnings (5)
Suggestions (1)
CommandsOnly codeowners can run commands. Post a comment with the command to trigger it.
|
Review findings triageSG-a60a4d16d913 (trailing question mark): Skipping. This is an FAQ section — the previous heading also used a question mark ( SG-08c62ba463c4 (sentence case): Skipping. The heading is already sentence case: "Will I be charged for failed requests to my R2 bucket?" — only "Will" (start of sentence) and "R2" (product name) are capitalized. SG-9f3667988d6e (2-item bullet list, auth failures): Skipping. The two items have different HTTP status codes (401 vs 403) and the 403 entry includes sub-codes. Bullets are clearer for scanning than prose here. SG-945c4da1d8fc (2-item bullet list, examples): Skipping. Same reasoning — each example pairs a distinct status code with an error name and cause. Bullets aid scanability. |
27e9f46 to
732a935
Compare
732a935 to
e845f65
Compare
Expand the R2 pricing FAQ to explain which failed requests are billed as Class A operations. The previous FAQ only mentioned 401 Unauthorized as exempt, leaving customers uncertain about other 4xx status codes. Empirically tested against R2 analytics API: - Auth-layer failures (401, 403 SignatureDoesNotMatch/ExpiredRequest/ RequestTimeTooSkewed) are NOT billed - Post-auth failures (412 PreconditionFailed, 400 BadDigest) ARE billed DEE-3763
e845f65 to
e6fa5c2
Compare
|
Skip the Dead On the In screen,live always permanently
Noong Miy, Set 9, 2026, 12:25 AM, isinulat ni krys-cf <
***@***.***> ang:
… ***@***.**** commented on this pull request.
------------------------------
In src/content/docs/r2/pricing.mdx
<#32832 (comment)>
:
> +Requests that fail at the authentication layer are not charged. This includes:
+
+- HTTP 401 (`Unauthorized`) — missing or invalid credentials.
Updated to cover both authentication and authorization failures, including 403
AccessDenied when valid credentials lack permission to perform the
operation.
—
Reply to this email directly, view it on GitHub
<#32832?email_source=notifications&email_token=B7WGP62QIDDXNI3LWGQSPG35OAXGRA5CNFSNUABKM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UKJSXM2LFO4XTKMJUGQZTCOJXHAZKM4TFMFZW63VKON2WE43DOJUWEZLEUVSXMZLOOSWGM33PORSXEX3DNRUWG2Y#discussion_r3960046079>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/B7WGP6YYNFBBKLM5RL5QPLT5OAXGRAVCNFSNUABFKJSXA33TNF2G64TZHMZDSMRWG4ZTIMRUHNEXG43VMU5TKMJYGQYDQNBWG442C5QC>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
What this PR does
Expands the R2 pricing FAQ to clarify which failed (4xx) requests are billed as Class A operations. The previous FAQ only mentioned HTTP 401
Unauthorizedas exempt, leaving customers uncertain about other error codes like 412PreconditionFailed, 403SignatureDoesNotMatch, and 400BadDigest.How this was verified
Empirically tested by firing controlled batches of each error type against a dedicated R2 test bucket and querying the
r2OperationsAdaptiveGroupsGraphQL analytics dataset for operation counts.Results:
Rule: Authentication-layer failures (401, 403 from signature/expiry checks) are not billed. Authenticated requests that fail post-auth (412, 400) are billed as Class A operations.
Related
DEE-3763