Decide
const url = 'https://example.com/suggestions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/decide';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"decision":"accept","edits":{},"note":"example","reject_scope":"exact","snooze_until":"2026-04-15"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/suggestions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/decide \ --header 'Content-Type: application/json' \ --data '{ "decision": "accept", "edits": {}, "note": "example", "reject_scope": "exact", "snooze_until": "2026-04-15" }'Accept / edit_then_accept apply the draft: a schedule suggestion
creates the schedule (active, materialized); a transfer_link suggestion
creates the rule as a DRAFT and returns projected_links — activate it
through POST /rules/{rule_id}/state with that count confirmed. reject is
durable and scoped; snooze hides it until a date. Nothing ever
auto-accepts, and nothing here activates a rule. A match suggestion’s
accept confirms the proposal (marking its bank row reviewed) and reject
rejects it for good; it has nothing to edit. If its proposal is already
gone the suggestion is withdrawn and the call answers 422.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
Exact = just this suggestion. counterparty = never suggest this (account, counterparty/payee) again — for a transfer_link, this account pair with any payee. A match rejects exactly.
Responses
Section titled “Responses”Successful Response
object
object
object
object
object
The typed draft accept applies unchanged. schedule: name, account, counterparty_account, rrule, dtstart, amount_type, amount, estimate_basis, payee, category, autopost_policy. transfer_link: from_account, to_account, payee, payee_id, amount_exact, window_days, effective_from. match: expected_id, posted_id, account, label, expected_date, expected_amount, posted_date, posted_amount, variance (posted - expected).
object
object
Schedule: a recurring bill or transfer to expect (draft = a schedule). transfer_link: proposed by a manual transfer confirm (draft = a transfer_link rule for that account pair, scoped to the payee and its aliases). match: an open match proposal pairing an expected row with a bank row (draft = the pair; accept confirms it, reject rejects it for good).
Detected | agent | account_added | confirm
Open | accepted | rejected | withdrawn (closed by the system: the match proposal it mirrored was rescinded, carried or purged)
Example
{ "suggestion": { "kind": "schedule" }}Validation Error
object
object
object
Example generated
{ "detail": [ { "ctx": {}, "input": "example", "loc": [ "example" ], "msg": "example", "type": "example" } ]}