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.

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

NameTypeDescription
statusQuerystring or null

Only draft, outstanding, converted or void instruments.

investor_party_idQuerystring or null

An id that starts with party_.

limitQueryinteger

Page size, 1–200.

Default 50
cursorQuerystring or null

The next_cursor of the previous page.

Response

200InstrumentPage

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

InstrumentCreate

Response

201InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Response

200InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Request body

InstrumentUpdate

Response

200InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Request body

InstrumentAccrue

Response

200InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

price_per_shareQuery · Requirednumber | string

The priced round's price per share.

par_valueQuery · Requirednumber | string

The par value of one share it converts into.

capitalizationQuerynumber | string or null

The company capitalization, in shares, the valuation cap divides by. Needed with a cap.

sharesQueryinteger or null

The shares the round's cap table issues, if it differs.

converted_onQuerystring (date) or null

For a note: the day it would convert, which its interest accrues through. Today when left out.

Response

200ConversionOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Request body

InstrumentConvert

Response

200InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Response

200InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

onQuerystring (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
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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Request body

InstrumentRepay

Response

200InstrumentOut

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

NameTypeDescription
instrument_idPath · Requiredstring

An id that starts with fin_.

Request body

InstrumentVoid

Response

200InstrumentOut

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

NameTypeDescription
dataRequiredarray of InstrumentOut
has_moreRequiredboolean
next_cursorRequiredstring or null

InstrumentCreate

NameTypeDescription
account_idRequiredstring

The account the money came in through, usually the bank account.

classification_policystring

liability (the default: carried in SAFE notes, convertible notes or venture debt) or equity (a SAFE only: carried in SAFEs classified as equity), as the company's accountant signs off.

Default liability
discountnumber | string or null

The discount as a fraction, if it has one: 0.20 is 20%.

instrument_account_idstring or null

An id that starts with gla_.

interest_account_idstring or null

An id that starts with gla_.

interest_expense_account_idstring or null

An id that starts with gla_.

interest_ratenumber | 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_idRequiredstring

The investor: a counterparty of these books.

issued_onRequiredstring (date)

The day the money arrived.

kindstring

safe_post (a post-money SAFE), safe_pre (a pre-money SAFE), convertible_note or venture_debt.

Default safe_post
maturity_onstring (date) or null

When a note or venture debt falls due, if its terms say. Left out for a SAFE.

memostring or null
mfnboolean

Whether it carries a most-favoured-nation clause.

Default false
nameRequiredstring

How the books name it, e.g. Seed SAFE, Acme Ventures.

principalRequirednumber | string

The purchase amount, in the books' currency.

valuation_capnumber | string or null

The valuation cap, if it has one.

InstrumentOut

NameTypeDescription
account_idRequiredstring

An id that starts with gla_.

accrued_interestRequiredstring

Interest accrued and not yet paid or converted.

accrued_throughRequiredstring (date) or null

The last day interest has accrued through, if any has.

classification_policyRequiredstring
converted_atRequiredstring (date-time) or null
created_atRequiredstring (date-time)
currencyRequiredstring
discountRequiredstring or null
entry_idRequiredstring or null

An id that starts with je_.

eventsRequiredarray of EventOut
idRequiredstring

An id that starts with fin_.

instrument_account_idRequiredstring

An id that starts with gla_.

interest_account_idRequiredstring or null

An id that starts with gla_.

interest_expense_account_idRequiredstring or null

An id that starts with gla_.

interest_rateRequiredstring or null

A note's or venture debt's yearly rate as a fraction; null for a SAFE.

investor_party_idRequiredstring

An id that starts with party_.

issued_atRequiredstring (date-time) or null
issued_onRequiredstring (date)
kindRequiredstring
linked_transaction_idsarray of string

The bank transactions this command linked as its cash (decision 0191), when it records cash; empty otherwise and when read back.

maturity_onRequiredstring (date) or null
memoRequiredstring or null
mfnRequiredboolean
nameRequiredstring
outstanding_principalRequiredstring

The principal still owed: all of it until it is repaid or converts, zero for a draft.

principalRequiredstring
repaid_atRequiredstring (date-time) or null
reversed_transaction_idsarray 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_versionRequiredinteger
source_providerRequiredstring or null

The system it was imported from (e.g. clerky), or null for one written in LedgerIt. Read-only: set when it is imported and never changed.

source_refRequiredstring or null

That system's id for it, or null. Read-only; one instrument per source id per set of books.

statusRequiredstring

draft, outstanding, converted, repaid or void.

valuation_capRequiredstring or null
void_entry_idRequiredstring or null

An id that starts with je_.

voided_atRequiredstring (date-time) or null

InstrumentUpdate

NameTypeDescription
account_idstring or null

An id that starts with gla_.

classification_policystring or null
discountnumber | string or null
instrument_account_idstring or null

An id that starts with gla_.

interest_account_idstring or null

An id that starts with gla_.

interest_expense_account_idstring or null

An id that starts with gla_.

interest_ratenumber | 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_idstring or null

An id that starts with party_.

issued_onstring (date) or null
kindstring or null
maturity_onstring (date) or null

When a note or venture debt falls due, if its terms say. Left out for a SAFE.

memostring or null
mfnboolean or null
namestring or null
principalnumber | string or null
valuation_capnumber | string or null

InstrumentAccrue

NameTypeDescription
throughRequiredstring (date)

The last day to accrue interest through.

ConversionOut

NameTypeDescription
amountRequiredstring

What converts: a SAFE's purchase amount, or a note's principal and accrued interest.

at_parRequiredstring

The shares at par: what goes to preferred stock.

basisRequiredstring

Which price it is: round, cap or discount.

cap_priceRequiredstring or null

The valuation cap over the capitalization, for a SAFE with a cap.

discount_priceRequiredstring or null

The round's price less the discount, for a SAFE with one.

interestRequiredstring

A note's accrued interest within amount; zero for a SAFE.

paid_inRequiredstring

The rest of the amount: what goes to paid-in capital.

priceRequiredstring

The lowest of the three: the price the SAFE converts at.

round_priceRequiredstring
sharesRequiredinteger

The shares it converts into, rounded down to a whole share.

InstrumentConvert

NameTypeDescription
capitalizationnumber | 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_onRequiredstring (date)

The day the round closed.

paid_in_account_idstring or null

An id that starts with gla_.

par_valueRequirednumber | string

The par value of one share of the preferred stock it converts into.

preferred_account_idstring or null

An id that starts with gla_.

price_per_shareRequirednumber | string

The priced round's price per share.

sharesinteger or null

The shares the round's cap table issues, when it settled on a different count.

PayoffOut

NameTypeDescription
interestRequiredstring

The interest accrued and unpaid by that day, including days not yet accrued.

onRequiredstring (date)

The day it would be paid off.

principalRequiredstring

The principal still owed.

totalRequiredstring

Principal and interest together: what pays it off.

InstrumentRepay

NameTypeDescription
account_idRequiredstring

The account the money left through, usually the bank account.

interestnumber | string

How much of it is accrued interest.

Default 0
paid_onRequiredstring (date)

The day the money left. Interest accrues through it first.

principalnumber | string

How much of the payment is principal.

Default 0

InstrumentVoid

NameTypeDescription
reasonstring or null

EventOut

NameTypeDescription
amountRequiredstring
detailRequiredobject

How it was worked out: for a conversion, the prices, the shares and par; for interest, the days (from, through, days), the principal and the rate; for a repayment, its principal and interest.

effective_onRequiredstring (date)
entry_idRequiredstring

An id that starts with je_.

idRequiredstring

An id that starts with fin_evt_.

kindRequiredstring

issued, interest_accrued, repaid or converted.

recorded_atRequiredstring (date-time)