Developers
API reference

Schedules

get/v1/schedules

List schedules

schedules.listread tokenidempotent

The ledger's standing orders, newest first, each with its last run. Amounts are in the ledger's base currency.

Parameters

limit
integer · query
Page size, 1–200.
cursor
string | null · query
The next_cursor of the previous page.
X-Organization-Id
string | null · header

Returns 200 · ScheduleList

data
array of Schedule · required
has_more
boolean · required
next_cursor
string | null · required
Example
curl -X GET "https://api.lumaledger.app/v1/schedules" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN"
post/v1/schedules

Create a schedule

schedules.createwrite tokenidempotent

Set up a standing order. Its first period ends on next_run_on, and every period posts once, by itself, on the day it ends. Send an Idempotency-Key so a retry cannot create it twice.

Parameters

Idempotency-Key
string | null · header
Any unique string (a UUID is ideal). A retry with the same key returns the first attempt's response instead of doing the work twice. Keys are kept for 24 hours.
X-Organization-Id
string | null · header

Body · ScheduleInput

amount
string | null
The amount for fixed, or the payment for amortized. Decimal string. Pattern: ^\d{1,12}(\.\d{1,2})?$.
anchor_day
integer | null
The day of the month a period ends on, 1–28, or -1 for the last day. -1–28.
annual_rate
string | null
For interest: the annual rate in percent, as a decimal string ("6.5"). Pattern: ^\d{1,3}(\.\d{1,4})?$.
cadence
string · required
daily, weekly, monthly, quarterly, annually. Pattern: ^(daily|weekly|monthly|quarterly|annually)$.
computation
string · required
fixed, simple_interest, amortized. Pattern: ^(fixed|simple_interest|amortized)$.
day_count
string
act365, act360, thirty360. Pattern: ^(act365|act360|thirty360)$. Default: "act365".
end_date
date | null
escrow_amount
string | null
Decimal string. Pattern: ^\d{1,12}(\.\d{1,2})?$.
legs
object · required
Role → account id (see accounts.list).
name
string · required
principal_account_id
integer | null
For interest: the balance it is computed on.
start_date
date | null
Defaults to today.

Returns 201 · Schedule

amount
Money | null · required
The fixed amount, or the loan payment for amortized.
anchor_day
integer | null · required
The day of the month a period ends on (1–28, or -1 for the last day); null follows the start date.
annual_rate
string | null · required
The annual interest rate, in percent, as a decimal string.
cadence
string · required
daily, weekly, monthly, quarterly, annually.
computation
string · required
How each period's amount is found: fixed, simple_interest, amortized.
day_count
string · required
How interest counts days: act365, act360, thirty360.
end_date
date | null · required
escrow_amount
Money | null · required
The part of an amortized payment that goes to escrow.
id
integer · required
last_run
ScheduleRun | null · required
legs
object · required
The accounts it posts to, by role (debit, credit, interest_expense, interest_payable, payment_source, principal, escrow) → account id.
name
string · required
next_run_on
date · required
When the next period ends and posts.
principal_account_id
integer | null · required
The balance interest is computed on.
start_date
date · required
status
string · required
active, paused.
Example
curl -X POST "https://api.lumaledger.app/v1/schedules" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "cadence": "…",
    "computation": "…",
    "legs": "…",
    "name": "…"
  }'
delete/v1/schedules/{schedule_id}

Delete a schedule

schedules.deletewrite tokendestructiveidempotent

Delete a standing order. What it already posted stays in the ledger.

Parameters

schedule_id
integer · path · required
X-Organization-Id
string | null · header

Returns 204 with no body.

Example
curl -X DELETE "https://api.lumaledger.app/v1/schedules/{schedule_id}" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN"
get/v1/schedules/{schedule_id}

Get a schedule

schedules.getread tokenidempotent

One standing order by its id.

Parameters

schedule_id
integer · path · required
X-Organization-Id
string | null · header

Returns 200 · Schedule

amount
Money | null · required
The fixed amount, or the loan payment for amortized.
anchor_day
integer | null · required
The day of the month a period ends on (1–28, or -1 for the last day); null follows the start date.
annual_rate
string | null · required
The annual interest rate, in percent, as a decimal string.
cadence
string · required
daily, weekly, monthly, quarterly, annually.
computation
string · required
How each period's amount is found: fixed, simple_interest, amortized.
day_count
string · required
How interest counts days: act365, act360, thirty360.
end_date
date | null · required
escrow_amount
Money | null · required
The part of an amortized payment that goes to escrow.
id
integer · required
last_run
ScheduleRun | null · required
legs
object · required
The accounts it posts to, by role (debit, credit, interest_expense, interest_payable, payment_source, principal, escrow) → account id.
name
string · required
next_run_on
date · required
When the next period ends and posts.
principal_account_id
integer | null · required
The balance interest is computed on.
start_date
date · required
status
string · required
active, paused.
Example
curl -X GET "https://api.lumaledger.app/v1/schedules/{schedule_id}" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN"
patch/v1/schedules/{schedule_id}

Update a schedule

schedules.updatewrite tokenidempotent

Rename a standing order, or pause or resume it.

Parameters

schedule_id
integer · path · required
X-Organization-Id
string | null · header

Body · ScheduleChange

name
string | null
status
string | null
paused stops it; active resumes it from the next period after today (missed periods are not posted). Pattern: ^(active|paused)$.

Returns 200 · Schedule

amount
Money | null · required
The fixed amount, or the loan payment for amortized.
anchor_day
integer | null · required
The day of the month a period ends on (1–28, or -1 for the last day); null follows the start date.
annual_rate
string | null · required
The annual interest rate, in percent, as a decimal string.
cadence
string · required
daily, weekly, monthly, quarterly, annually.
computation
string · required
How each period's amount is found: fixed, simple_interest, amortized.
day_count
string · required
How interest counts days: act365, act360, thirty360.
end_date
date | null · required
escrow_amount
Money | null · required
The part of an amortized payment that goes to escrow.
id
integer · required
last_run
ScheduleRun | null · required
legs
object · required
The accounts it posts to, by role (debit, credit, interest_expense, interest_payable, payment_source, principal, escrow) → account id.
name
string · required
next_run_on
date · required
When the next period ends and posts.
principal_account_id
integer | null · required
The balance interest is computed on.
start_date
date · required
status
string · required
active, paused.
Example
curl -X PATCH "https://api.lumaledger.app/v1/schedules/{schedule_id}" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
get/v1/schedules/{schedule_id}/runs

List a schedule's runs

schedule_runs.listread tokenidempotent

Every period a schedule has run for, latest first, with what each posted.

Parameters

schedule_id
integer · path · required
limit
integer · query
Page size, 1–200.
cursor
string | null · query
The next_cursor of the previous page.
X-Organization-Id
string | null · header

Returns 200 · ScheduleRunList

data
array of ScheduleRun · required
has_more
boolean · required
next_cursor
string | null · required
Example
curl -X GET "https://api.lumaledger.app/v1/schedules/{schedule_id}/runs" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN"
post/v1/schedules/run

Post what schedules owe now

schedules.runwrite tokenidempotent

Post every period that is due now, without waiting for the daily run. Answers 202 with a Job (kind run_schedules); its result: posted, the number of periods posted. A period posts once, however often this runs.

Parameters

Idempotency-Key
string | null · header
Any unique string (a UUID is ideal). A retry with the same key returns the first attempt's response instead of doing the work twice. Keys are kept for 24 hours.
X-Organization-Id
string | null · header

Returns 202 · Job

created_at
datetime · required
error
JobError | null · required
Why it failed, once failed.
finished_at
datetime | null · required
id
integer · required
kind
string · required
What the job does: import, categorize, generate_journals, reconcile, run_schedules, plaid_sync or rocket_money_import.
result
object | null · required
What the work produced, once succeeded. Its fields depend on kind and are listed on the operation that started it. Counts are integers.
status
string · required
queued, running, succeeded or failed.
Example
curl -X POST "https://api.lumaledger.app/v1/schedules/run" \
  -H "Authorization: Bearer $LUMALEDGER_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

Objects

Job

Work that outlives the request that started it. Poll jobs.get until status is succeeded or failed.

Fields

created_at
datetime · required
error
JobError | null · required
Why it failed, once failed.
finished_at
datetime | null · required
id
integer · required
kind
string · required
What the job does: import, categorize, generate_journals, reconcile, run_schedules, plaid_sync or rocket_money_import.
result
object | null · required
What the work produced, once succeeded. Its fields depend on kind and are listed on the operation that started it. Counts are integers.
status
string · required
queued, running, succeeded or failed.

JobError

Fields

code
string · required
Stable error code, as in the error envelope.
message
string · required
For people, in the request's language. Never match on it.

Money

An amount and its currency. `amount` is a base-10 string with two decimal places and an optional leading minus sign. Parse it with a decimal type, not a float.

Fields

amount
string · required
Pattern: ^-?\d+\.\d{2}$.
currency
string · required
ISO 4217 code. Pattern: ^[A-Z]{3}$.

Schedule

A standing order: an entry the ledger posts every period.

Fields

amount
Money | null · required
The fixed amount, or the loan payment for amortized.
anchor_day
integer | null · required
The day of the month a period ends on (1–28, or -1 for the last day); null follows the start date.
annual_rate
string | null · required
The annual interest rate, in percent, as a decimal string.
cadence
string · required
daily, weekly, monthly, quarterly, annually.
computation
string · required
How each period's amount is found: fixed, simple_interest, amortized.
day_count
string · required
How interest counts days: act365, act360, thirty360.
end_date
date | null · required
escrow_amount
Money | null · required
The part of an amortized payment that goes to escrow.
id
integer · required
last_run
ScheduleRun | null · required
legs
object · required
The accounts it posts to, by role (debit, credit, interest_expense, interest_payable, payment_source, principal, escrow) → account id.
name
string · required
next_run_on
date · required
When the next period ends and posts.
principal_account_id
integer | null · required
The balance interest is computed on.
start_date
date · required
status
string · required
active, paused.

ScheduleChange

Only the fields sent are changed.

Fields

name
string | null
status
string | null
paused stops it; active resumes it from the next period after today (missed periods are not posted). Pattern: ^(active|paused)$.

ScheduleInput

A new standing order. Which legs it needs depends on computation: fixed takes debit and credit; simple_interest takes interest_expense and interest_payable; amortized takes payment_source, principal and interest_expense, plus escrow when there is an escrow_amount.

Fields

amount
string | null
The amount for fixed, or the payment for amortized. Decimal string. Pattern: ^\d{1,12}(\.\d{1,2})?$.
anchor_day
integer | null
The day of the month a period ends on, 1–28, or -1 for the last day. -1–28.
annual_rate
string | null
For interest: the annual rate in percent, as a decimal string ("6.5"). Pattern: ^\d{1,3}(\.\d{1,4})?$.
cadence
string · required
daily, weekly, monthly, quarterly, annually. Pattern: ^(daily|weekly|monthly|quarterly|annually)$.
computation
string · required
fixed, simple_interest, amortized. Pattern: ^(fixed|simple_interest|amortized)$.
day_count
string
act365, act360, thirty360. Pattern: ^(act365|act360|thirty360)$. Default: "act365".
end_date
date | null
escrow_amount
string | null
Decimal string. Pattern: ^\d{1,12}(\.\d{1,2})?$.
legs
object · required
Role → account id (see accounts.list).
name
string · required
principal_account_id
integer | null
For interest: the balance it is computed on.
start_date
date | null
Defaults to today.

ScheduleList

A page of schedules, newest first.

Fields

data
array of Schedule · required
has_more
boolean · required
next_cursor
string | null · required

ScheduleRun

One period of a schedule, and what it posted.

Fields

amount
Money · required
error
string | null · required
Why it failed, when it did.
period_end
date · required
period_start
date · required
status
string · required
posted, skipped or failed.
transaction_id
integer | null · required
The transaction (journal entry) it posted. Null when skipped or failed, or when the entry was deleted since.

ScheduleRunList

A page of one schedule's runs, latest period first.

Fields

data
array of ScheduleRun · required
has_more
boolean · required
next_cursor
string | null · required