Rate-limit info

⚠️
Preview — this feature is being built; the design below is the spec.

GET /v1/organizations/rate_limits returns the rate limits that apply to your organization: your tier, each model’s requests-per-minute and token-per-minute limits, and any lower limits set on individual workspaces. You can also set or clear those workspace limits.

Use it to configure client-side throttling from the real numbers instead of hard-coding them, and to check what a tier upgrade changed.

Endpoints

MethodPathPurpose
GET/v1/organizations/rate_limitsOrganization tier and per-model limits.
GET/v1/organizations/workspaces/{workspace_id}/rate_limitsThe effective limits for one workspace.
PUT/v1/organizations/workspaces/{workspace_id}/rate_limitsSet per-model caps for the workspace.
DELETE/v1/organizations/workspaces/{workspace_id}/rate_limitsRemove all workspace caps.

Authenticate with an admin key and send syntic-beta: admin-2026-11-01.

Organization limits

{
  "type": "rate_limits",
  "tier": "2",
  "next_tier": { "tier": "3", "paid_to_date_required_usd": "250.00", "paid_to_date_usd": "131.40", "eligible_after": "2026-11-12T00:00:00Z" },
  "data": [
    {
      "model": "Amara S1.2",
      "requests_per_minute": 1000,
      "input_tokens_per_minute": 400000,
      "output_tokens_per_minute": 80000
    },
    {
      "model": "Amara Quick",
      "requests_per_minute": 1500,
      "input_tokens_per_minute": 800000,
      "output_tokens_per_minute": 160000
    }
  ],
  "other_limits": [
    { "group": "token_counting", "requests_per_minute": 2000 },
    { "group": "files_batches_models", "requests_per_minute": 1000 },
    { "group": "admin_api", "requests_per_minute": 300 }
  ]
}

tier is start, 1 to 4, or custom. next_tier is null at tier 4 and for custom tiers.

Workspace limits

The response for a workspace has the same data list with each model’s effective limits (the lower of the organization’s and the workspace’s) plus overrides showing what was set on the workspace:

{
  "type": "workspace_rate_limits",
  "workspace_id": "wrkspc_01JC5...",
  "data": [{ "model": "Amara S1.2", "requests_per_minute": 100, "input_tokens_per_minute": 50000, "output_tokens_per_minute": 80000 }],
  "overrides": [{ "model": "Amara S1.2", "requests_per_minute": 100, "input_tokens_per_minute": 50000 }]
}

To set caps, PUT an overrides list. Each entry names a model and any of the three limits; omitted limits follow the organization’s. The list replaces previous overrides.

# Keep the staging workspace to 100 RPM on the default model
curl -sS -X PUT https://app.syntic.ai/v1/organizations/workspaces/wrkspc_01JC5B7D9F1H3K5M7P9R/rate_limits \
  -H "Authorization: Bearer $SYNTIC_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -H "syntic-beta: admin-2026-11-01" \
  -d '{"overrides": [{"model": "Amara S1.2", "requests_per_minute": 100, "input_tokens_per_minute": 50000}]}'

Errors

Errors use the error envelope.

StatustypecodeWhen
400invalid_request_erroroverride_above_org_limitA workspace cap higher than the organization’s limit.
400invalid_request_errorunknown_modelModel name not in the catalogue.
404not_found_errorworkspace_not_foundNo such workspace.

Build notes for the platform team

  • Read limits from the same tier table the limiter enforces; never keep a second copy.
  • Overrides are stored per workspace and model and loaded into the limiter’s bucket configuration within 60 seconds of a change.
Was this page helpful?