FurniOpsDocs
API referenceAssistant

Talk to FurniOps AI

Sends your next message, or your decisions on the pending approvals (every one of them), and streams FurniOps AI's answer as the AI SDK UI message stream. It acts as you, with your own permissions: reads run, and every change waits for your approval with its preview. Security operations are never run; it says what to do. One turn at a time per conversation (409), at most 20 steps, 25 tool calls and 120 seconds, in the conversation's mode. Refused when Ask AI is not in the plan (403 feature_unavailable), is off for the organisation or for you, or your role may not use it (403 permission_denied), no model is routed or AI is switched off (503), the month's ai_tokens are used up and no credit may be spent (429 quota_exceeded), or today's allowance is spent with no FurniOps AI credit to spend, or your personal budget is (429 ai_budget_reached). Model calls are paid from today's allowance first, then from the organisation's FurniOps AI credit when it is switched on (D-289). Changes are recorded in the audit log as Ask AI for you, naming the conversation.

POST/v1/assistant/conversations/{conversation}/turns

Sends your next message, or your decisions on the pending approvals (every one of them), and streams FurniOps AI's answer as the AI SDK UI message stream. It acts as you, with your own permissions: reads run, and every change waits for your approval with its preview. Security operations are never run; it says what to do. One turn at a time per conversation (409), at most 20 steps, 25 tool calls and 120 seconds, in the conversation's mode. Refused when Ask AI is not in the plan (403 feature_unavailable), is off for the organisation or for you, or your role may not use it (403 permission_denied), no model is routed or AI is switched off (503), the month's ai_tokens are used up and no credit may be spent (429 quota_exceeded), or today's allowance is spent with no FurniOps AI credit to spend, or your personal budget is (429 ai_budget_reached). Model calls are paid from today's allowance first, then from the organisation's FurniOps AI credit when it is switched on (D-289). Changes are recorded in the audit log as Ask AI for you, naming the conversation.

Authorization

apiKey
AuthorizationBearer <token>

An API key (fo_live_… / fo_test_…) as a bearer token

In: header

Path Parameters

conversation*string

Assistant conversation (a person's conversation with FurniOps AI) ID

Match^asc_[0-9A-Za-z]{22}$

Header Parameters

FurniOps-Version?string

Dated API version; pinned per organisation on first use and overridable per request

Value in

  • "2026-10-01"
  • "2026-10-04"
FurniOps-Mode?string

The data the request acts on: test is the organisation's sandbox. An OAuth token picks it (live by default); an API key's mode is fixed, and naming the other one is refused

Value in

  • "live"
  • "test"
FurniOps-Dry-Run?string

This operation cannot be previewed (It changes only your own conversations): 422 preview_unsupported, nothing changes

Value in

  • "true"
  • "explain"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Your next message, or your decisions on the pending approvals (all of them: a step's changes are one plan)

Your next message, or your decisions on the pending approvals (all of them: a step's changes are one plan)

Response Body

text/event-stream

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X POST "https://example.com/v1/assistant/conversations/string/turns" \  -H "Content-Type: application/json" \  -d '{    "text": "string"  }'
"string"