Amarsia
API Reference

Errors

Error envelopes, SDK error classes, and retry guidance.

REST error envelopes

REST responses can return one of these shapes.

OpenAI-style envelope:

{
  "error": {
    "type": "invalid_request_error",
    "message": "content is required",
    "param": "content",
    "code": "missing_required_field"
  }
}

FastAPI-style envelope:

{
  "detail": "content is required"
}

FastAPI validation envelope:

{
  "detail": [
    {
      "loc": ["body", "content"],
      "msg": "field required",
      "type": "value_error.missing"
    }
  ]
}

REST field meaning

FieldTypeMeaning
typestringHigh-level error category
messagestringHuman-readable explanation
paramstring or nullRelated request field
codestring or nullStable machine-readable code

HTTP status summary

StatusNameMeaningRecommended action
200OKRequest succeededUse response
400Bad RequestInvalid request body/paramsFix payload
401UnauthorizedMissing/invalid API keyFix key header
403ForbiddenKey valid but no accessCheck permissions
404Not FoundResource or path not foundVerify IDs/path
409ConflictRequest conflicts with existing stateResolve conflict and retry
429Too Many RequestsRate limit reachedRetry with exponential backoff
500/502/503/504Server ErrorsTemporary server issueRetry safely

SDK error classes

The SDK normalizes errors into typed classes.

SDK error classWhen it happens
AmarsiaHttpErrorAPI returned a non-2xx response
AmarsiaValidationErrorSDK-side validation failed (for example empty content)
AmarsiaConfigurationErrorMissing config or required IDs (for example no conversation id)
AmarsiaAbortErrorRequest was aborted
AmarsiaNetworkErrorNetwork layer failure

SDK error fields

FieldMeaning
nameError class name
statusHTTP status (when available)
codeStable symbolic code
messageHuman-readable message
paramRelated request param when available
detailsFull parsed response body or raw payload

Common SDK code values:

CodeTypical cause
bad_requestInvalid payload
unauthorizedMissing/invalid API key
forbiddenKey or origin not allowed
not_foundResource/path not found
unprocessable_entityServer-side validation failed
rate_limitedRequest limit exceeded
internal_server_errorServer-side failure

SDK error handling

import { AmarsiaSdkError } from "@amarsia/sdk"

try {
  await client.run({
    content: [{ type: "text", text: "Hello" }],
  })
} catch (error) {
  if (error instanceof AmarsiaSdkError) {
    console.error(error.name)
    console.error(error.status)
    console.error(error.code)
    console.error(error.message)
    console.error(error.details)
  }
}

Retry rules (all tracks)

  • Retry: 429, 5xx, network timeouts
  • Do not retry blindly: 400, 401, 403, 404
  • For streaming errors: retry once, then fallback to regular endpoint