Limits & facts
Base URL and versioning
The version lives in the path. A breaking change ships as a new prefix; /v1 keeps
its contract.
What fits in one send
Every recipient is one delivery, and every delivery counts once against your allowance. A message to three addresses costs three.
Rate limits
Fixed one-minute windows. Every response carries RateLimit-Limit,
RateLimit-Remaining and RateLimit-Reset; a 429 adds Retry-After in seconds.
See Rate limits.
Quota headers
Send endpoints report your plan allowance as
structured-field dictionaries:
RRay-Quota-Limit, RRay-Quota-Remaining and RRay-Quota-Reset.
RRay-Quota-Reset values are Unix timestamps: the end of the UTC day for
account.daily, the end of the billing period for the rest.
Changing plan mid-period
Your delivery counter belongs to the billing period, not to the plan: an upgrade keeps the count where it is. The allowance and the overage are prorated by the time you spent on each plan, exactly the way the plan fee is.
Upgrade from Starter to Growth on day 15 of a 30-day period and the period includes 7,500 + 37,500 = 45,000 deliveries — half of each plan’s package.
Overage is split across the plans you were on in the same proportion, and each part is priced at that plan’s own rate, so an invoice shows them as separate lines.
The dashboard and RRay-Quota-Limit report the prorated allowance the moment the
upgrade applies. The plan’s full allowance applies from the next period on.
Overage for a closed period is billed on its own invoice, raised right after the period ends. While such an invoice is unpaid, sending is paused and plan changes are refused; paying it resumes both.
Downgrades and cancellation take effect at the end of the period. You keep the current plan’s allowance until then, and the next period starts on the new plan. Cancelling moves you to Free rather than removing your account.
Plan fees are charged in advance. If a renewal cannot be collected after the retries, the account moves to Free, the uncollected renewal is cancelled, and nothing is owed for it.
Retention
Pagination
See Pagination.
Statistics windows
GET /v1/stats takes last buckets of size group_by, including the current partial
one. The default is 1 for every grouping.
Workspace headers
See Workspaces.
Identifiers
Ids are a short prefix, an underscore, and an opaque suffix. The prefix tells you what kind of object it is. Treat the suffix as opaque: do not parse it, and store ids as strings.
API key secrets are not ids: they look like rray_live_... or rray_test_... and are
shown exactly once. Ids are stable and safe to log; secrets are neither.
Proprietary headers
Standard headers are used bare (Idempotency-Key, RateLimit-*, Retry-After).
Everything proprietary is RRay--prefixed; there are no X- headers in this API.