Save a memory
Saves a note FurniOps AI reads at the start of every turn: plain words, one paragraph, at most 400 characters, no links, addresses, Markdown or code. scope: org shares it with every member's FurniOps AI and needs assistant_memories:write (403 otherwise). At most 25 per person and 25 per organisation (409 memory_limit). Proposed by FurniOps AI, it waits for you to approve the exact words. Expires 365 days after its last edit.
- Scopesnone
- Rate classwrite
- Idempotency-Key required
/v1/assistant/memoriesSaves a note FurniOps AI reads at the start of every turn: plain words, one paragraph, at most 400 characters, no links, addresses, Markdown or code. scope: org shares it with every member's FurniOps AI and needs assistant_memories:write (403 otherwise). At most 25 per person and 25 per organisation (409 memory_limit). Proposed by FurniOps AI, it waits for you to approve the exact words. Expires 365 days after its last edit.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Header Parameters
Dated API version; pinned per organisation on first use and overridable per request
Value in
- "2026-10-01"
- "2026-10-04"
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"
Unique key for this operation, reused on retries (24 h)
1 <= length <= 257Preview the write and change nothing: true answers the would-be response, explain a Preview (application/vnd.furniops.preview+json)
Value in
- "true"
- "explain"
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
A note to save
Response Body
application/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/memories" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "content": "string" }'{ "object": "assistant_memory", "id": "string", "scope": "person", "content": "string", "source": "person", "created_by": "string", "surface": "console", "conversation_id": "string", "tool_data_seen": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z"}Start a conversation POST
Starts an empty conversation in this organisation and mode, which it keeps for good; its first turn names it when no title is given.
Talk to FurniOps AI POST
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.