Retrieve the calling credential's rate limit state Run in API Explorer
What this credential has left, on every budget that applies to it, measured after this request has been counted.
Three budgets exist. general counts every request. audience counts
only the operations that return subscriber or recipient email addresses.
write counts only the operations that change something. The two narrow
budgets are smaller than general, and the operations they cover are
charged to both and have to pass both, so a credential that has
exhausted one of them can still call everything else.
Read this rather than inferring the whole picture from the RateLimit-*
headers, which describe one budget at a time.
This operation is itself counted against the general budget.
Headers
-
The contract version this request is written against. Every version published so far is a release date (
YYYY-MM-DD), which is why the examples look like one, but the value is an opaque identifier: match it against the versions this API publishes rather than parsing it, because a future one may not be only a date. An unknown value answers400withinvalid_version.Omitting the header pins the request to the version that was current when the API key was issued, so an integration keeps working when a newer version ships.
Minimum length is
1.
Responses
-
The current window, limit and remaining for this credential.
-
No credential was presented, or it is malformed, unknown, revoked or expired, or it is an access token minted for a different audience.
Every one of these answers identically, down to the wording and the headers, so a refusal never confirms that a string was once real.
-
Too many requests. Back off and retry after the interval named by the
Retry-Afterresponse header.One of the budgets in
RateLimit-Policyran out, and theRateLimit-*headers on this response say which and when it resets. -
Something failed inside Commune. The request may be retried.
curl \
--request GET 'https://api.usecommune.com/rate-limit' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Commune-Version: 2026-08-26"
{
"object": "rate_limit",
"limit": 42,
"remaining": 42,
"window_seconds": 42,
"reset_at": "2026-05-04T09:42:00Z",
"policies": [
{
"name": "general",
"limit": 42,
"used": 42,
"remaining": 42,
"window_seconds": 42,
"reset_at": "2026-05-04T09:42:00Z",
"description": "string"
}
]
}
# Headers
WWW-Authenticate: string
# Payload
{
"error": {
"code": "bad_request",
"message": "Newsletter not found.",
"param": "cursor",
"allowed_values": [
"subscribed",
"unsubscribed",
"bounced",
"complained",
"pending"
],
"request_id": "req_01j9c8h1q7m3n4p5r6s7t8u9v0",
"docs_url": "https://usecommune.dev/errors/not_found"
}
}
# Headers
Retry-After: 42
# Payload
{
"error": {
"code": "bad_request",
"message": "Newsletter not found.",
"param": "cursor",
"allowed_values": [
"subscribed",
"unsubscribed",
"bounced",
"complained",
"pending"
],
"request_id": "req_01j9c8h1q7m3n4p5r6s7t8u9v0",
"docs_url": "https://usecommune.dev/errors/not_found"
}
}
{
"error": {
"code": "bad_request",
"message": "Newsletter not found.",
"param": "cursor",
"allowed_values": [
"subscribed",
"unsubscribed",
"bounced",
"complained",
"pending"
],
"request_id": "req_01j9c8h1q7m3n4p5r6s7t8u9v0",
"docs_url": "https://usecommune.dev/errors/not_found"
}
}