Error reference
Stable, machine-readable errors
Every error is JSON with a stable
error code. Match on the code, not the message. Denied requests are
never counted against quota.
401
api_key_required
WhenNo Authorization: Bearer header on a protected endpoint.
FixSend Authorization: Bearer YOUR_API_KEY on every protected request.
{
"ok": false,
"error": "api_key_required",
"message": "A valid MMSx / MoPro API key is required for this endpoint."
}
401
invalid_api_key
WhenThe presented key does not exist or is malformed.
FixCheck for whitespace or truncation; keys start with mmsx_beta_.
{
"ok": false,
"error": "invalid_api_key",
"message": "The supplied API key is not valid."
}
401
expired_api_key
WhenThe key passed its expires_at timestamp.
FixRequest a fresh key; expiry is set at creation for time-boxed access.
{
"ok": false,
"error": "expired_api_key",
"message": "This API key has expired."
}
401
revoked_api_key
WhenThe key was revoked by its owner or an administrator.
FixRevocation is permanent; request a replacement key.
{
"ok": false,
"error": "revoked_api_key",
"message": "This API key has been revoked."
}
403
blocked_api_key
WhenThe key was administratively blocked (abuse or policy).
FixContact TrainersEye / MoPro support to review the block.
{
"ok": false,
"error": "blocked_api_key",
"message": "This API key has been blocked."
}
429
quota_exceeded
WhenThe plan's monthly request quota is used up.
FixWait for the monthly reset, or upgrade the plan. Denied requests are not counted against quota.
{
"ok": false,
"error": "quota_exceeded",
"plan": "Developer",
"monthly_limit": 10000,
"used": 10000,
"message": "Monthly API request quota exceeded."
}
403
endpoint_not_allowed_for_plan
WhenThe plan does not include this endpoint (e.g. Free Sandbox calling /v3/exercise/tree).
FixSee the plan matrix on the pricing page; upgrade for full access.
{
"ok": false,
"error": "endpoint_not_allowed_for_plan",
"message": "This endpoint is not included in the current plan."
}
404
not_found
WhenNo ontology node matches the requested name.
FixResolve names through /v3/exercise/search first, then call profile/tree with the canonical name.
{
"ok": false,
"error": "not_found",
"message": "No exercise matched the requested name."
}
200
low_confidence_match
WhenSearch resolved a term but below the confidence threshold.
FixInspect the confidence field on results and confirm ambiguous matches with the user before acting on them.
{
"ok": true,
"resolved": false,
"confidence": 0.41,
"message": "Low-confidence match; confirm before use."
}
422
validation_error
WhenA required query parameter is missing or malformed.
FixCheck the parameter table in the API reference (q, name, limit).
{
"ok": false,
"error": "validation_error",
"message": "Query parameter 'name' is required."
}
500
internal_error
WhenAn unexpected server-side failure.
FixRetry with backoff; if persistent, report it with the request path and timestamp.
{
"ok": false,
"error": "internal_error",
"message": "Unexpected server error."
}