Production

Limits and errors

Every plan's limits, what happens when one is reached, and every error the API returns with what to do about it.

View as Markdown

The limits

Limit Free Build Scale
Calls a month 3,000 25,000 500,000
Of them on our model 100 all all
Calls a day 100 no daily limit no daily limit
Extra calls past the month none: calls stop up to 25,000 more up to 500,000 more
Requests a minute 10 60 300
Answers at once 2 10 50
Renders a month, free 30,000 250,000 5,000,000

Limits are your account's, however many keys and projects it has. A call is one request to /v1/chat/completions or /v1/ui, its checking and any repair included. A call on the model in your plan may carry up to about 8,000 tokens of conversation. Prices are on the pricing page.

A plan's month counts from the day you moved to it. Extra calls are billed with the next charge, at the price of the plan they were made on.

Errors

Every error has the same shape. type is the reason to act on; message says it in words.

JSON
{ "error": { "code": 429, "message": "this account's plan allows 60 requests a minute", "type": "rate_limited", "metadata": { "error_type": "rate_limit_exceeded", "reason": "rate_limited" } } }
Status type What happened What to do
400 model_needs_your_key a model other than the included one, without your OpenRouter key send Authorization: Bearer sk-or-..., or use the included model
400 invalid_input and others the request can't be run as written fix the request; message says what
401 morphscreen_key_required, morphscreen_key_invalid no MorphScreen key, or one we don't know or that was revoked check X-MorphScreen-Key
401 openrouter_key_required, openrouter_key_invalid OpenRouter turned your key down check the key at OpenRouter
402 plan_quota_reached this month's calls are used wait for the month, or move to a bigger plan
402 extra_limit_reached a paid plan's month and as many again as extra wait for the month, or move up
402 included_calls_used the free plan's calls on our model send your own OpenRouter key, or pay for a plan
402 included_calls_paused calls on our model are paused for the free plan send your own OpenRouter key, or try later
402 openrouter_out_of_credit your OpenRouter account is out of credit add credit at OpenRouter
403 account_suspended the account is suspended write to support@morphscreen.com
403 model_refused the model's moderation refused the request change the request
404 model_not_found and others no such model, or no such route check the name
413 payload_too_large the body is over 1 MB send less
413 conversation_too_long more than about 8,000 tokens of conversation on our model trim the conversation, or use your own key
429 rate_limited too many requests this minute wait for Retry-After
429 too_many_streams too many answers at once wait for one to finish
429 daily_limit_reached the free plan's calls today wait for Retry-After: midnight UTC
429 render_limit_reached this month's renders wait for the month
429 openrouter_rate_limited OpenRouter's own limit for your key wait for Retry-After
502 the model failed or couldn't be reached, after our retries try again
503 accounts can't be read just now try again shortly
504 the model took too long to start try again, or another model

A 429 always carries Retry-After in seconds. Retry 502, 503 and 504 with a backoff; don't retry the rest unchanged.

Warnings before the end

At 80% and 100% of a month's calls, the account's address gets a mail saying how many are left and what happens next.