model_not_in_plan

The message text is shown in the example below.

⚠️
Preview — this feature is being built; the design below is the spec. In the public error catalog on develop; not returned in production yet.
HTTP status403
typepermission_error
Retry?No, not unchanged
StatusNot live / provisional
Extra fieldsupgrade_url

When it happens

The model exists but the organization’s plan level is below the model’s minimum. Not live yet; production still answers with the default model and an x-syntic-model-downgraded header.

Example

{
  "error": {
    "type": "permission_error",
    "code": "model_not_in_plan",
    "message": "Your plan does not include this model. List the models your key can use with GET /v1/models.",
    "param": null,
    "request_id": "req_6f1c2a9e0b7d4c3a8e5f1b2d",
    "upgrade_url": "https://syntic.ai/pricing"
  }
}

How to fix it

  • Pick a model that GET /v1/models returns for your key.
  • Or upgrade to a plan that includes it.

Detect it in code

err = resp.json().get("error", {})
if resp.status_code == 403 and err.get("code") == "model_not_in_plan":
    log.warning("%s (%s)", err["message"], err["request_id"])  # fix the request; do not retry unchanged
Was this page helpful?