List proposals
The AI agents' proposals for the organisation, newest first, each with the proof it passed. Those waiting for a person by default.
- Scopes
agent:read - Rate classread
/v1/proposalsThe AI agents' proposals for the organisation, newest first, each with the proof it passed. Those waiting for a person by default.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Query Parameters
Page size
1 <= value <= 10020Opaque position returned by a previous page
^[A-Za-z0-9_-]{1,512}$Opaque position returned by a previous page
^[A-Za-z0-9_-]{1,512}$Proposals of this status; those waiting for a person by default
"proposed"Value in
- "shadow"
- "proposed"
- "applied"
- "rejected"
- "failed"
- "superseded"
Only this agent's
Value in
- "categories"
- "repair"
- "onboarding"
- "triage"
Only those about this source
^src_[0-9A-Za-z]{22}$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"
ETag of a cached representation; a match returns 304
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
curl -X GET "https://example.com/v1/proposals"{ "object": "list", "data": [ { "object": "proposal", "id": "string", "catalogue": "string", "agent": "categories", "source": "string", "status": "shadow", "risk": "low", "summary": "string", "payload": { "kind": "category_rules", "rules": [ { "path": [ "string" ], "category": "string", "reason": "string" } ] }, "evidence": { "kind": "category_rules", "products": 0, "filed_before": 0, "filed_after": 0, "snapshot": "2019-08-24T14:15:22Z" }, "model": "string", "cost_micros": 0, "failure": "string", "superseded_by": "string", "decided_by": { "kind": "user", "id": "string" }, "created_at": "2019-08-24T14:15:22Z", "decided_at": "2019-08-24T14:15:22Z", "applied_at": "2019-08-24T14:15:22Z" } ], "has_more": true, "next_cursor": "string"}List the caller's agent tools GET
Every operation of this API the caller may call, as tools for an AI agent: name, input schema, risk class, how a write answers a preview (`FurniOps-Dry-Run`), how it is undone, and whether a person must do it or re-authenticate. Filtered by the caller's role, key scopes and organisation kind, as the API checks them; a key not made for an agent gets the reads only. Identity serves its own operations at the same path.
Reject a proposal POST
Records that the change should not be made. The agent does not propose the same change about the same thing again. A proposal not waiting for a person answers 409.