This document describes the current SDK-facing runtime contract.
All SDK requests use:
Authorization: Bearer rk_<your_key>Session-scoped runtime calls also use:
X-Resolvekit-Chat-Capability: <chat_capability_token>Creates or reuses a chat session.
Key request fields:
device_idclientllm_contextavailable_function_nameslocalepreferred_localesreuse_active_session
Key response fields:
idevents_urlchat_capability_tokenreused_active_sessionchat_titlemessage_placeholderinitial_message
The SDK keeps one long-lived event stream open for the session.
- media type:
text/event-stream - optional query:
cursor=<last_event_id> - stream replay resumes from the first event after the supplied cursor
Each server event includes:
- SSE
idheader for resume cursor - event type
- JSON envelope containing
event_id,turn_id,request_id,timestamp,type, andpayload
Event types:
assistant_text_deltatool_call_requestturn_completeerror
Submit a user turn asynchronously.
Request body:
{
"text": "Turn on the bedroom lights",
"request_id": "client-generated-id",
"locale": "en"
}Response:
{
"turn_id": "server-turn-id",
"request_id": "client-generated-id",
"status": "accepted"
}Rules:
request_idis required and must be client-generated.- repeated submits with the same
request_idare idempotent. - server output arrives on the session event stream, not on the POST response.
Submit an SDK tool result.
Request body:
{
"turn_id": "server-turn-id",
"idempotency_key": "client-generated-or-call-based-key",
"call_id": "tool-call-id",
"status": "success",
"result": {"ok": true},
"error": null
}Rules:
- repeated submits with the same
turn_id+call_id+idempotency_keyare deduplicated. - the endpoint returns
404if there is no pending tool call for thatcall_id.
Returns persisted session messages for reconnect or reopen flows.
Returns locale-aware chat_title, message_placeholder, and initial_message.
Recommended SDK lifecycle:
GET /v1/sdk/compatGET /v1/sdk/chat-themePUT /v1/functions/bulkPOST /v1/sessionsGET /v1/sessions/{id}/eventsPOST /v1/sessions/{id}/messagesPOST /v1/sessions/{id}/tool-resultsas needed
Reconnect behavior:
- reopen
GET /eventswith the last seen cursor - keep the same
session_id - keep the same
chat_capability_tokenuntil session expiry - treat turn continuity as application-level replay, not socket continuity