Accept a proposal
Applies the proposal as the person accepting it, through the same change a person makes (category rules: saved, then the source replayed; a mapping: confirmed, then replayed; a source: created), and needs that change's permission too (sources:write). A proposal not waiting for a person answers 409; one that no longer applies (the source paused or busy) answers 409 and stays proposed. A triage note has nothing to apply: accepting one answers 409; reject dismisses it.
- Scopes
agent:write - Rate classwrite
- Idempotency-Key required
/v1/proposals/{id}/acceptApplies the proposal as the person accepting it, through the same change a person makes (category rules: saved, then the source replayed; a mapping: confirmed, then replayed; a source: created), and needs that change's permission too (sources:write). A proposal not waiting for a person answers 409; one that no longer applies (the source paused or busy) answers 409 and stays proposed. A triage note has nothing to apply: accepting one answers 409; reject dismisses it.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Path Parameters
Proposal (a change an AI agent proposes, proved before anyone sees it) ID
^prp_[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"
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"
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/proposals/string/accept" \ -H "Idempotency-Key: string"{ "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"}Search the vendor directory GET
Brands on FurniOps, by name: every vendor profile with its website domain, whether the brand verified it, and its catalogue's ID (the `catalogue` products carry). Search by part of a name (`q`, spelling-tolerant) or by website domain. No profile names the organisation that holds it.
Retrieve a proposal GET
One proposal: what it would change, its proof, and who decided it.