
Performance
5 min
Why Label APIs Crash at 3 PM (And How to Stop It)
Every warehouse has an afternoon peak. A label API that doesn't scale creates a queue, delays the carriers, stops the line. Here's what enterprise throughput actually means , and why 10 requests per second isn't enough.
zplflow team
Jun 12, 2026
Every warehouse has the same curve.
Mornings are quiet. The first wave of outbound carriers leaves at 10. The second wave leaves at 14. Between 14:30 and 15:30, every operator on the floor scans a tote, the WMS generates a label, the label hits the conversion API, the printer spits it out, and the parcel goes on the belt.
That ninety-minute window is when 70% of your daily label volume gets generated. If your conversion API can do 10 requests per second, the math is brutal: 600 labels per minute, 54,000 labels across the peak window. A mid-size 3PL with ten active clients will blow through that in the first twenty minutes.
Then the queue starts. Then the line stops.
Most online converters quote a synchronous limit: 10 RPS, 20 RPS, sometimes 50. The number sounds large. In warehouse time, it is not.
A Zebra ZT411 prints a 4x6 label in about 1.5 seconds. The operator scans, the WMS sends the PDF, the API returns the ZPL, the printer wakes up. End-to-end, the operator is idle for about 2 seconds. If the API takes 800ms to convert and another 200ms to commit the token reservation, the operator’s idle time is dominated by network and printer mechanics , fine.
The problem is concurrency. When 30 operators all scan in the same minute, you have 30 simultaneous requests against a service that handles 10 per second. The 11th request waits. The 21st waits longer. By the 30th, the carrier truck is idling at the dock and the operations manager is calling your IT director.
There are two ways to handle a 3 PM peak. One is to buy a server big enough to absorb the spike. The other is to design the system so the spike never reaches the conversion engine at all.
zplflow chose the second path. Every conversion request that arrives at the API gateway is treated according to two questions:
If the answer to the second is yes, the gateway accepts the request, returns a 201 with a secure upload link, and queues the work. The operator’s WMS keeps moving. The conversion happens in a worker pool sized for the 99th-percentile, not the 95th. The result lands on temporary cloud storage and the WMS downloads it when it’s ready.
This is the asynchronous engine. It is available from the Starter plan (€39/month, 60,000 tokens) upward. It is not a future promise. It is how the production system runs today.
For high-volume operations, the job is created, uploaded to cloud storage, queued, processed by a worker, and the result is read back. The WMS only knows the job_id:
# Step 1: create the job
curl -X POST https://api.zplflow/v1/jobs \
-H "Authorization: Bearer ulb_your_key" \
-H "Idempotency-Key: order-2026-06-12-77841" \
-H "Content-Type: application/json" \
-d '{
"operation": "pdf_to_zpl",
"params": { "dpi": 203, "max_kb": 32, "fit": "contain", "allow_degrade": false, "compat_mode": false },
"documents": [ { "content_type": "application/pdf" } ]
}'
# Response: { "job_id": "...", "status": "created", "tokens_reserved": 3, "uploads": [ { "upload_url": "https://..." } ] }
Upload the PDF to the secure upload link, then start the job:
# Step 2: start the job
curl -X POST https://api.zplflow/v1/jobs/{job_id}/start \
-H "Authorization: Bearer ulb_your_key" \
-H "Idempotency-Key: order-2026-06-12-77841"
# Response: { "job_id": "...", "status": "queued" }
The WMS polls , or, on the Growth plan, receives a webhook , and downloads the result from the secure result link. No queueing in the WMS. No timeout on the operator’s screen. The line keeps moving.
If you recognize the 3 PM curve, the test is straightforward. Take your busiest 60 minutes of label traffic from last month. Convert that volume into API requests. Compare that number against the synchronous RPS limit of your current provider. If the math shows a queue, the queue is real , it just hasn’t bitten you yet.
The Starter plan (€39/month) unlocks the async engine and the queue that absorbs it. Growth (€149/month) adds the webhook so the WMS doesn’t have to poll. Either way, the architecture is the same one the largest 3PLs on the platform are already running.
zplflow is label infrastructure for 3PLs. Async engine, queue-based, SLA-backed. Convert PDF to ZPL, transform labels with programmable pipelines, print on any Zebra.
Tags