Create Schedule
POST
/schedules
const url = 'https://example.com/schedules';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"account":"example","amount":1,"amount_type":"fixed","autopost_policy":"auto_post","category":"example","counterparty_account":"example","dtstart":"2026-04-15","estimate_basis":"last","name":"example","note":"example","payee":"example","propose":false,"rrule":"example"}'};
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/schedules \ --header 'Content-Type: application/json' \ --data '{ "account": "example", "amount": 1, "amount_type": "fixed", "autopost_policy": "auto_post", "category": "example", "counterparty_account": "example", "dtstart": "2026-04-15", "estimate_basis": "last", "name": "example", "note": "example", "payee": "example", "propose": false, "rrule": "example" }'Create a bill/income schedule, active. With propose=true it lands
a SUGGESTION instead (status='proposed', suggestion_id) that the
user’s decision turns into the schedule. A proposal for a payee or
counterparty the account already has a schedule for is refused (422,
naming that schedule).
Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
ScheduleCreate
object
account
required
Account
Account id or path
string
amount_type
Amount Type
string
autopost_policy
Autopost Policy
string
name
required
Name
string
propose
Propose
Land a suggestion in the inbox for the user to decide instead of creating the schedule; for an agent acting on its own initiative (#436)
boolean
rrule
required
Rrule
RFC 5545 RRULE, e.g. FREQ=MONTHLY;BYMONTHDAY=19
string
Responses
Section titled “Responses”Successful Response
Media typeapplication/json
Any of:
ScheduleOut
object
account_id
required
Account Id
string format: uuid
amount_type
required
Amount Type
string
autopost_policy
required
Autopost Policy
string
currency
required
Currency
string
dtstart
required
Dtstart
string format: date
id
required
Id
string format: uuid
name
required
Name
string
rrule
required
Rrule
string
source
required
Source
string
status
required
Status
string
SuggestionRef
What a propose=true create returns (#233, #436): the suggestion the
draft landed in, not a schedule. status='proposed' keeps the old
contract readable; suggestion_id is the row to decide on.
object
headline
required
Headline
string
id
required
Id
string format: uuid
kind
Kind
string
source
required
Source
string
status
Status
string
suggestion_id
required
Suggestion Id
string format: uuid
Example
{ "kind": "schedule", "status": "proposed"}Validation Error
Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationErrorobject
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" } ]}