Skip to content

Accounting

Journals, chart of accounts, ledger entries, lettering, trial balance and fiscal years.

Bases: SyncAPIResource

Manage the company's accounting journals.

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[Journal]

List journals.

Scope: journals:readonly. Reference: https://pennylane.readme.io/reference/getjournals

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

get

get(journal_id: int) -> Journal

Retrieve a journal by its Pennylane identifier.

Scope: journals:readonly. Reference: https://pennylane.readme.io/reference/getjournal

create

create(*, code: str, label: str) -> Journal

Create a journal.

Scope: journals:all. Reference: https://pennylane.readme.io/reference/postjournals

Parameters:

Name Type Description Default
code str

2 to 5 letters that represent the journal.

required
label str

Label that describes the journal.

required

Bases: SyncAPIResource

Manage the company's chart of accounts.

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[LedgerAccount]

List ledger accounts.

Scope: ledger_accounts:readonly. Reference: https://pennylane.readme.io/reference/getledgeraccounts

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

get

get(ledger_account_id: int) -> LedgerAccount

Retrieve a ledger account by its Pennylane identifier.

Scope: ledger_accounts:readonly. Reference: https://pennylane.readme.io/reference/getledgeraccount

create

create(
    *,
    number: str,
    label: str,
    vat_rate: str | None = None,
    country_alpha2: str | None = None,
) -> LedgerAccount

Create a ledger account.

Scope: ledger_accounts:all. Reference: https://pennylane.readme.io/reference/postledgeraccounts

Parameters:

Name Type Description Default
number str

Ledger account's number. If the number starts with 401 (supplier) or 411 (customer), a corresponding third-party account may be created.

required
label str

Ledger account's label.

required
vat_rate str | None

VAT rate code, e.g. "FR_200".

None
country_alpha2 str | None

Ledger account's country code (alpha2).

None

update

update(
    ledger_account_id: int,
    *,
    label: str | None = None,
    letterable: bool | None = None,
) -> LedgerAccount

Update a ledger account. Only the provided fields are modified.

Scope: ledger_accounts:all. Reference: https://pennylane.readme.io/reference/updateledgeraccount

Parameters:

Name Type Description Default
label str | None

Label that describes the ledger account.

None
letterable bool | None

Whether the ledger entries of this ledger account are letterable.

None

Bases: SyncAPIResource

Manage the company's accounting ledger entries.

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[LedgerEntry]

List ledger entries.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentries

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

get

get(ledger_entry_id: int) -> LedgerEntry

Retrieve a ledger entry by its Pennylane identifier.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentry

create

create(
    *,
    date: str,
    label: str,
    journal_id: int,
    ledger_entry_lines: Sequence[dict[str, Any]],
    due_date: str | None = None,
    ledger_attachment_id: int | None = None,
    file_attachment_id: int | None = None,
    currency: str | None = None,
    piece_number: str | None = None,
) -> LedgerEntry

Create a ledger entry.

Scope: ledger_entries:all. Reference: https://pennylane.readme.io/reference/postledgerentries

Parameters:

Name Type Description Default
date str

Date of the ledger entry (ISO 8601).

required
label str

Label that describes the ledger entry.

required
journal_id int

The journal ID where you want to create the ledger entry.

required
ledger_entry_lines Sequence[dict[str, Any]]

Entry lines, each a dict with debit, credit (Money strings) and ledger_account_id, plus an optional label. The API requires BOTH debit and credit on every line (set the unused side to "0.00"). Must balance. Max 1,000 lines per request.

required
due_date str | None

Due date of the ledger entry (ISO 8601).

None
ledger_attachment_id int | None

Deprecated, use file_attachment_id instead.

None
file_attachment_id int | None

File attachment ID.

None
currency str | None

ISO 4217 currency code applied to all lines (default EUR).

None
piece_number str | None

Your own tracking identifier for this ledger entry.

None

update

update(
    ledger_entry_id: int,
    *,
    date: str | None = None,
    label: str | None = None,
    journal_id: int | None = None,
    ledger_entry_lines: dict[str, Any] | None = None,
    ledger_attachment_id: int | None = None,
    file_attachment_id: int | None = None,
    currency: str | None = None,
    piece_number: str | None = None,
) -> LedgerEntry

Update a ledger entry. Only the provided fields are modified.

Scope: ledger_entries:all. Reference: https://pennylane.readme.io/reference/putledgerentries

Parameters:

Name Type Description Default
date str | None

Date of the ledger entry (ISO 8601).

None
label str | None

Label that describes the ledger entry.

None
journal_id int | None

The journal ID where you want to move the ledger entry.

None
ledger_entry_lines dict[str, Any] | None

A dict with optional create, update and delete lists to add, modify or remove entry lines. The resulting entry must balance. Max 1,000 lines affected per request.

None
ledger_attachment_id int | None

Deprecated, use file_attachment_id instead.

None
file_attachment_id int | None

File attachment ID.

None
currency str | None

ISO 4217 currency code applied to all lines.

None
piece_number str | None

The piece number assigned during creation.

None

list_lines

list_lines(
    ledger_entry_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[LedgerEntryLine]

List the entry lines of a ledger entry.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentriesledgerentrylines

Parameters:

Name Type Description Default
ledger_entry_id int

The ledger entry's Pennylane identifier.

required
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

Bases: SyncAPIResource

Upload files to attach to ledger entries.

create

create(
    file: FileInput, filename: str | None = None
) -> LedgerAttachment

Upload a file to attach to a ledger entry.

Scope: ledger. Reference: https://pennylane.readme.io/reference/postledgerattachments

.. deprecated:: Pennylane has deprecated this endpoint.

Parameters:

Name Type Description Default
file FileInput

The file to upload (path, bytes, file-like object or (filename, content) tuple). Allowed content types include image/png, image/jpeg and PDF.

required
filename str | None

Name of the file. Defaults to the uploaded file's name.

None

Bases: SyncAPIResource

Read ledger entry lines and manage their lettering and analytical categories.

get

get(ledger_entry_line_id: int) -> LedgerEntryLine

Retrieve a ledger entry line by its Pennylane identifier.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentryline

letter

letter(
    *,
    unbalanced_lettering_strategy: str,
    ledger_entry_lines: list[dict[str, Any]],
) -> None

Letter ledger entry lines together.

Scope: ledger_entries:all. Reference: https://pennylane.readme.io/reference/postledgerentrylineslet

Parameters:

Name Type Description Default
unbalanced_lettering_strategy str

"none" to reject unbalanced letterings, "partial" to allow them.

required
ledger_entry_lines list[dict[str, Any]]

Ledger entry lines to letter, e.g. [{"id": 1}, {"id": 2}].

required

unletter

unletter(
    *,
    unbalanced_lettering_strategy: str,
    ledger_entry_lines: list[dict[str, Any]],
) -> None

Unletter ledger entry lines.

Scope: ledger_entries:all. Reference: https://pennylane.readme.io/reference/deleteledgerentrylinesun

Parameters:

Name Type Description Default
unbalanced_lettering_strategy str

"none" to reject unbalanced letterings, "partial" to allow them.

required
ledger_entry_lines list[dict[str, Any]]

Ledger entry lines to unletter, e.g. [{"id": 1}].

required

list_lettered_lines

list_lettered_lines(
    ledger_entry_line_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    sort: str | None = None,
) -> SyncCursorPage[LedgerEntryLine]

List ledger entry lines lettered together with a given ledger entry line.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentrylineslette

list_categories

list_categories(
    ledger_entry_line_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    sort: str | None = None,
) -> SyncCursorPage[LedgerEntryLineCategory]

List the analytical categories attached to a ledger entry line.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentrylinescate

categorize

categorize(
    ledger_entry_line_id: int,
    *,
    categories: list[dict[str, Any]],
) -> CategorizedLedgerEntryLine

Replace the analytical categories attached to a ledger entry line.

Passing an empty list removes every category from the ledger entry line.

Scope: ledger_entries:all. Reference: https://pennylane.readme.io/reference/putledgerentrylinescate

Parameters:

Name Type Description Default
categories list[dict[str, Any]]

List of {"id": int, "weight": str} (weight between "0" and "1", up to 7 decimals).

required

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[LedgerEntryLine]

List ledger entry lines.

Scope: ledger_entries:readonly. Reference: https://pennylane.readme.io/reference/getledgerentrylines

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page.

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

Bases: SyncAPIResource

Read the company trial balance.

list

list(
    *,
    period_start: str,
    period_end: str,
    is_auxiliary: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
) -> SyncCursorPage[TrialBalanceRow]

List the trial balance rows for a period.

Scope: trial_balance:readonly. Reference: https://pennylane.readme.io/reference/gettrialbalance

Parameters:

Name Type Description Default
period_start str

Period start date (YYYY-MM-DD).

required
period_end str

Period end date (YYYY-MM-DD).

required
is_auxiliary bool | None

Whether to include auxiliary ledger accounts.

None
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page.

None

Bases: SyncAPIResource

Read the company fiscal years.

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    sort: str | None = None,
) -> SyncCursorPage[FiscalYear]

List the company's fiscal years.

Scope: fiscal_years:readonly. Reference: https://pennylane.readme.io/reference/company-fiscal-years

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page.

None
sort str | None

Sort field, prefixed with - for descending.

None