LegitGrailsLegitGrails
Status unavailable
  • Developers
  • API Reference
LegitGrails API
    OverviewQuickstartIntegration setupAuthenticationCatalogOrdersPhotosWebhooksRate limitsErrorsChangelog
API Reference
LegitGrails API

Rate limits

Rate limits are set at the API-key level. The window starts with the first counted request.

Current limits

CategoryRequests per 60 secondsEndpoints sharing the quota
Catalog120All five GET /catalog/* endpoints.
Read300GET /audit/events, GET /balance, GET /orders, and GET /orders/{id}.
Create30POST /orders.
Update30POST /orders/{id}/update_photos.
Upload20POST /photos.
Webhook10POST /webhooks, GET /webhooks, and DELETE /webhooks/{id}.

Need higher limits? Contact dev@legitgrails.com to discuss your expected traffic and a limit configuration suited to your account.

Response headers

Counted requests include:

HeaderMeaning
X-RateLimit-LimitMaximum requests for this API key and category in the current window.
X-RateLimit-RemainingRequests remaining in that category's current window.

A rate-limited response also includes Retry-After, in whole seconds. Wait at least that long before retrying.

429 response

When a limit is exceeded, the API returns code rate-limit-exceeded with the active category, limit, window, and wait time:

Code
HTTP/1.1 429 Too Many Requests Retry-After: 17 X-RateLimit-Limit: 20 X-RateLimit-Remaining: 0
Code
{ "statusCode": 429, "message": "Rate limit exceeded", "timestamp": "<timestamp>", "path": "/v1/integrations/photos", "code": "rate-limit-exceeded", "details": { "category": "upload", "limit": 20, "window_seconds": 60, "retry_after_seconds": 17 }, "request_id": "<request-id>" }

Use Retry-After rather than calculating a delay from local clocks. Add random jitter when many workers may retry together. For non-idempotent writes, first reconcile whether the original request succeeded; see Errors.

Last modified on September 4, 2026
WebhooksErrors
On this page
  • Current limits
  • Response headers
  • 429 response
JSON