Rate limits
Every key has two limits: requests per minute and per day (the day is counted in UTC). GET /me shows the values for your key in rateLimit (rpm and rpd).
Every response to an authenticated call carries the state of the limit that is closer to running out - file downloads included (they count against the rate limit too). Answers made before the key or the limit is checked carry no such headers: an invalid key (401), a malformed body (400), an unknown path (404), invalid query parameters (400 validation), a missing scope (403 forbidden_scope), a write refused for a test key (403).
In the browser (CORS) the RateLimit-*, Retry-After, Grem-Sandbox, X-Request-Id and Content-Range headers are readable.
RateLimit-Limit: 60
RateLimit-Remaining: 12
RateLimit-Reset: 41
| Header | Meaning |
|---|---|
RateLimit-Limit | requests allowed in the current window |
RateLimit-Remaining | requests left |
RateLimit-Reset | seconds until the window resets |
Over the limit you get 429 with title: rate_limited and a Retry-After header. The rate limit is a technical guard; it never charges anything.
Watch RateLimit-Remaining and spread requests over time. Job status polling counts against the rate limit too, although it is free - poll no more often than every few seconds, or switch to webhooks.
Billing
There is no separate API plan: access is part of your subscription, and paid actions are charged to the same wallet as in the cabinet.
A paid call has two parts:
- The API call. Taken from the API call pool included in your plan. Beyond the pool, calls are paid as you go.
- The tool price - the same as the action costs in the cabinet (from the plan's included quota or from the wallet).
API call pool per plan:
| Plan | API calls per month |
|---|---|
| Free | 100 |
| Start | 5,000 |
| PRO | 25,000 |
| MAX | 100,000 |
| Agency Start | 50,000 |
| Agency Growth | 250,000 |
| Agency Scale | unlimited within fair use |
For other plans and current tool quotas and prices, see the plans page in the cabinet.
What is paid and what is free
Each operation's billing class is in /openapi.json, field x-grem-billing: free, api_call or api_call+sku:... (a call plus the tool price).
| Paid | Free |
|---|---|
running tools (POST to valuation, texts, video, photo, PDF, site and so on) - call + tool price | every read (GET), including job polling and file downloads |
| flyer and report-review confirmation - call only | listings: create, edit, delete |
| chat message - call + message price | leads and Swipe Match: create, edit, events |
| creating, editing and deleting chat sessions - call only | image uploads |
| webhook management |
A refused request (4xx or 5xx) uses no API call. The exception is 502 provider_error after a timeout: the work may still finish and be charged - check GET /works (photo enhancement, site and draft: the cabinet or your listings). A retry of the express valuation with the same Idempotency-Key returns the result free of charge (neither the valuation nor the API call); on other tools the key stays taken for 15 minutes after a timeout - check the result instead of repeating.
Calls, spend and errors per key are in the cabinet on the API page, Analytics tab.
Related
- Errors -
402and429. - Idempotency - safe retries without double charges.