Docs

Errors & status codes

What each HTTP code means coming from Novusflow and how to react.

Status codes you'll see

CodeMeaningWhat to do
200 / 201SuccessConsume the body
202Accepted — queued for async processingPoll the resource or wait for a webhook
400Validation failedInspect `issues` array — bad input
401No / invalid authRe-authenticate or refresh token
402PLAN_LIMIT — plan gate trippedShow upgrade nudge, see body.capability
403Forbidden — RBAC failureUser lacks the required role
404Not found in this workspaceCross-workspace queries don't traverse tenants
409Conflict — duplicate / wrong stateInspect message; try GET first
422Semantically invalid (e.g. workflow graph)Inspect message; fix and retry
429Rate limitBack off; default limit is 100 req/min/IP
500 / 502 / 503Platform / provider issueRetry with back-off; check status page

PLAN_LIMIT shape

HTTP 402
{
  "message":    "Plan Starter does not include the VOICE channel. Upgrade to unlock it.",
  "code":       "PLAN_LIMIT",
  "planId":     "STARTER",
  "capability": "channel.VOICE",
  "limit":      null,
  "current":    null
}

capability tells the UI which limit was hit so it can deep-link to the right upgrade nudge. limit and current are populated for numeric caps (activeWorkflows, teammates, etc.) so the UI can render "8 of 10 used."

Validation errors (400)

{
  "message": "Validation failed",
  "issues": [
    { "path": ["name"], "message": "String must be at least 1 character" }
  ]
}