API reference
Financing instruments
SAFEs from the day the money arrives to the priced round they convert in: issued at proceeds, previewed and converted into preferred stock and paid-in capital.
- GET
/v1/financing_instrumentsList financing instruments - POST
/v1/financing_instrumentsWrite a draft SAFE, note or venture debt - GET
/v1/financing_instruments/{instrument_id}Get a financing instrument - PATCH
/v1/financing_instruments/{instrument_id}Change a financing instrument - DELETE
/v1/financing_instruments/{instrument_id}Delete a draft financing instrument - POST
/v1/financing_instruments/{instrument_id}/accrueAccrue a note's or loan's interest - GET
/v1/financing_instruments/{instrument_id}/conversion_previewPreview a SAFE's or note's conversion - POST
/v1/financing_instruments/{instrument_id}/convertConvert a SAFE or note at a priced round - POST
/v1/financing_instruments/{instrument_id}/issueIssue a financing instrument onto the books - GET
/v1/financing_instruments/{instrument_id}/payoffGet what pays off a note or loan - POST
/v1/financing_instruments/{instrument_id}/repayRecord a payment on a note or loan - POST
/v1/financing_instruments/{instrument_id}/voidVoid an instrument recorded in error
Guides: Record SAFEs, convertible notes and venture debt
List financing instruments
GET/v1/financing_instruments
client.financingInstruments.list()
The financing instruments of these books, the newest first, each with what has happened to it.
Parameters
| Name | Type | Description |
|---|---|---|
statusQuery | string or null | Only |
investor_party_idQuery | string or null | An id that starts with |
limitQuery | integer | Page size, 1–200. |
cursorQuery | string or null | The |
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl "https://api.ledgerit.ai/v1/financing_instruments" \
-H "Authorization: Bearer $LEDGERIT_TOKEN"Write a draft SAFE, note or venture debt
POST/v1/financing_instruments· Idempotent
client.financingInstruments.create()
Write a SAFE's, a convertible note's or venture debt's terms as a draft. Nothing is on the books until it is issued.
Request body
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X POST "https://api.ledgerit.ai/v1/financing_instruments" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"account_id":"…","investor_party_id":"…","issued_on":"2026-09-30","name":"…","principal":0}'Get a financing instrument
GET/v1/financing_instruments/{instrument_id}
client.financingInstruments.get()
One financing instrument and what has happened to it.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}" \
-H "Authorization: Bearer $LEDGERIT_TOKEN"Change a financing instrument
PATCH/v1/financing_instruments/{instrument_id}· Idempotent
client.financingInstruments.update()
Change a draft's terms. Once it is on the books only its memo
changes; anything else is refused with conflict.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Request body
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X PATCH "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'Delete a draft financing instrument
DELETE/v1/financing_instruments/{instrument_id}· Idempotent
client.financingInstruments.delete()
Delete a draft. One on the books is voided instead.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Response
204No content
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X DELETE "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"Accrue a note's or loan's interest
POST/v1/financing_instruments/{instrument_id}/accrue· Idempotent
client.financingInstruments.accrue()
Accrue an outstanding note's or venture debt's interest through a day:
interest expense against accrued interest, from the day after it last
accrued. Every month-end close does this on its own; accruing again
through the same day writes nothing. A SAFE is refused with conflict.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Request body
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X POST "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/accrue" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"through":"2026-09-30"}'Preview a SAFE's or note's conversion
GET/v1/financing_instruments/{instrument_id}/conversion_preview
client.financingInstruments.previewConversion()
What converting an outstanding SAFE or convertible note at a priced round would do: the round, cap and discount prices, the lowest of them, the shares and how the amount splits between par and paid-in capital. Writes nothing.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
price_per_shareQuery · Required | number | string | The priced round's price per share. |
par_valueQuery · Required | number | string | The par value of one share it converts into. |
capitalizationQuery | number | string or null | The company capitalization, in shares, the valuation cap divides by. Needed with a cap. |
sharesQuery | integer or null | The shares the round's cap table issues, if it differs. |
converted_onQuery | string (date) or null | For a note: the day it would convert, which its interest accrues through. Today when left out. |
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/conversion_preview" \
-H "Authorization: Bearer $LEDGERIT_TOKEN"Convert a SAFE or note at a priced round
POST/v1/financing_instruments/{instrument_id}/convert· Idempotent
client.financingInstruments.convert()
Convert an outstanding SAFE or convertible note at a priced round: its
whole carrying amount, and a note's interest accrued through the day,
moves out, preferred stock at par for the shares and paid-in capital for
the rest. Venture debt is refused with conflict.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Request body
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X POST "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/convert" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"converted_on":"2026-09-30","par_value":0,"price_per_share":0}'Issue a financing instrument onto the books
POST/v1/financing_instruments/{instrument_id}/issue· Idempotent
client.financingInstruments.issue()
Put a draft on the books at its principal: the account the money came in through against the account it is carried in.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X POST "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/issue" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"Get what pays off a note or loan
GET/v1/financing_instruments/{instrument_id}/payoff
client.financingInstruments.payoff()
What paying off an outstanding note or venture debt would take on a day: the principal still owed and the interest accrued by then. Writes nothing.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
onQuery | string (date) or null | The day it would be paid off. Today when left out. |
Response
200PayoffOut
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/payoff" \
-H "Authorization: Bearer $LEDGERIT_TOKEN"Record a payment on a note or loan
POST/v1/financing_instruments/{instrument_id}/repay· Idempotent
client.financingInstruments.repay()
Record a payment on an outstanding note or venture debt. Interest
accrues through the day first; then the principal comes off the account
it is carried in and the interest off accrued interest, against the
account the money left through. Once nothing is owed it is repaid.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Request body
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X POST "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/repay" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"account_id":"…","paid_on":"2026-09-30"}'Void an instrument recorded in error
POST/v1/financing_instruments/{instrument_id}/void· Idempotent
client.financingInstruments.void()
Take an instrument recorded in error off the books by reversing its
issue. One that has converted, accrued interest or been repaid is
refused with conflict.
Parameters
| Name | Type | Description |
|---|---|---|
instrument_idPath · Required | string | An id that starts with |
Request body
Response
Errors
- 400
- The request was malformed or a parameter is invalid.
- 401
- No valid credential was sent.
- 403
- The credential or the member's role does not allow this.
- 404
- No such resource in this ledger.
- 409
- A conflicting request, e.g. one with the same Idempotency-Key still running.
- 422
- A well-formed request a business rule refused.
- 429
- Too many requests; retry after the Retry-After header.
- 500
- Something failed on our side; the request_id identifies it.
Example
curl -X POST "https://api.ledgerit.ai/v1/financing_instruments/{instrument_id}/void" \
-H "Authorization: Bearer $LEDGERIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'Objects
The objects these operations take and return.
InstrumentPage
| Name | Type | Description |
|---|---|---|
dataRequired | array of InstrumentOut | |
has_moreRequired | boolean | |
next_cursorRequired | string or null |
InstrumentCreate
| Name | Type | Description |
|---|---|---|
account_idRequired | string | The account the money came in through, usually the bank account. |
classification_policy | string |
|
discount | number | string or null | The discount as a fraction, if it has one: 0.20 is 20%. |
instrument_account_id | string or null | An id that starts with |
interest_account_id | string or null | An id that starts with |
interest_expense_account_id | string or null | An id that starts with |
interest_rate | number | string or null | A convertible note's or venture debt's yearly interest rate as a fraction, simple and actual/365: 0.08 is 8%. Required for those, and left out for a SAFE. |
investor_party_idRequired | string | The investor: a counterparty of these books. |
issued_onRequired | string (date) | The day the money arrived. |
kind | string |
|
maturity_on | string (date) or null | When a note or venture debt falls due, if its terms say. Left out for a SAFE. |
memo | string or null | |
mfn | boolean | Whether it carries a most-favoured-nation clause. |
nameRequired | string | How the books name it, e.g. |
principalRequired | number | string | The purchase amount, in the books' currency. |
valuation_cap | number | string or null | The valuation cap, if it has one. |
InstrumentOut
| Name | Type | Description |
|---|---|---|
account_idRequired | string | An id that starts with |
accrued_interestRequired | string | Interest accrued and not yet paid or converted. |
accrued_throughRequired | string (date) or null | The last day interest has accrued through, if any has. |
classification_policyRequired | string | |
converted_atRequired | string (date-time) or null | |
created_atRequired | string (date-time) | |
currencyRequired | string | |
discountRequired | string or null | |
entry_idRequired | string or null | An id that starts with |
eventsRequired | array of EventOut | |
idRequired | string | An id that starts with |
instrument_account_idRequired | string | An id that starts with |
interest_account_idRequired | string or null | An id that starts with |
interest_expense_account_idRequired | string or null | An id that starts with |
interest_rateRequired | string or null | A note's or venture debt's yearly rate as a fraction; null for a SAFE. |
investor_party_idRequired | string | An id that starts with |
issued_atRequired | string (date-time) or null | |
issued_onRequired | string (date) | |
kindRequired | string | |
linked_transaction_ids | array of string | The bank transactions this command linked as its cash (decision 0191), when it records cash; empty otherwise and when read back. |
maturity_onRequired | string (date) or null | |
memoRequired | string or null | |
mfnRequired | boolean | |
nameRequired | string | |
outstanding_principalRequired | string | The principal still owed: all of it until it is repaid or converts, zero for a draft. |
principalRequired | string | |
repaid_atRequired | string (date-time) or null | |
reversed_transaction_ids | array of string | Of those, the ones that were in the books (filed by the model or from suspense) and were reversed first, so their cash counts once. |
row_versionRequired | integer | |
source_providerRequired | string or null | The system it was imported from (e.g. |
source_refRequired | string or null | That system's id for it, or null. Read-only; one instrument per source id per set of books. |
statusRequired | string |
|
valuation_capRequired | string or null | |
void_entry_idRequired | string or null | An id that starts with |
voided_atRequired | string (date-time) or null |
InstrumentUpdate
| Name | Type | Description |
|---|---|---|
account_id | string or null | An id that starts with |
classification_policy | string or null | |
discount | number | string or null | |
instrument_account_id | string or null | An id that starts with |
interest_account_id | string or null | An id that starts with |
interest_expense_account_id | string or null | An id that starts with |
interest_rate | number | string or null | A convertible note's or venture debt's yearly interest rate as a fraction, simple and actual/365: 0.08 is 8%. Required for those, and left out for a SAFE. |
investor_party_id | string or null | An id that starts with |
issued_on | string (date) or null | |
kind | string or null | |
maturity_on | string (date) or null | When a note or venture debt falls due, if its terms say. Left out for a SAFE. |
memo | string or null | |
mfn | boolean or null | |
name | string or null | |
principal | number | string or null | |
valuation_cap | number | string or null |
InstrumentAccrue
| Name | Type | Description |
|---|---|---|
throughRequired | string (date) | The last day to accrue interest through. |
ConversionOut
| Name | Type | Description |
|---|---|---|
amountRequired | string | What converts: a SAFE's purchase amount, or a note's principal and accrued interest. |
at_parRequired | string | The shares at par: what goes to preferred stock. |
basisRequired | string | Which price it is: |
cap_priceRequired | string or null | The valuation cap over the capitalization, for a SAFE with a cap. |
discount_priceRequired | string or null | The round's price less the discount, for a SAFE with one. |
interestRequired | string | A note's accrued interest within |
paid_inRequired | string | The rest of the amount: what goes to paid-in capital. |
priceRequired | string | The lowest of the three: the price the SAFE converts at. |
round_priceRequired | string | |
sharesRequired | integer | The shares it converts into, rounded down to a whole share. |
InstrumentConvert
| Name | Type | Description |
|---|---|---|
capitalization | number | string or null | The company capitalization, in shares, the valuation cap divides by: post-money for a post-money SAFE, pre-money for a pre-money one. Needed when the SAFE has a cap. |
converted_onRequired | string (date) | The day the round closed. |
paid_in_account_id | string or null | An id that starts with |
par_valueRequired | number | string | The par value of one share of the preferred stock it converts into. |
preferred_account_id | string or null | An id that starts with |
price_per_shareRequired | number | string | The priced round's price per share. |
shares | integer or null | The shares the round's cap table issues, when it settled on a different count. |
PayoffOut
| Name | Type | Description |
|---|---|---|
interestRequired | string | The interest accrued and unpaid by that day, including days not yet accrued. |
onRequired | string (date) | The day it would be paid off. |
principalRequired | string | The principal still owed. |
totalRequired | string | Principal and interest together: what pays it off. |
InstrumentRepay
| Name | Type | Description |
|---|---|---|
account_idRequired | string | The account the money left through, usually the bank account. |
interest | number | string | How much of it is accrued interest. |
paid_onRequired | string (date) | The day the money left. Interest accrues through it first. |
principal | number | string | How much of the payment is principal. |
InstrumentVoid
| Name | Type | Description |
|---|---|---|
reason | string or null |
EventOut
| Name | Type | Description |
|---|---|---|
amountRequired | string | |
detailRequired | object | How it was worked out: for a conversion, the prices, the shares and par; for interest, the days ( |
effective_onRequired | string (date) | |
entry_idRequired | string | An id that starts with |
idRequired | string | An id that starts with |
kindRequired | string |
|
recorded_atRequired | string (date-time) |