Skip to content

Decide

POST
/suggestions/{suggestion_id}/decide
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.

suggestion_id
required
Suggestion Id
string format: uuid
Media typeapplication/json
DecisionRequest
object
decision
required
Decision
string
Allowed values: accept reject snooze edit_then_accept
edits
Any of:
object
key
additional properties
any
note
Any of:
string
reject_scope
Reject Scope

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.

string
default: exact
Allowed values: exact counterparty
snooze_until
Any of:
string format: date

Successful Response

Media typeapplication/json
DecisionOut
object
match
Any of:
MatchOut
object
expected_amount
Any of:
string
expected_date
Any of:
string format: date
expected_description
Any of:
string
expected_id
required
Expected Id
string format: uuid
expected_payee
Any of:
string
id
required
Id
string format: uuid
posted_id
required
Posted Id
string format: uuid
score
required
Score
number
state
required
State
string
variance
required
Any of:
string
variance_ratio
required
Any of:
string
projected_links
Any of:
integer
rule
Any of:
RuleOut
object
action
required
Action
string
applied_count
required
Applied Count
integer
id
required
Id
string format: uuid
note
required
Any of:
string
payee_scope
Any of:
string
predicate
required
Predicate
string
priority
required
Priority
integer
state
required
State
string
type
required
Type
string
window_days
required
Any of:
integer
schedule
Any of:
ScheduleOut
object
account_id
required
Account Id
string format: uuid
amount
required
Any of:
string
amount_type
required
Amount Type
string
autopost_policy
required
Autopost Policy
string
category_path
Any of:
string
counterparty_account_id
Any of:
string format: uuid
currency
required
Currency
string
dtstart
required
Dtstart
string format: date
ended_at
required
Any of:
string format: date-time
estimate_basis
required
Any of:
string
id
required
Id
string format: uuid
name
required
Name
string
next_due
required
Any of:
string format: date
rrule
required
Rrule
string
source
required
Source
string
status
required
Status
string
suggestion
required
SuggestionOut
object
confidence
required
Any of:
string
created_at
required
Created At
string
decided_at
required
Any of:
string
draft
required
Draft

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
key
additional properties
any
evidence
Any of:
object
key
additional properties
any
evidence_summary
required
Evidence Summary
object
key
additional properties
any
headline
required
Headline
string
id
required
Id
string format: uuid
kind
required
Kind

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).

string
Allowed values: schedule transfer_link match
reject_scope
required
Any of:
string
result_entity_id
required
Any of:
string format: uuid
result_entity_type
required
Any of:
string
seen_count
required
Seen Count
integer
snooze_until
required
Any of:
string format: date
source
required
Source

Detected | agent | account_added | confirm

string
status
required
Status

Open | accepted | rejected | withdrawn (closed by the system: the match proposal it mirrored was rescinded, carried or purged)

string

Example

{
"suggestion": {
"kind": "schedule"
}
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
ctx
Context
object
input
Input
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string

Example generated

{
"detail": [
{
"ctx": {},
"input": "example",
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}