Retrieve a proposal
One proposal: what it would change, its proof, and who decided it.
- Scopes
agent:read - Rate classread
/v1/proposals/{id}One proposal: what it would change, its proof, and who decided 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"
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
application/problem+json
curl -X GET "https://example.com/v1/proposals/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"}Accept a proposal POST
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.
List the agents' settings GET
Each AI agent's autonomy and daily budget, and what it spent today.