Skip to main content
POST
Navigate
Send a plain-text message and a unique clientMessageId. Add threadId to continue an existing thread. type: "turn" is optional and remains accepted for compatibility. Navigate chooses the behavior for you. For explicit control, use Search, Live Search, Route, or Execute. Answers and clarification happen within the thread. To request a proposal, say so in your message. Execution still requires applicable approvals.

Continue a thread

Save the returned threadId and include it with each follow-up. Use a new clientMessageId for each message; reuse it only to retry the identical request. Read progress with GET /v3/threads/{threadId}. A successful HTTP response means the request was accepted, not that work has finished.

Context and files

Use one context object: text for notes, constraints, budgets, or deadlines; files for PDFs and images. Each file has name, mimeType, and base64 data. There is no separate attachments field. Pass Markdown contents as text, not a local file path.

Personalization

  • user_memory: Markdown preferences for this request, up to 4,000 characters.
  • userId: Reuse preferences previously supplied for this user. With an application credential, this is your own application’s user ID. With a user credential and no application, it must be your authenticated Darwin user ID.
You can send either field. Send both to save preferences for later requests with that userId; empty user_memory clears saved preferences. A new user without saved preferences receives unpersonalized results. Guest requests can supply user_memory but cannot look up userId. Preferences never grant execution or payment permission. applicationId is inferred from your credential. Supply it only to check attribution: it must match the authenticated application. It cannot select another application. Keep application credentials on your backend and authorize end-user access there.

Guest access

When guest access is enabled, a first turn returns a private conversationToken. Send it as X-Assist-Token on follow-ups and reads. Tokens expire after seven days. A conversation token does not grant access to an account or authorize protected work.

Compatibility

Existing object-message requests, assistId, externalUserId, planOnly, typed context arrays, and legacy responses remain supported. New integrations should use the fields above. Advanced lifecycle controls remain in the Assist reference.

Authorizations

x-api-key
string
header
required

Headers

X-Assist-Token
string
Idempotency-Key
string

Body

application/json
clientMessageId
string
required

A unique ID for this message. Reuse it only when retrying the same request.

Required string length: 1 - 200
Pattern: ^[A-Za-z0-9][A-Za-z0-9_.:-]*$
message
string
required

What you want to find, do, or discuss.

Required string length: 1 - 20000
type
string
default:turn
Allowed value: "turn"
threadId
string

Omit to start a thread; pass the returned threadId to continue.

Pattern: ^asst_[a-f0-9-]{36}$
conversationId
string

Omit to start a conversation; return this ID on follow-ups.

Pattern: ^asst_[a-f0-9-]{36}$
mode
enum<string>

Omit for Auto. Search returns indexed matches; live_search asks providers for current task fit; execute coordinates work; route opens primed agent threads for direct interaction; chat discusses. Approvals still apply.

Available options:
search,
live_search,
execute,
route,
chat
context
object

Owner-reviewed provider-contact consent or a control for an existing durable session. Omit to review indexed choices without contacting providers.

memoryAgentId
string

Read memory for an account agent you belong to. Does not change the acting identity. Cannot be combined with userId or user_memory.

Required string length: 1 - 200
Pattern: ^[A-Za-z0-9][A-Za-z0-9_.:-]*$
userId
string

Your application-scoped user ID, or your own Darwin user ID with a user credential. Reuses memory previously supplied for this user; never grants account access.

Required string length: 1 - 200
Pattern: ^[A-Za-z0-9][A-Za-z0-9_.:-]*$
user_memory
string

Markdown preferences to personalize this request. Read a .md file and pass its text, not a path or URL. With userId, saves these preferences for later requests; empty text clears them.

Maximum string length: 4000
applicationId
string

Optional attribution check. Must match the application attached to your API credential; inferred when omitted.

Required string length: 1 - 200
Pattern: ^[A-Za-z0-9][A-Za-z0-9_.:-]*$

Response

Conversation state. Acceptance is not proof of completed work.

conversationId
string
required
Pattern: ^asst_[a-f0-9-]{36}$
status
enum<string>
required
Available options:
planning,
ready,
running,
paused,
completed,
cancelled
goal
string
required
messages
object[]
required
revisions
object[]
required
Maximum array length: 32
latestRevisionId
string | null
required
Pattern: ^arev_[a-f0-9-]{36}$
quote
object | null
required
funding
object | null
required
run
object | null
required
previousRuns
object[]
required
Maximum array length: 32
createdAt
string<date-time>
required
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
updatedAt
string<date-time>
required
Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
threadId
string
Pattern: ^asst_[a-f0-9-]{36}$
conversation
object
conversationToken
string

Private guest token. Send as X-Assist-Token for subsequent requests.

Last modified on November 1, 2026