Coasty sessions API
Stateful CUA sessions with persistent trajectory.
Stateful CUA sessions with persistent trajectory.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/coasty-sessions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Coasty Public keys Sessions API
version: 1.0.0
summary: Computer Use Agents, scheduled automation, and managed VMs.
description: "# Coasty Public API\n\nCoasty is a Computer Use Agent (CUA) platform: predict actions from screenshots,\nprovision managed VMs, and run scheduled automation against them.\n\n## Authentication\n\nAll endpoints (except `/v1/triggers/webhook/{webhook_id}` and health checks) require an API key.\nPass it as either:\n\n- `X-API-Key: sk-coasty-live-...` (or `sk-coasty-test-...` for sandbox)\n- `Authorization: Bearer sk-coasty-live-...`\n\nThe external webhook endpoint does not use an API key, but it is authenticated:\nsend the HMAC-SHA256 `Coasty-Signature` credential documented on that operation.\n\nTest-mode keys (`sk-coasty-test-*`) hit the same validation paths as live keys but\nreturn mock VMs / mock action results and never bill credits — ideal for CI.\n\n## Pricing & budgeting\n\nPer-call rates (subject to change — see `lib/pricing/tiers.ts METERED_RATES`):\n\n| Endpoint | Credits |\n|---|---|\n| `POST /v1/predict` | ~5 |\n| `POST /v1/sessions` | 10 |\n| `POST /v1/sessions/{id}/predict` | ~4 |\n| `POST /v1/ground` | ~3 |\n| `POST /v1/parse` | 0 (free) |\n\nLong-running CUA jobs orchestrated through the dashboard (not this API) bill at\n10 credits/minute with a 20-credit minimum. Subscription tiers (`free | starter |\nprofessional | enterprise`) gate feature availability (e.g. custom system prompts),\nschedule counts, and the maximum trajectory length.\n\n## Errors\n\nEvery error response uses the same envelope:\n\n```json\n{\n \"error\": {\n \"code\": \"INSUFFICIENT_CREDITS\",\n \"message\": \"Need 5, have 2.\",\n \"type\": \"billing_error\",\n \"request_id\": \"req_a1b2c3d4e5f6\",\n \"retryable\": false,\n \"retry_with_same_idempotency_key\": false\n }\n}\n```\n\nInclude the `request_id` in support requests.\n\n## Idempotency\n\nOperations marked `x-idempotency: reserve-and-replay` accept `Idempotency-Key:\n<≤128 chars of [A-Za-z0-9_-:]>`. Replays\nof the same key + identical body return the original response (with\n`X-Coasty-Idempotent-Replay: true`) for 24 h. Reusing the key with a different body\nis a 422 `IDEMPOTENCY_KEY_REUSED`.\nOperations marked `x-idempotency: webhook-payload-dedup` instead deduplicate the\nsame webhook id + identical raw body for 60 seconds; they do not accept an\nIdempotency-Key.\n\n## Clients & MCP\n\nUse the HTTP API directly from any language. Official TypeScript and Python SDKs\nare not currently published; generate a client from this OpenAPI document if needed.\n- MCP server: `npx -y @coasty/mcp` (see `x-mcp-server`)\n\n## Reference\n\nComplete (machine-readable) spec is hosted at `/.well-known/openapi.json` and\n`/openapi.json` (Stripe / Vercel conventions)."
contact:
name: Coasty Developer Support
url: https://coasty.ai/support
email: founders@coasty.ai
license:
name: MIT
identifier: MIT
termsOfService: https://coasty.ai/terms
servers:
- url: https://coasty.ai
description: Production
- url: https://coasty.ai
description: Sandbox — use sk-coasty-test-* keys against the same host. No billing, mock VMs.
security:
- apiKey: []
- bearerAuth: []
tags:
- name: sessions
description: Stateful CUA sessions with persistent trajectory.
paths:
/v1/sessions:
post:
tags:
- sessions
operationId: createSession
summary: Create a stateful CUA session
description: Persistent session with a 2-hour (7200s) idle TTL, reset on each predict/reset; expires_at is returned. A predict/reset against an expired or unknown session is a 404 SESSION_NOT_FOUND. Maintains trajectory across predictions. Concurrent-session limits are tier- and deployment-configured; clients must handle 429 responses instead of hardcoding a tier limit.
security:
- apiKey: []
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
- $ref: '#/components/parameters/XLLMProvider'
- $ref: '#/components/parameters/XLLMApiKey'
- $ref: '#/components/parameters/XLLMModel'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSessionRequest'
responses:
'200':
description: Session created.
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSessionResponse'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
X-Coasty-Key-Kind:
$ref: '#/components/headers/KeyKind'
X-Coasty-Test-Mode:
$ref: '#/components/headers/TestMode'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateReset'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateReset'
Idempotency-Replayed:
$ref: '#/components/headers/IdempotencyReplayed'
X-Coasty-Idempotent-Replay:
$ref: '#/components/headers/IdempotentReplay'
Idempotency-Status:
$ref: '#/components/headers/IdempotencyStatus'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
x-auth-mode: api_key
x-required-scope: session
x-required-scopes:
- session
x-scope-policy: required
x-billing-code: session_create
x-offering: cua
x-feature-flag: PUBLIC_CUA_API_ENABLED
x-idempotency: reserve-and-replay
get:
tags:
- sessions
operationId: listSessions
summary: List active sessions
security:
- apiKey: []
- bearerAuth: []
responses:
'200':
description: Active sessions for this key.
content:
application/json:
schema:
type: object
properties:
sessions:
type: array
items:
$ref: '#/components/schemas/SessionInfoResponse'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
X-Coasty-Key-Kind:
$ref: '#/components/headers/KeyKind'
X-Coasty-Test-Mode:
$ref: '#/components/headers/TestMode'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateReset'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateReset'
Idempotency-Replayed:
$ref: '#/components/headers/IdempotencyReplayed'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
x-auth-mode: api_key
x-required-scope: session
x-required-scopes:
- session
x-scope-policy: required
x-billing-code: null
x-offering: cua
x-feature-flag: PUBLIC_CUA_API_ENABLED
x-idempotency: none
/v1/sessions/{session_id}:
parameters:
- $ref: '#/components/parameters/SessionId'
get:
tags:
- sessions
operationId: getSession
summary: Get session info
security:
- apiKey: []
- bearerAuth: []
responses:
'200':
description: Session info.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionInfoResponse'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
X-Coasty-Key-Kind:
$ref: '#/components/headers/KeyKind'
X-Coasty-Test-Mode:
$ref: '#/components/headers/TestMode'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateReset'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateReset'
Idempotency-Replayed:
$ref: '#/components/headers/IdempotencyReplayed'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
x-auth-mode: api_key
x-required-scope: session
x-required-scopes:
- session
x-scope-policy: required
x-billing-code: null
x-offering: cua
x-feature-flag: PUBLIC_CUA_API_ENABLED
x-idempotency: none
delete:
tags:
- sessions
operationId: deleteSession
summary: Delete a session
security:
- apiKey: []
- bearerAuth: []
responses:
'200':
description: Deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionMutationResponse'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
X-Coasty-Key-Kind:
$ref: '#/components/headers/KeyKind'
X-Coasty-Test-Mode:
$ref: '#/components/headers/TestMode'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateReset'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateReset'
Idempotency-Replayed:
$ref: '#/components/headers/IdempotencyReplayed'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
x-auth-mode: api_key
x-required-scope: session
x-required-scopes:
- session
x-scope-policy: required
x-billing-code: null
x-offering: cua
x-feature-flag: PUBLIC_CUA_API_ENABLED
x-idempotency: none
/v1/sessions/{session_id}/predict:
parameters:
- $ref: '#/components/parameters/SessionId'
post:
tags:
- sessions
operationId: sessionPredict
summary: Predict within an existing session
security:
- apiKey: []
- bearerAuth: []
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SessionPredictRequest'
responses:
'200':
description: Predicted actions for the next step.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionPredictResponse'
text/event-stream:
schema:
type: string
description: 'SSE keepalive stream ending with a JSON result event. Request with Accept: text/event-stream.'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
X-Coasty-Key-Kind:
$ref: '#/components/headers/KeyKind'
X-Coasty-Test-Mode:
$ref: '#/components/headers/TestMode'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateReset'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateReset'
Idempotency-Replayed:
$ref: '#/components/headers/IdempotencyReplayed'
X-Coasty-Idempotent-Replay:
$ref: '#/components/headers/IdempotentReplay'
Idempotency-Status:
$ref: '#/components/headers/IdempotencyStatus'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
x-auth-mode: api_key
x-required-scope: session
x-required-scopes:
- session
x-scope-policy: required
x-billing-code: session_predict
x-offering: cua
x-feature-flag: PUBLIC_CUA_API_ENABLED
x-idempotency: reserve-and-replay
/v1/sessions/{session_id}/reset:
parameters:
- $ref: '#/components/parameters/SessionId'
post:
tags:
- sessions
operationId: resetSession
summary: Reset session state
security:
- apiKey: []
- bearerAuth: []
responses:
'200':
description: Reset.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionMutationResponse'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
X-Coasty-Key-Kind:
$ref: '#/components/headers/KeyKind'
X-Coasty-Test-Mode:
$ref: '#/components/headers/TestMode'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Remaining:
$ref: '#/components/headers/CreditsRemaining'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateReset'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateReset'
Idempotency-Replayed:
$ref: '#/components/headers/IdempotencyReplayed'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
x-auth-mode: api_key
x-required-scope: session
x-required-scopes:
- session
x-scope-policy: required
x-billing-code: null
x-offering: cua
x-feature-flag: PUBLIC_CUA_API_ENABLED
x-idempotency: none
components:
responses:
RateLimited:
description: Rate or concurrency limit exceeded.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: RATE_LIMIT_EXCEEDED
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
UnprocessableEntity:
description: The JSON shape is valid but one or more values violate the endpoint contract.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: VALIDATION_ERROR
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
Unauthorized:
description: 'Missing, invalid, or revoked API key. Pass `X-API-Key: sk-coasty-live-...` (or test).'
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: INVALID_API_KEY
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
Forbidden:
description: API key lacks the required scope or tier-feature is unavailable on the caller's plan.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: INSUFFICIENT_SCOPE
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
BadRequest:
description: Invalid request body or parameters.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: VALIDATION_ERROR
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
Conflict:
description: The resource state conflicts with this operation.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: CONFLICT
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
GatewayTimeout:
description: An upstream dependency timed out.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: UPSTREAM_TIMEOUT
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
PayloadTooLarge:
description: The request body exceeds the endpoint limit.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: PAYLOAD_TOO_LARGE
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
ServerError:
description: Unexpected server error. Retry with exponential backoff.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: INTERNAL_ERROR
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
NotFound:
description: Resource not found in this key's namespace.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: NOT_FOUND
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
ServiceUnavailable:
description: A required service is temporarily unavailable.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: SERVICE_UNAVAILABLE
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
BadGateway:
description: An upstream dependency returned an invalid response.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: UPSTREAM_ERROR
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
PaymentRequired:
description: Insufficient credits to perform the operation. Top up via /credits or upgrade subscription.
headers:
X-Coasty-Request-Id:
$ref: '#/components/headers/CoastyRequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Credits-Charged:
$ref: '#/components/headers/CreditsCharged'
X-Credits-Refunded:
$ref: '#/components/headers/CreditsRefunded'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
example:
error:
code: INSUFFICIENT_CREDITS
message: An error occurred. See `code` for details.
type: validation_error
request_id: req_a1b2c3d4e5f6
retryable: false
retry_with_same_idempotency_key: false
headers:
RateRemaining:
description: Requests remaining in the current window.
schema:
type: integer
minimum: 0
RateLimit:
description: Effective request limit for the current window.
schema:
type: integer
minimum: 0
CoastyRequestId:
description: Coasty correlation identifier for this request.
schema:
type: string
KeyKind:
description: Whether the authenticated key is live or test.
schema:
type: string
enum:
- live
- test
- legacy
TestMode:
description: true when the request executed against the sandbox namespace.
schema:
type: boolean
RetryAfter:
description: Seconds to wait before retrying. Present on retryable back-pressure and transient failures.
schema:
type: integer
minimum: 0
CreditsRefunded:
description: Credits durably returned to the wallet after a failed billed operatio
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coasty/refs/heads/main/openapi/coasty-sessions-api-openapi.yml