Data Collection & Telemetry
Overview
Update Hardware
Module and SIM Update Guides
Module Identification
Module Swap Wizard
SIM Swap Wizard
AT&T / T-Mobile Configuration Guide
Verizon Configuration Guide
Worldwide H1 SIM Configuration Guide
SIM Replacement Instructions
Wi-Fi Configuration Guide
Firmware Update
Troubleshoot
ZL6 Troubleshooting Guide
ATMOS 41W Troubleshooting Guide
EM60G Troubleshooting Guide
EM50 Series Troubleshooting Guide
Communication Test
List Cellular Carriers
Test Button & Status Lights
Fix: Retroactively Enable LTE-M Bands for 4G in Europe
Sensor Current Draw Check - ZSC
App Location Permissions on iOS and Android
Coverage
Accessories
ZENTRA Cloud 1.0
Quick Start
Organizations
Account
Edit Account Profile
Update Account Password
Lost Password/Password Reset
Set Measurement Unit Preferences
Users
Devices
Device Inventory
Edit Device
Re-provision ZL6 to European Server
Add Device
Remove Device
Time-zone and Location Override
Calibrations
Downloads
Dashboard
Enable Chart Status
Create Custom Charts
Color Picklist
Add Traces to Chart
Chart Stats
Print Charts
Set a Target Range
Lock Chart Axes
Chart Date Range Picker [NEW]
Download Chart Data
Notifications
Models
Daily Light Integral [1.0]
Ground Water Elevation [1.0]
Ground Water Depth [1.0]
Plant Available Water [1.0]
Daily Light Photoperiod [1.0]
Chill Hours [1.0]
Growing Degree Days [1.0]
Create a Model [1.0]
Evapotranspiration [1.0]
Subscriptions
Error Codes
Applications
FAQ
ZENTRA Field
ZENTRA Cloud 2.0
Frequently Asked Questions
Getting Started
User Account
Setup
Loggers
Add Data Logger
Configure Data Logger
Map of Data Loggers
Data Logger Charts
Data Logger Download
Logs
Archive
Handhelds
Dashboards
Explorer
Data
Workspaces (Projects)
Alerts
Environment Models
Chill Hours [2.0]
Daily Light Integral [2.0]
Daily Light Photoperiod [2.0]
Evapotranspiration [2.0]
Groundwater Elevation [2.0]
Groundwater Depth [2.0]
Growing Degree Days [2.0]
Heat Index [2.0]
Heat Stress Wet Bulb Globe Temperature WBGT [2.0]
Leaf Wetness Amount of Water [2.0]
Plant Available Water [2.0]
Utah Chill Model [2.0]
Wind Chill [2.0]
Subscriptions
Feedback
API
v3.0/4.0
US Server API
EU Server API
TAHMO Server API
Push API
R Package
API Troubleshoot
AgWeatherNet & DAS
Manage API Keys
v5.0
Metadata
Release Notes
Accessibility
Security
Uptime & Incidents
Legal
- All Categories
- API
- v5.0
- Rate Limiting
Rate Limiting
How the ZENTRA Cloud v5 API rate limits requests per user with the GCRA algorithm — burst and steady-state limits, reset behavior, and handling 429 responses.
Rate Limiting
The v5 API is rate limited per user — based on the user resolved from your API key, independent of any device. Requests beyond your limit return 429 Too Many Requests.
The algorithm: GCRA
The API uses the Generic Cell Rate Algorithm (GCRA), a precise, burstable rate-limiting algorithm. GCRA tracks a Theoretical Arrival Time (TAT) for each client and allows a request as long as it does not arrive "too early" according to the configured rate. It's widely used in telecommunications, API gateways, and distributed systems where fairness and precise burst control matter.
v5 has a burst limit of 5 and a steady-state rate of 1 request per minute.
How GCRA works in v5
- Initial burst allowance. After being idle, a client can make up to 5 immediate requests with no delay. This is the allowed burst capacity.
- Steady-state rate. Once the burst capacity is consumed, further requests are limited to the steady rate of 1 request per minute.
- Burst reset behavior. The burst allowance fully resets after an idle period equal to
burst_limit × 60seconds (for 5 bursts, that's 300 seconds). After this idle period, the client regains the full burst allowance. - Handling early requests. If a request arrives sooner than GCRA allows, the algorithm calculates a next time to call timestamp. The client must wait until then before its next request will be accepted.
Handling 429 responses
When you receive 429 Too Many Requests, back off before retrying rather than immediately retrying in a loop. Where the response provides a next time to call value, wait until that time. A simple approach is to pace sustained traffic to the steady-state rate and reserve the burst allowance for interactive or one-off calls.
See Errors for the full status-code reference.
How did we do?
API Token
Errors