What Are Class A Requests?
Class A requests, also known as write and listing requests, are among the most expensive API operations. They include operations that modify the state of your S3 bucket or require significant server-side processing.
Write operations (PUT, POST, COPY, UPLOAD): Whenever you add a new file, upload a file part through a multipart upload, or modify the metadata or tags of an existing object.
The listing operation (LIST): This is the number one pitfall. Asking S3 to list the objects in a bucket or under a specific prefix can be resource-intensive because S3 uses a distributed flat namespace spread across thousands of servers.
The financial impact: AWS charges approximately $0.005 per 1,000 Class A requests. That may sound negligible, but imagine a fleet of 10,000 IoT sensors sending a log file every second. That amounts to 864 million PUT requests per day, resulting in more than $4,300 in daily API charges, even though the total volume of stored data remains relatively small.
What About Class B Requests?
Class B requests cover basic read operations. They place significantly less demand on the storage infrastructure's control plane.
The read operation (GET): Downloading an object, reading its metadata, or retrieving its tags.
Analytical requests (SELECT): Using S3 Select to filter the contents of a CSV or JSON file directly through an SQL query, before downloading the file itself.
The financial impact: These requests are generally around 10 times cheaper than Class A requests, at approximately $0.0004 per 1,000 requests on AWS. However, on a high-traffic website where every image, script, and stylesheet is served directly from an S3 bucket through a GET request, the request volume can still drive costs sharply upward.
Master the security and integrity of your cloud environments
tamper detects, qualifies, and traces every alteration across your data, completely agentless and with zero latency on any S3 provider.
Some Requests Are Free (Class C / Other Requests)
Fortunately, some essential operations remain free with most providers. These include delete requests (DELETE). The pricing model is straightforward: providers generally do not charge you for freeing up space on their servers.
Cleaning up your infrastructure is therefore generally free, apart from specific charges that may apply to storage classes such as Glacier when data is deleted before the minimum storage duration expires.
Comparing Costs Across Major Providers
The object storage market has split into two pricing philosophies: the traditional model used by AWS and the more disruptive approaches adopted by providers such as Cloudflare and Wasabi.
Amazon Web Services (AWS S3) and Google Cloud (GCS): These major providers follow the full-cost model. You pay for storage, API requests (Class A and B), and, above all, outbound data transfer (egress), which is often the largest expense. Their API requests come at a premium, backed by high resilience and an extensive service ecosystem.
Cloudflare R2: No Egress Fees, but API Charges Remain. Cloudflare R2 has disrupted the market by eliminating outbound bandwidth charges, a model known as Zero Egress Fees. Many assumed that R2 was entirely free beyond storage costs, but that is not the case. Cloudflare does charge for API requests: $4.50 per million Class A requests (mutation operations) and $0.36 per million Class B requests (read operations). API pricing is therefore broadly comparable to AWS, with the main savings coming from network traffic.
Wasabi and Backblaze B2: Aggressively Priced Alternatives. Wasabi takes this model further by charging neither egress fees nor API request fees. You pay only for storage. The trade-off is a strict 90-day minimum storage policy. Every file uploaded to Wasabi is billed for at least 90 days, even if it is deleted after just one hour.
Backblaze B2 charges relatively little for API requests and offers free egress when you route traffic through its Bandwidth Alliance CDN partners.
Architectural Strategies for Cost Optimization
Cache GET requests (Class B): Never expose an S3 bucket directly to end users. Always place a Content Delivery Network (CDN), such as CloudFront or Cloudflare, in front of it. The CDN caches the file, so only the first request generates a billable GET request to S3. Millions of subsequent users receive the cached copy from the CDN.
Avoid LIST requests (Class A): Never design an application that lists a bucket's contents simply to determine which files are available. Instead, maintain a database, such as PostgreSQL or DynamoDB, that records each file when it is uploaded. Querying a database is far faster and more cost-effective.
Aggregate data (micro-batching): Instead of issuing one PUT request per second for small log files, buffer the data using tools such as Amazon Kinesis or Kafka, then upload a single large Parquet or JSON file every minute. This reduces your Class A request costs by a factor of 60.
Conclusion
S3 cloud storage is an exceptionally powerful tool, but its pay-as-you-go pricing model can heavily penalize poorly optimized architectures. Treating S3 like a local disk is one of the most common mistakes. Every API call has a cost. The success of your cloud migration depends on your ability to minimize unnecessary requests while maximizing the value of your data.