Rate Limits
Understand Syndic+ API request limits and how to optimize your usage.
Why rate limits?#
Rate limits protect the Syndic+ platform against abuse, runaway integration loops, and traffic spikes that would degrade the experience for other users.
Limits per plan#
| Plan | Requests / minute | Requests / day | MCP tools / min |
|---|---|---|---|
| Free | 30 | 1,000 | 10 |
| Starter | 120 | 10,000 | 60 |
| Gestion | 300 | 50,000 | 180 |
| Pro | 600 | 200,000 | 600 |
| Enterprise | Custom | Custom | Custom |
Limits are applied per syndicate, not per user. If multiple admins hit the API at once, they share the same quota.
Response headers#
Every API response includes headers showing your remaining quota:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 284
X-RateLimit-Reset: 1735689600
X-RateLimit-Limit— per-minute quota for your planX-RateLimit-Remaining— requests left in the current windowX-RateLimit-Reset— Unix timestamp when the window resets
Exceeding the quota#
When you exceed the quota, the API returns:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32000,
"message": "RATE_LIMITED",
"data": {
"retryAfter": 42
}
}
}
The HTTP headers also include:
Retry-After: 42
Wait the indicated number of seconds before retrying. Don't loop immediately — you'll stay in a rate-limited state.
Best practices#
1. Use caching#
Read endpoints (list_*, get_*) are idempotent. Cache their responses client-side for 1 to 5 minutes to dramatically cut your call count.
2. Pagination#
Large datasets are paginated by default (50 items per page). Ask for pageSize: 200 for one-off exports instead of 4 successive calls.
3. Exponential backoff#
If you receive a RATE_LIMITED error:
Attempt 1: wait 1 second
Attempt 2: wait 2 seconds
Attempt 3: wait 4 seconds
Attempt 4: wait 8 seconds
Give up after 5 attempts
4. Webhooks instead of polling#
Instead of list_co_owners every 30 seconds to detect changes, subscribe to webhooks for real-time notifications.
5. Batch writes#
If you're creating 100 co-owners, make a single bulk_create_co_owners call instead of 100 create_co_owner calls.
Special cases#
Bulk import#
The Gestion plan and above unlock a bulk import window (10,000 requests in 10 minutes) for bulk_* endpoints or Microsoft/CSV imports.
Critical endpoints#
Some endpoints have their own limits, independent of the general quota:
| Endpoint | Limit |
|---|---|
/api/auth/* | 10 requests / minute / IP |
/api/oauth/authorize | 20 requests / minute / IP |
/api/oauth/token | 60 requests / minute / client |
| PDF generation | 100 PDFs / hour / syndicate |
Raise your limits#
If your legitimate integration routinely hits the ceiling:
- Verify caching is enabled client-side (often cause #1)
- Upgrade from Settings → Billing
- Contact sales for a custom Enterprise plan (
sales@syndicplus.ca)
Monitoring#
Settings → Developer → API usage shows:
- Requests per hour over the last 24 hours
- Top 10 most-called endpoints
RATE_LIMITEDerror rate- Daily quota trend