Full-featured first-party API with block-based payloads, runs, tool loops, and live audio.
Key Concepts
Sessions, context modes, calls, runs, data layer access, and assessments define the shared gateway model across native and compatibility API shapes.
Sessions
universalEvery call — regardless of API shape — creates a session. Sessions are the universal continuity handle, grouping lineage, history, and observability.
Context Modes
default: statefulStateful keeps context server-side and appends new input. Stateless is caller-supplied full-context execution — durable, session-bound, and explicit.
Calls
all shapesA call is one logical model invocation. Every API shape supports calls.
Runs
native onlyA run is an orchestrated execution over one or more calls — with tool loops, checkpoints, interrupt, and resume.
Data Layer
native onlyStructured queries over sessions, runs, and calls via explicit query sources, saved views, declared facets, and exports.
Assessments
native onlyMachine quality scores attached to runs and calls, plus feedback signals and assessment profiles.
Base URL
All API shapes route through https://api.rhone.dev with shape-specific base paths.
https://api.rhone.dev/v1Authentication
All requests require a bearer token in the Authorization header.
1Authorization: Bearer rhone_sk_...Endpoints
The native VAI surface includes sessions, calls, runs, tools, data layer, annotations, assessments, hosted history, and admin endpoints. Compatibility surfaces expose provider-shaped call endpoints plus shared gateway websocket transport.
Sessions
/v1/sessionsCreate a new session/v1/sessions/{id}Get session details/v1/sessions/{id}Update session defaults/v1/sessions/{id}:set-instructionsSet session-scoped instructions/v1/sessions/{id}:set-phaseSet the active phase/v1/sessions/{id}:branchBranch a session (with optional transforms)/v1/sessions/{id}:pausePause a session/v1/sessions/{id}:resumeResume a paused session/v1/sessions/{id}:snapshotCreate a named snapshotCalls
/v1/callsCreate a blocking call/v1/calls:streamCreate a streaming call (SSE)/v1/calls/{id}Get call detailsRuns
/v1/runsCreate a blocking run/v1/runs:streamCreate a streaming run (SSE)/v1/runs/{id}Get run details/v1/runs/{id}:interruptInterrupt a running execution/v1/runs/{id}:resumeResume an interrupted run/v1/runs/{id}:cancelCancel a runTool Execution & Checkpoints
/v1/tool-executions/{id}:resultSubmit a tool result/v1/tool-executions/{id}Get tool execution details/v1/checkpoints/{id}:resolveResolve a checkpoint gate/v1/checkpoints/{id}:cancelCancel a checkpointBrowser
/v1/sessions/{id}/browserGet the session browser binding/v1/sessions/{id}/browser/tabsList browser tabs for a session/v1/sessions/{id}:enable-browserEnable a hosted or client-local browser binding/v1/sessions/{id}:disable-browserDisable browser binding and optionally schedule provider cleanup/v1/sessions/{id}/browser:handoffCreate a hosted browser handoff, optionally checkpoint-backed/v1/sessions/{id}/browser:handoff:revokeRevoke the latest active browser handoffWebSocket & Live Audio
/v1/wsNative WebSocket transport/v1/liveLive audio WebSocketSession Reads
/v1/sessionsList sessions/v1/sessions/{id}/timelineSession history projection — all committed events/v1/sessions/{id}/blocksSession continuity projection — active head/v1/sessions/{id}/instructionsCurrent session instruction set/v1/sessions/{id}/runsList runs in session/v1/sessions/{id}/lineageSession lineage and branch graph/v1/runs/{id}/timelineRun timeline with tool activity/v1/runs/{id}/blocksAll durable blocks for a run/v1/runs/{id}/effective-requestResolved request after routingData Layer
/v1/data/sourcesList query sources/v1/data/sources/{source}Get source field catalog/v1/data/sources/{source}/queryStructured query over a source/v1/data/sources/{source}/aggregateAggregate report over a source/v1/data/viewsCreate a saved view/v1/data/views/{id}/resultsGet saved view results/v1/data/facetsDeclare an indexed metadata facet/v1/data/exportsCreate a data export/v1/data/sinksCreate a data sink for continuous delivery/v1/data/subscriptionsSubscribe to view/source changesAnnotations
/v1/annotationsCreate an annotation (label, review, note)/v1/annotationsList annotations by target/v1/annotations/{id}Get annotation details/v1/annotations/{id}Update annotation (with if_revision)/v1/annotations/{id}Delete an annotationAssessments & Feedback
/v1/runs/{id}/assessmentsAssessment bundles for a run/v1/runs/{id}/feedbackFeedback signals for a run/v1/sessions/{id}/assessment-rollupAggregate assessment summary/v1/feedback-signalsSubmit user feedback (thumbs, rating)/v1/evals/assessments:importImport external assessment scores/v1/evals/profilesCreate an assessment profile/v1/evals/profilesList assessment profiles/v1/evals/experimentsCreate a comparison experiment/v1/evals/cost-summaryJudge model spend summaryHosted History
/v1/history/sessionsList hosted session summaries/v1/history/sessions:searchFull-text search over history/v1/history/sessions/{id}Hosted session exact detail/v1/history/sessions/{id}/entriesHosted entry window for UI renderingCompliance Admin
/v1/admin/sessions/{id}:purgePermanently delete a session (cascading)/v1/admin/blocks/{id}:redactRedact block content in placeTransport Modes
REST is the blocking path, SSE is the server-streaming path, and WebSocket provides bidirectional transport with gateway-shaped envelopes.
1curl https://api.rhone.dev/v1/calls
2 -H "Authorization: Bearer $VAI_API_KEY"
3 -H "Content-Type: application/json"The rhone Extension Object
Compatibility surfaces use a top-level rhone object in request and response bodies for gateway-specific features.
APIRhoneExtension
1The `rhone` extension object carries session continuity and context-mode metadata on compatibility surfaces.
Context Modes
Stateful execution is the default. Stateless execution is caller-supplied full-context execution and remains fully durable and session-bound.
stateful
defaultContext is maintained server-side. Each new call in a session automatically includes prior history. Only send the new message — the gateway appends it to the active chain.
stateless
Caller-supplied full-context execution. Send full context with every request. The gateway executes from exactly your supplied payload and rebases the active head.
Stateful Continuation
When you provide a session_id, subsequent calls are stateful by default. You only need to send new input — the gateway has the full context.
1result, err := client.Calls.Execute(ctx, vai.CallCreateParams{
2 SessionID: vai.String("sess_123"),
3 Input: "What should I do next?",
4})Block Types
Native VAI requests and responses use typed blocks for every durable input and output.
| Type | Direction | Description |
|---|---|---|
system | input | System prompt / instructions |
input | input | User input text |
response | output | Model response text |
thinking | output | Model reasoning (when enabled) |
tool_call | output | Tool invocation request |
tool_result | input | Tool execution result |
WebSocket Protocol
All API shapes share the rhone.ws.v1 websocket subprotocol.
Subprotocols
- rhone.ws.v1 — native + compat
- vai.chain.v1 — chain-attached
- vai.live.v1 — live audio
Operation Names
- calls.create
- openai.chat_completions.create
- openai.responses.create
- anthropic.messages.create
- vertex.generate_content
Meta Events
- rhone.accepted — session + call IDs
- rhone.completed — stream done
Safety and Guardrails
Runtime safety is a first-class VAI extension exposed through capabilities.extensions.safety. It is distinct from human annotation, async assessment, and end-user feedback_signal: safety decisions are the synchronous runtime records that explain allow, warning, checkpoint, block, or quarantine outcomes.
Safety Profiles
Safety profiles are managed through:
1GET /v1/safety/profiles
2POST /v1/safety/profiles
3GET /v1/safety/profiles/{id}
4PATCH /v1/safety/profiles/{id}
5DELETE /v1/safety/profiles/{id}
Profiles support mode=enforce|monitor, stage policies, tool policies, capture policy, metadata, and versioning. Enforcement mode can alter control flow; monitor mode records decisions without blocking runtime execution.
Capture policy controls retained evidence. Default public evidence avoids raw vendor payloads and keeps refs, hashes, lengths, classifications, and optional minimal excerpts.
Safety Decisions
Safety decisions are immutable runtime attachment records. Exact reads are authoritative:
1GET /v1/safety/decisions/{id}
Attachment reads are available by parent:
1GET /v1/sessions/{id}/safety-decisions
2GET /v1/runs/{id}/safety-decisions
3GET /v1/tool-executions/{id}/safety-decisions
4GET /v1/assets/{id}/safety-decisions
5GET /v1/checkpoints/{id}/safety-decisions
When a later decision replaces an earlier active outcome, the prior decision is marked superseded and the replacement carries supersedes_id.
Checkpoints and Review
Safety uses normal checkpoint objects for human review. Resolving a safety checkpoint requires reviewer identity headers:
1X-VAI-Reviewer-ID: user_123
2X-VAI-Reviewer-Kind: human
review_note and review_labels on checkpoint resolution create review annotations tied to the checkpoint and safety decision.
Asset Quarantine and Release
Asset quarantine is represented as a safety decision with disposition quarantine at the asset admission stage. Releasing a quarantined asset requires reviewer identity and creates a follow-up allow decision plus review annotations.
Failure and Stop Semantics
Safety-controlled failures use stable stop reasons and error codes:
1safety_blocked
2safety.policy_denied
3safety.checkpoint_required
4safety.asset_quarantined
5safety.provider_unavailable
Use the safety decision attachment route first when investigating a blocked run, checkpointed tool execution, or quarantined asset.
Privacy Behavior
Safety decisions retain sanitized evidence according to capture policy. Raw prompts, raw model inputs, raw model outputs, raw tool payloads, and raw vendor moderation responses are not default public evidence. Use exact decision reads as the runtime source of truth; derived read models and query sources are for analytics.
See Safety & Guardrails for operator investigation guidance.