Skip to main content
When a request fails, Flowyte returns an RFC 9457 problem+json body with the application/problem+json content type. The HTTP status is the source of truth; the body adds machine-readable detail.

The problem shape

{
  "type": "about:blank",
  "title": "Validation failure",
  "status": 400,
  "detail": "name is required",
  "instance": "/api/v1/agents",
  "code": "validation_error",
  "errors": [
    { "field": "name", "message": "is required" }
  ]
}
FieldMeaning
statusHTTP status code (also on the response).
titleShort, human-readable summary of the problem type.
detailExplanation specific to this occurrence.
codeStable machine string for branching (e.g. no_published_version).
errors[]Field-level validation errors (field, message), when relevant.
Branch on status and code, not on detail or title — those wording may change.

Common statuses

StatusWhen
400 Bad RequestMalformed or invalid request body; errors[] lists the offending fields.
401 UnauthorizedMissing or invalid key/session. Check Authorization: Bearer flowyte_sk_….
403 ForbiddenOrg mismatch, insufficient scope, disallowed origin — or a reserved endpoint (see below).
404 Not FoundThe resource doesn’t exist in your org’s scope.
409 ConflictDuplicate name, a publish race, or a stale If-Match version.
422 UnprocessableSemantically invalid — e.g. a language your plan’s speech engine doesn’t support.
429 Too Many RequestsRate-limited. Honor Retry-After and the RateLimit-* headers.

Reserved endpoints return 403

Some endpoints in the contract are reserved (planned ahead of release). Calling one returns 403, not 404 — the route exists but isn’t open to you yet. If a correctly-authenticated, correctly-scoped call returns 403, check whether the endpoint is reserved before assuming a permissions bug. The same 403 also covers genuine scope and cross-org denials.

Named problems

A few problems carry a specific code worth handling:
codeStatusMeaning
no_published_version409You requested a published-mode session (e.g. a non-draft talk token) but the agent has never been published. Publish it, or use draftMode: true.
integration_unavailable400The provider’s OAuth app isn’t configured for this deployment yet.
integration_not_connected409A config helper needs a connected provider (e.g. resolving a Sheet before Sheets is connected).
sheet_not_accessible404The spreadsheet link is wrong or hasn’t been shared with the connected account.
file_expired404An uploaded fileId was garbage-collected before it was attached. Re-upload.
file_too_large413The upload exceeds the 25 MB limit.

Optimistic concurrency (409 on PATCH /agents/{id})

Agent autosave uses an If-Match version. If you send a stale version, the server responds 409 with the current agent state and version in the body. Rebase: refetch, re-apply your pending edits, and retry with the new version. For status codes per endpoint, see the API Reference.