---
title: Pennylane API Integration on Truto
slug: pennylane
category: Accounting
canonical: "https://truto.one/integrations/detail/pennylane/"
---

# Pennylane API Integration on Truto



**Category:** Accounting  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 153 tools for Pennylane that AI agents can call directly.

- **list_all_pennylane_external_webhook_subscriptions** — List all pennylane webhook subscriptions for the authenticated token. Returns: id, callback_url, events, enabled, disabled_at, disabled_reason, last_failure_status, last_failure_at, consecutive_failures, created_at, updated_at. The secret is not included in list responses.
- **create_a_pennylane_external_webhook_subscription** — Create a pennylane webhook subscription to receive real-time event notifications. Returns: id, callback_url, events, enabled, secret, created_at, updated_at. The secret is auto-generated and only returned once on creation — store it securely. Required: callback_url, events. Up to 10 subscriptions allowed per subscriber.
- **get_single_pennylane_external_webhook_subscription_by_id** — Get a single pennylane webhook subscription by id. Returns: id, callback_url, events, enabled, disabled_at, disabled_reason, last_failure_status, last_failure_at, consecutive_failures, created_at, updated_at. The secret is not included in the response. Required: id.
- **update_a_pennylane_external_webhook_subscription_by_id** — Update a pennylane webhook subscription by id. Returns: id, callback_url, events, enabled, disabled_at, disabled_reason, last_failure_status, last_failure_at, consecutive_failures, created_at, updated_at. Required: id.
- **delete_a_pennylane_external_webhook_subscription_by_id** — Delete a pennylane webhook subscription by id. Returns an empty 204 response on success. Required: id.
- **list_all_pennylane_external_journals** — List journals in pennylane ordered by descending IDs (new default behavior). Returns: id, code, label, type per journal item. Supports filtering by type and sorting by id.
- **create_a_pennylane_external_journal** — Create a new journal in pennylane. Returns: id, code, label, type of the created journal. Required: code, label.
- **get_single_pennylane_external_journal_by_id** — Retrieve a single pennylane journal by id. Returns: id, code, label, type. Required: id.
- **list_all_pennylane_external_ledger_accounts** — List pennylane ledger accounts. Returns: id, number, label, vat_rate, country_alpha2, enabled, type, letterable, created_at, updated_at. Supports filtering by id, number, and enabled, and sorting by id.
- **create_a_pennylane_external_ledger_account** — Create a new pennylane ledger account. Returns: id, number, label, vat_rate, country_alpha2, enabled, type, letterable, created_at, updated_at. Required: number, label. If number starts with 401 or 411, a corresponding supplier or customer is also created.
- **get_single_pennylane_external_ledger_account_by_id** — Get a single pennylane ledger account by id. Returns: id, number, label, vat_rate, country_alpha2, enabled, type, letterable, created_at, updated_at. Required: id.
- **update_a_pennylane_external_ledger_account_by_id** — Update an existing pennylane ledger account by id. Returns: id, number, label, vat_rate, country_alpha2, enabled, type, letterable, created_at, updated_at. Required: id.
- **create_a_pennylane_external_ledger_attachment** — Upload a file to attach to a pennylane ledger entry (DEPRECATED — use the File Attachments endpoint instead). Returns: id, url, filename. Required: file. Allowed types: image/png, image/jpeg, image/tiff, image/bmp, image/gif, application/pdf. Max file size is 100MB.
- **list_all_pennylane_ledger_entrie_ledger_entry_lines** — List ledger entry lines for a Pennylane ledger entry. Returns: id, debit, credit, label, ledger_account_id, ledger_account. Required: ledger_entry_id.
- **list_all_pennylane_external_ledger_entry_lines** — List pennylane ledger entry lines. Returns: id, debit, credit, label, date, ledger_account, journal, ledger_entry, categories, lettered_ledger_entry_lines, created_at, updated_at. Supports filtering by id, journal_id, ledger_account_id, or date, and sorting by id or date.
- **get_single_pennylane_external_ledger_entry_line_by_id** — Get a single pennylane ledger entry line by id. Returns: id, debit, credit, label, date, ledger_account, journal, ledger_entry, categories, lettered_ledger_entry_lines, created_at, updated_at. Required: id.
- **create_a_pennylane_ledger_entry_lines_lettering** — Letter ledger entry lines together in Pennylane. Returns an array of all entry lines in the resulting lettering, each containing: id. If a passed line is already lettered, its existing associated lines are merged into the new lettering. Required: unbalanced_lettering_strategy, ledger_entry_lines (minimum 2 items).
- **delete_a_pennylane_ledger_entry_lines_lettering_by_id** — Unletter ledger entry lines in Pennylane. Returns an empty 204 response on success. Required: unbalanced_lettering_strategy, ledger_entry_lines (minimum 1 item).
- **list_all_pennylane_ledger_entry_line_lettered_ledger_entry_lines** — List pennylane ledger entry lines that are lettered to a given ledger entry line. Returns: id, debit, credit, label, categories, ledger_account, journal, date, ledger_entry, lettered_ledger_entry_lines, created_at, updated_at. Required: ledger_entry_line_id. Items are sorted by descending id by default; use the sort parameter to customize ordering.
- **list_all_pennylane_ledger_entry_line_categories** — List analytical categories attached to a pennylane ledger entry line. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: ledger_entry_line_id.
- **update_a_pennylane_ledger_entry_line_category_by_id** — Replace all analytical categories on a pennylane ledger entry line; existing categories are fully overwritten with the new set. Sending an empty array removes all categories. Returns: ledger_entry_line containing the line id, label, and updated categories list. Required: ledger_entry_line_id.
- **create_a_pennylane_customer_invoices_import** — Import a customer invoice with an attached file in pennylane. Returns the created invoice object including id, invoice_number, status, amount, currency_amount, date, deadline, paid, draft, and customer. Required: file_attachment_id, date, deadline, customer_id, currency_amount_before_tax, currency_amount, currency_tax, and invoice_lines.
- **create_a_pennylane_e_invoices_import** — Import a customer e-invoice in Pennylane from a Factur-X PDF file. Returns: id, url. Required: file. Optionally supply invoice_options to pre-fill customer and line-level data; each line's e_invoice_line_id must match Factur-X BT-126 (LineID).
- **create_a_pennylane_customer_invoice_send_to_pa** — Send a pennylane customer e-invoice to the Partner Dematerialization Platform (PA). Returns an empty 204 response on success. Required: id.
- **create_a_pennylane_customer_invoices_create_from_quote** — Create a Pennylane customer invoice from an existing quote, inheriting the quote's customer and line data. Returns the created invoice including id, invoice_number, status, amount, currency, date, deadline, paid, draft, customer, external_reference, and created_at. Required: quote_id, draft.
- **list_all_pennylane_external_billing_subscriptions** — List billing subscriptions in pennylane. Returns: id, status, mode, start, finish, next_occurrence, recurring_rule, customer, customer_invoice_data, created_at, updated_at. Supports filtering by id, start, customer_id, or status and sorting by id.
- **create_a_pennylane_external_billing_subscription** — Create a billing subscription in pennylane. Pennylane will generate customer invoices on each recurring occurrence and can optionally send them by email or debit via GoCardless. Returns: id, status, mode, start, finish, next_occurrence, recurring_rule, customer, customer_invoice_data, created_at, updated_at.
- **get_single_pennylane_external_billing_subscription_by_id** — Get a single pennylane billing subscription by id. Returns: id, status, mode, start, finish, next_occurrence, prev_occurrence, recurring_rule, customer, customer_invoice_data, payment_method, created_at, updated_at. Required: id.
- **update_a_pennylane_external_billing_subscription_by_id** — Update a pennylane billing subscription by id. Returns: id, status, mode, start, finish, next_occurrence, prev_occurrence, recurring_rule, customer, customer_invoice_data, payment_method, created_at, updated_at. Required: id.
- **list_all_pennylane_billing_subscription_invoice_line_sections** — List the invoice line sections of a pennylane billing subscription. Returns: id, title, description, rank, created_at, updated_at. Required: billing_subscription_id.
- **list_all_pennylane_billing_subscription_invoice_lines** — List invoice lines for a billing subscription in pennylane. Returns: id, label, quantity, amount, currency_amount, vat_rate, description, product, discount, currency_amount_before_tax, tax, raw_currency_unit_price, section_rank, imputation_dates, created_at, and updated_at. Required: billing_subscription_id.
- **list_all_pennylane_external_pa_registrations** — List all PA (Plateforme Agrée) registrations for the company in Pennylane, including activation status and exchange direction. Returns: id, siret, siren, status, exchange_direction, created_at, updated_at. Records with a null siret represent the SIREN-level (head office); other records represent establishments.
- **list_all_pennylane_external_products** — List Pennylane products. Returns: id, label, description, price_before_tax, vat_rate, price, unit, currency, reference, external_reference, created_at, archived_at, updated_at. Supports filtering by id, label, reference, and external_reference, and sorting by id.
- **create_a_pennylane_external_product** — Create a product in Pennylane. Returns: id, label, description, price_before_tax, vat_rate, price, unit, currency, reference, external_reference, created_at, archived_at, updated_at. Required: label, price_before_tax, vat_rate.
- **get_single_pennylane_external_product_by_id** — Get a single Pennylane product by id. Returns: id, label, description, price_before_tax, vat_rate, price, unit, currency, reference, external_reference, created_at, archived_at, updated_at. Required: id.
- **update_a_pennylane_external_product_by_id** — Update a Pennylane product by id. Returns: id, label, description, price_before_tax, vat_rate, price, unit, currency, reference, external_reference, created_at, archived_at, updated_at. Required: id.
- **create_a_pennylane_external_file_attachment** — Upload a file in Pennylane to attach to any resource that accepts a file_attachment_id. Returns: id, url, filename, created_at, updated_at. Required: file. Accepted formats: image/png, image/jpeg, image/tiff, image/bmp, image/gif, application/pdf. Maximum file size is 100MB.
- **list_all_pennylane_external_customer_invoice_templates** — List customer invoice templates in pennylane. Returns: id, name, created_at, updated_at. Optionally sort results by id using the sort parameter (prefix with `-` for descending order).
- **create_a_pennylane_exports_analytical_general_ledger** — Create an Analytical General Ledger export in pennylane. Returns: id, status, created_at, updated_at. The generated file is an xlsx; mode defaults to in_line. Required: period_start, period_end.
- **get_single_pennylane_exports_analytical_general_ledger_by_id** — Retrieve a pennylane Analytical General Ledger export by id. Returns: id, file_url, status, created_at, updated_at. The file_url expires 30 minutes after generation. Required: id.
- **create_a_pennylane_exports_fec** — Create a FEC export in Pennylane for a given date range. Returns: id, status, created_at, updated_at. Required: period_start, period_end.
- **get_single_pennylane_exports_fec_by_id** — Retrieve a specific FEC export from Pennylane by id. Returns: id, file_url, status, created_at, updated_at. The file_url expires 30 minutes after generation. Required: id.
- **create_a_pennylane_exports_general_ledger** — Create a General Ledger export in Pennylane as an xlsx file. The export is processed asynchronously; poll the get endpoint until status is ready. Returns: id, status, created_at, updated_at. Required: period_start, period_end.
- **get_single_pennylane_exports_general_ledger_by_id** — Retrieve a specific Pennylane General Ledger export by id. Returns: id, file_url, status, created_at, updated_at. The file_url is a time-limited xlsx download link that expires after 30 minutes and is only present when status is ready. Required: id.
- **create_a_pennylane_external_company_customer** — Create a company customer in Pennylane. Returns: id, name, billing_address, emails, payment_conditions, created_at, updated_at, and external_reference. Required: name, billing_address.
- **get_single_pennylane_external_company_customer_by_id** — Retrieve a Pennylane company customer by id. Returns: id, name, billing_address, emails, payment_conditions, vat_number, created_at, updated_at, and external_reference. Required: id.
- **update_a_pennylane_external_company_customer_by_id** — Update an existing Pennylane company customer by id. Returns: id, name, billing_address, emails, payment_conditions, created_at, updated_at, and external_reference. Required: id.
- **create_a_pennylane_external_individual_customer** — Create an individual customer in Pennylane. Returns: id, name, first_name, last_name, emails, billing_address, payment_conditions, external_reference, created_at, updated_at. Required: first_name, last_name, billing_address.
- **get_single_pennylane_external_individual_customer_by_id** — Retrieve an individual customer from Pennylane by id. Returns: id, name, first_name, last_name, emails, billing_address, payment_conditions, external_reference, created_at, updated_at. Required: id.
- **update_a_pennylane_external_individual_customer_by_id** — Update an individual customer in Pennylane by id. Returns: id, name, first_name, last_name, emails, billing_address, payment_conditions, external_reference, created_at, updated_at. Required: id.
- **list_all_pennylane_external_customers** — List pennylane customers (both company and individual). Returns: id, name, customer_type, emails, external_reference, billing_address, payment_conditions, created_at, and more per record. Supports filtering on fields such as customer_type, name, external_reference, and reg_no via the filter parameter.
- **get_single_pennylane_external_customer_by_id** — Get a single pennylane customer by id. Returns the full customer object including id, name, customer_type, emails, billing_address, payment_conditions, external_reference, created_at, and more. Required: id.
- **list_all_pennylane_customer_categories** — List categories of a pennylane customer. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: customer_id.
- **update_a_pennylane_customer_category_by_id** — Update the full set of categories for a pennylane customer, replacing all existing category assignments. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: customer_id. The sum of weights for categories within the same group must equal 1.
- **list_all_pennylane_customer_contacts** — List contacts associated with a pennylane customer. Returns: id, first_name, last_name, role, email, telephone_number, mobile_number, created_at, and updated_at for each contact. Required: customer_id.
- **list_all_pennylane_external_suppliers** — List pennylane suppliers with optional filtering and sorting. Returns: id, name, emails, iban, postal_address, supplier_payment_method, external_reference, created_at, updated_at. Max 100 items per page.
- **create_a_pennylane_external_supplier** — Create a new supplier in pennylane. Returns: id, name, emails, iban, postal_address, vat_number, ledger_account, supplier_payment_method, external_reference, created_at, updated_at. Required: name.
- **get_single_pennylane_external_supplier_by_id** — Get a single pennylane supplier by id. Returns: id, name, emails, iban, postal_address, vat_number, ledger_account, supplier_payment_method, external_reference, created_at, updated_at. Required: id.
- **update_a_pennylane_external_supplier_by_id** — Update an existing pennylane supplier by id. Returns: id, name, emails, iban, postal_address, vat_number, ledger_account, supplier_payment_method, external_reference, created_at, updated_at. Required: id.
- **list_all_pennylane_supplier_categories** — List categories assigned to a pennylane supplier. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: supplier_id.
- **update_a_pennylane_supplier_category_by_id** — Update (replace) the category assignments for a pennylane supplier. Returns the updated category list including id, label, weight, category_group, analytical_code, created_at, and updated_at. Required: supplier_id; body is an array of category objects each with id and weight. Weights for categories sharing the same group must sum to 1.
- **get_single_pennylane_external_by_id** — Get the Pennylane user profile and associated company details for the current access token. Returns: user (id, first_name, last_name, email, locale), company (id, name, reg_no), and scopes associated with the token.
- **list_all_pennylane_customer_invoice_invoice_line_sections** — List invoice line sections for a pennylane customer invoice. Returns: id, title, description, rank, created_at, updated_at. Required: customer_invoice_id. Results can be sorted by id (prefix with `-` for descending order; defaults to `-id`).
- **list_all_pennylane_customer_invoice_invoice_lines** — List invoice lines for a pennylane customer invoice. Returns: id, label, quantity, amount, currency_amount, vat_rate, product, discount, tax, raw_currency_unit_price, created_at, updated_at. Required: customer_invoice_id.
- **list_all_pennylane_customer_invoice_payments** — List payments for a pennylane customer invoice. Returns: id, label, currency, currency_amount, status, created_at, and updated_at for each payment record. Required: customer_invoice_id. Returns an empty list if the invoice is in draft status or is a credit note.
- **list_all_pennylane_customer_invoice_matched_transactions** — List matched transactions for a pennylane customer invoice. Returns per-transaction details including id, label, date, amount, currency, outstanding_balance, attachment_required, created_at, updated_at, archived_at, and related journal, bank_account, and categories objects. Required: customer_invoice_id. Returns an empty list if the invoice is archived or in draft state.
- **create_a_pennylane_customer_invoice_matched_transaction** — Match a transaction to a pennylane customer invoice. One transaction is matched per call; invoke multiple times to match several transactions to the same invoice. Returns an empty 204 response on success. Required: customer_invoice_id, transaction_id. Not applicable for draft invoices.
- **delete_a_pennylane_customer_invoice_matched_transaction_by_id** — Unmatch a transaction from a pennylane customer invoice by transaction id. Returns an empty 204 response on success. Required: customer_invoice_id, id. Not applicable for draft invoices.
- **list_all_pennylane_customer_invoice_appendices** — List appendices attached to a pennylane customer invoice. Returns: id, url, filename, created_at, updated_at. Required: customer_invoice_id.
- **create_a_pennylane_customer_invoice_appendix** — Upload a file as an appendix for a pennylane customer invoice. Returns: id, url, filename, created_at, updated_at. Required: customer_invoice_id, file.
- **update_a_pennylane_customer_invoice_mark_as_paid_by_id** — Mark a pennylane customer invoice as paid by id. No automatic reconciliation is performed once the invoice is marked as paid. Returns an empty 204 response on success. Required: id.
- **create_a_pennylane_customer_invoice_send_by_email** — Send a finalized pennylane customer invoice or credit note by email. The invoice's PDF must be generated before calling this endpoint — if the PDF is not yet ready, a 409 is returned and you should retry in a few minutes. Returns an empty 204 response on success. Required: id.
- **list_all_pennylane_customer_invoice_categories** — List categories of a pennylane customer invoice. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: customer_invoice_id. Draft invoices return an empty list.
- **update_a_pennylane_customer_invoice_category_by_id** — Update the categories of a pennylane customer invoice. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: customer_invoice_id. Not applicable for draft invoices; weights within each category group must sum to 1.
- **update_a_pennylane_customer_invoice_update_imported_by_id** — Update an imported Pennylane customer invoice or credit note by id. Not applicable for draft invoices. Returns: id, invoice_number, currency, label, date, deadline, amount, currency_amount, currency_tax. Required: id.
- **update_a_pennylane_customer_invoice_finalize_by_id** — Finalize a draft customer invoice or credit note in Pennylane, converting it into an immutable state that can no longer be edited. Returns the finalized invoice object including id, invoice_number, status, draft, amount, currency, paid, date, deadline, created_at, and updated_at. Required: id.
- **create_a_pennylane_customer_invoice_link_credit_note** — Link a credit note to a customer invoice in Pennylane. Returns the updated invoice object including id, invoice_number, status, amount, currency, paid, draft, customer, created_at, and updated_at. Required: id, credit_note_id.
- **list_all_pennylane_supplier_invoice_invoice_lines** — List invoice lines for a pennylane supplier invoice. Returns: id, label, amount, currency_amount, description, vat_rate, currency_amount_before_tax, currency_tax, tax, imputation_dates, created_at, updated_at. Required: supplier_invoice_id. Results can be sorted by id (prefix with `-` for descending order).
- **list_all_pennylane_external_supplier_invoices** — List supplier invoices in Pennylane. Returns: id, invoice_number, currency, amount, date, payment_status, accounting_status, reconciled, paid, supplier, ledger_entry, external_reference, created_at, and updated_at per invoice. Supports filtering by id, supplier_id, invoice_number, date, category_id, external_reference, and payment_status, and sorting by id or date.
- **get_single_pennylane_external_supplier_invoice_by_id** — Get a single Pennylane supplier invoice by id. Returns: id, invoice_number, currency, amount, date, payment_status, accounting_status, reconciled, paid, supplier, ledger_entry, external_reference, created_at, and updated_at. Required: id.
- **update_a_pennylane_external_supplier_invoice_by_id** — Update a Pennylane supplier invoice by id. Returns: id, invoice_number, currency, amount, date, payment_status, accounting_status, reconciled, paid, supplier, ledger_entry, external_reference, created_at, and updated_at. Required: id.
- **list_all_pennylane_supplier_invoice_categories** — List categories of a pennylane supplier invoice. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: supplier_invoice_id.
- **update_a_pennylane_supplier_invoice_category_by_id** — Update (replace) the categories of a pennylane supplier invoice. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Weights within the same category group must sum to 1. Required: supplier_invoice_id.
- **list_all_pennylane_supplier_invoice_payments** — List payments for a pennylane supplier invoice. Returns each payment's id, label, currency, currency_amount, status, created_at, and updated_at. Required: supplier_invoice_id.
- **update_a_pennylane_supplier_invoice_payment_status_by_id** — Update the payment status of a supplier invoice in Pennylane. Returns an empty 204 response on success. Required: supplier_invoice_id, payment_status.
- **list_all_pennylane_supplier_invoice_matched_transactions** — List matched transactions for a pennylane supplier invoice. Returns: id, label, date, amount, currency, outstanding_balance, attachment_required, created_at, bank_account, journal, categories. Required: supplier_invoice_id.
- **create_a_pennylane_supplier_invoice_matched_transaction** — Match a transaction to a pennylane supplier invoice. One transaction is matched per call; invoke multiple times to match multiple transactions to the same invoice. Returns an empty 204 response on success. Required: supplier_invoice_id, transaction_id.
- **delete_a_pennylane_supplier_invoice_matched_transaction_by_id** — Unmatch a transaction from a pennylane supplier invoice. Returns an empty 204 response on success. Required: supplier_invoice_id, id.
- **create_a_pennylane_supplier_invoice_linked_purchase_request** — Link a purchase request to a supplier invoice in pennylane. One purchase request can be linked per call; invoke the endpoint multiple times to link additional purchase requests to the same invoice. Returns an empty 204 response on success. Required: supplier_invoice_id, purchase_request_id.
- **create_a_pennylane_supplier_invoices_import** — Import a supplier invoice with a file attachment in Pennylane. Returns the created invoice including id, accounting_status, currency_amount, date, deadline, paid, payment_status, reconciled, supplier, external_reference, and created_at. Required: file_attachment_id, supplier_id, date, deadline, currency_amount_before_tax, currency_amount, currency_tax, invoice_lines.
- **update_a_pennylane_supplier_invoice_validate_accounting_by_id** — Validate the accounting of a pennylane supplier invoice, transitioning it to the Complete state. Returns the updated supplier invoice including id, invoice_number, accounting_status, amount, currency, reconciled, paid, payment_status, created_at, and updated_at. Required: id.
- **update_a_pennylane_supplier_invoice_e_invoice_status_by_id** — Update the e-invoice lifecycle status of a pennylane supplier invoice, applying a transition to disputed, refused, or approved. Returns: id, invoice_number, accounting_status, e_invoicing, payment_status, amount, currency, reconciled, created_at, updated_at. Required: supplier_invoice_id, status. Dispute and refuse transitions also require a reason.
- **list_all_pennylane_external_category_groups** — List category groups in pennylane. Returns: id, label, categories, created_at, updated_at for each group in the collection.
- **get_single_pennylane_external_category_group_by_id** — Get a single pennylane category group by id. Returns: id, label, categories (with a URL to fetch member categories), created_at, and updated_at. Required: id.
- **list_all_pennylane_category_group_categories** — List categories belonging to a specific category group in Pennylane. Returns: id, label, direction, analytical_code, created_at, updated_at. Required: category_group_id.
- **list_all_pennylane_external_categories** — List pennylane categories. Returns: id, label, direction, created_at, updated_at, category_group, analytical_code. Supports optional filtering by id, label, category_group_id, or analytical_code and sorting by id.
- **create_a_pennylane_external_category** — Create a new pennylane category. Returns: id, label, direction, created_at, updated_at, category_group, analytical_code. Required: label, category_group_id.
- **get_single_pennylane_external_category_by_id** — Retrieve a specific pennylane category by id. Returns: id, label, direction, created_at, updated_at, category_group, analytical_code. Required: id.
- **update_a_pennylane_external_category_by_id** — Update a pennylane category by id. Returns: id, label, direction, created_at, updated_at, category_group, analytical_code. Required: id.
- **list_all_pennylane_external_trial_balances** — List pennylane trial balance entries for the current company within a given period, returning balances grouped by ledger accounts. Returns: number, formatted_number, label, debits, credits for each ledger account. Required: period_start, period_end.
- **list_all_pennylane_external_fiscal_years** — List fiscal years of the company in pennylane. Returns: id, start, finish, status, created_at, and updated_at for each fiscal year. Use the sort parameter to order results by id or start date.
- **list_all_pennylane_changelogs_customer_invoices** — List customer invoice change events in pennylane, returned in ascending processed_at order. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter by start_date (RFC3339 format); changes are retained for the last 4 weeks only — providing a start_date older than 4 weeks results in a 422 error.
- **list_all_pennylane_changelogs_supplier_invoices** — List pennylane supplier invoice change events ordered by processed_at ascending. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter by start_date (RFC3339 format); changes older than 4 weeks are not retained and supplying a start_date older than that returns a 422 error.
- **list_all_pennylane_changelogs_customers** — List customer change events from the Pennylane changelog, ordered by processed_at ascending (oldest first). Returns: id, operation, processed_at, updated_at, created_at. Optionally filter by start_date (RFC3339); changes older than 4 weeks are not retained.
- **list_all_pennylane_changelogs_suppliers** — List supplier change events in Pennylane, returned in ascending processed_at order. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter with start_date (RFC3339 format); only changes from the last 4 weeks are retained.
- **list_all_pennylane_changelogs_products** — List product change events in Pennylane. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter by start_date (RFC3339); changes are retained for only the last 4 weeks — a start_date older than that returns a 422 error.
- **list_all_pennylane_changelogs_ledger_entry_lines** — List ledger entry line change events in Pennylane ordered by processed_at ascending. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter by start_date; changes older than 4 weeks are not retained and will result in a 422 error.
- **list_all_pennylane_changelogs_transactions** — List transaction change events in Pennylane ordered by processed_at ascending. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter by start_date (RFC3339). Changes are retained for the last 4 weeks only; a start_date older than 4 weeks returns a 422 error.
- **list_all_pennylane_changelogs_quotes** — List quote change events from the Pennylane changelog, ordered by processed_at ascending. Returns: id, operation, processed_at, updated_at, created_at. Optionally filter from a specific point in time using start_date (RFC3339 format); changes older than 4 weeks are not retained.
- **list_all_pennylane_external_bank_accounts** — List pennylane bank accounts. Returns: id, name, currency, balance, created_at, updated_at, bank_establishment, journal, and ledger_account per item. Results can be sorted by id (prefix with `-` for descending order).
- **create_a_pennylane_external_bank_account** — Create a new bank account in pennylane. Returns the created account including id, name, currency, balance, created_at, updated_at, bank_establishment, journal, and ledger_account. Required: name.
- **get_single_pennylane_external_bank_account_by_id** — Get a single pennylane bank account by id. Returns: id, name, currency, balance, created_at, updated_at, bank_establishment, journal, and ledger_account. Required: id.
- **list_all_pennylane_external_transactions** — List pennylane banking transactions with optional filtering and sorting. Returns: id, label, date, amount, currency, bank_account, journal, categories, attachment_required, outstanding_balance, created_at, and other transaction fields per item. Use filter to narrow by id, bank_account_id, journal_id, or date; use sort to order by id (prefix with - for descending).
- **create_a_pennylane_external_transaction** — Create a banking transaction in pennylane. Returns: id, label, date, amount, currency, bank_account, journal, categories, attachment_required, outstanding_balance, created_at, and other transaction fields. Required: bank_account_id, label, date, amount.
- **get_single_pennylane_external_transaction_by_id** — Get a single pennylane banking transaction by id. Returns: id, label, date, amount, currency, bank_account, journal, categories, attachment_required, outstanding_balance, created_at, and other transaction fields. Required: id.
- **update_a_pennylane_external_transaction_by_id** — Update a pennylane banking transaction by id. Returns: id, label, date, amount, currency, bank_account, journal, categories, attachment_required, outstanding_balance, created_at, and other transaction fields. Required: id.
- **list_all_pennylane_transaction_categories** — List categories of a pennylane bank transaction. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: transaction_id.
- **update_a_pennylane_transaction_category_by_id** — Update the categories of a pennylane bank transaction, replacing all existing assignments with the provided array. Categories in the same group must have weights summing to 1. Returns: id, label, weight, category_group, analytical_code, created_at, updated_at. Required: transaction_id; each body item requires id and weight.
- **list_all_pennylane_transaction_matched_invoices** — List invoices matched to a pennylane bank transaction. Returns: id, type, url for each matched invoice. Required: transaction_id.
- **list_all_pennylane_quote_appendices** — List appendices of a pennylane quote. Returns: id, url, filename, created_at, updated_at. Required: quote_id.
- **create_a_pennylane_quote_appendix** — Upload a file as an appendix attached to a pennylane quote. Returns: id, url, filename, created_at, updated_at. Required: quote_id, file.
- **list_all_pennylane_quote_invoice_lines** — List invoice lines for a pennylane quote. Returns: id, label, quantity, amount, currency_amount, vat_rate, product, discount, raw_currency_unit_price, currency_amount_before_tax, currency_tax, tax, section_rank, created_at, updated_at. Required: quote_id.
- **list_all_pennylane_quote_invoice_line_sections** — List invoice line sections for a pennylane quote. Returns: id, title, description, rank, created_at, updated_at. Required: quote_id.
- **create_a_pennylane_quote_send_by_email** — Send a pennylane quote by email to its customer. The quote's PDF must be fully generated before calling this endpoint; if it is not ready yet, pennylane returns a 409 — retry after a few minutes. Returns an empty 204 response on success. Required: id.
- **update_a_pennylane_quote_update_status_by_id** — Update the status of a pennylane quote by id. Returns the updated quote object including id, quote_number, status, amount, currency, date, deadline, customer, created_at, and updated_at. Required: id, status.
- **list_all_pennylane_external_commercial_documents** — List pennylane commercial documents. Returns each document's id, document_type, document_number, currency, amount, currency_amount, date, customer, invoice_lines, external_reference, archived_at, and created_at, among other fields. Supports filtering by id, customer_id, or document_type and sorting by id.
- **get_single_pennylane_external_commercial_document_by_id** — Get a single pennylane commercial document by id. Returns the full document record including id, document_type, document_number, currency, amount, currency_amount, date, deadline, customer, invoice_lines, external_reference, archived_at, and created_at. Required: id.
- **list_all_pennylane_commercial_document_appendices** — List appendices attached to a pennylane commercial document. Returns: id, url, filename, created_at, updated_at. Required: commercial_document_id.
- **create_a_pennylane_commercial_document_appendix** — Upload a file as an appendix for a pennylane commercial document. Returns: id, url, filename, created_at, updated_at. Required: commercial_document_id, file. Allowed file types: image/png, image/jpeg, image/tiff, image/bmp, image/gif, application/pdf.
- **list_all_pennylane_commercial_document_invoice_lines** — List invoice lines for a pennylane commercial document. Returns: id, label, quantity, amount, currency_amount, vat_rate, currency_amount_before_tax, currency_tax, tax, raw_currency_unit_price, unit, description, product, discount, section_rank, created_at, updated_at. Required: commercial_document_id. Optionally sort by id (prefix with `-` for descending; defaults to `-id`).
- **list_all_pennylane_commercial_document_invoice_line_sections** — List invoice line sections for a pennylane commercial document. Returns: id, title, description, rank, created_at, updated_at. Required: commercial_document_id.
- **list_all_pennylane_external_sepa_mandates** — List all SEPA mandates associated with your company in pennylane. Returns: id, bank, bic, iban, sequence_type, signed_at, identifier, customer, created_at, updated_at. Supports filtering by id or customer_id and sorting by id.
- **create_a_pennylane_external_sepa_mandate** — Create a SEPA mandate in pennylane to enable direct debit payments for a customer. Returns: id, bank, bic, iban, sequence_type, signed_at, identifier, customer, created_at, updated_at. Required: bic, iban, signed_at, identifier, customer_id.
- **get_single_pennylane_external_sepa_mandate_by_id** — Get a specific SEPA mandate by id in pennylane. Returns: id, bank, bic, iban, sequence_type, signed_at, identifier, customer, created_at, updated_at. Required: id.
- **update_a_pennylane_external_sepa_mandate_by_id** — Update an existing SEPA mandate by id in pennylane. Returns: id, bank, bic, iban, sequence_type, signed_at, identifier, customer, created_at, updated_at. Required: id, bic, iban, signed_at, identifier, customer_id.
- **delete_a_pennylane_external_sepa_mandate_by_id** — Delete a SEPA mandate by id in pennylane. Returns an empty 204 response on success. Required: id.
- **list_all_pennylane_external_gocardless_mandates** — List GoCardless mandates in Pennylane. Returns: id, external_reference, status, customer, external_customer_account, external_customer_label, created_at, updated_at. Supports filtering by id, customer_id, and external_reference, and sorting by id.
- **get_single_pennylane_external_gocardless_mandate_by_id** — Get a single GoCardless mandate in Pennylane by id. Returns: id, external_reference, status, customer, external_customer_account, external_customer_label, created_at, updated_at. Required: id.
- **create_a_pennylane_gocardless_mandates_mail_request** — Send a GoCardless mandate email request to a customer in Pennylane. Returns an empty 204 response on success. Required: customer_id, email (must include recipients).
- **create_a_pennylane_gocardless_mandate_cancellation** — Cancel a GoCardless mandate in Pennylane. The mandate must have a status of pending_submission, submitted, or active. Returns an empty 204 response on success. Required: gocardless_mandate_id.
- **create_a_pennylane_gocardless_mandate_association** — Associate a GoCardless mandate to a customer in Pennylane. Returns an empty 200 response on success. Required: gocardless_mandate_id, customer_id.
- **create_a_pennylane_pro_account_mandate_request** — Create a pennylane Pro Account SEPA Direct Debit mandate request and send it to a customer. Returns an empty 201 response on success. Required: customer_id.
- **list_all_pennylane_pro_account_mandate_migrations** — List pennylane mandate migration candidates eligible for Pro Account migration. Returns: id, status, direct_debit_method, signed_at, migrated_at, migration_started_at, mandate, customer, created_at, and updated_at per candidate. Supports filtering by customer_id or status and sorting by id.
- **create_a_pennylane_pro_account_mandate_migration** — Migrate a mandate to a Pro Account in pennylane. Returns the mandate_migration object including id, status, direct_debit_method, signed_at, mandate, customer, created_at, and updated_at. Required: mandate_type, mandate_id. Only mandates with status 'available' are eligible for migration.
- **list_all_pennylane_pro_account_mandates** — List all payment mandates associated with a pennylane Pro Account. Returns: status, early_execution_date_permitted, active_billing_subscription, signed_at, created_at, pdf_url, and customer. Supports filtering by status or customer_id and sorting by id.
- **list_all_pennylane_customer_invoice_custom_header_fields** — List custom header fields for a pennylane customer invoice. Returns: id, title, value, rank, created_at, updated_at. Required: customer_invoice_id.
- **create_a_pennylane_purchase_requests_import** — Import a purchase order in pennylane, creating an automatically validated purchase request with the attached file. Returns: id, status, purchase_order_number, supplier, delivery_address, currency_amount, currency_amount_before_tax, exchange_rate, purchase_order, linked_invoices, created_at, updated_at. Required: file_attachment_id, reason, supplier_id, purchase_order_number, currency_amount_before_tax, currency_amount, currency_tax, delivery_address, purchase_request_lines.
- **get_single_pennylane_external_purchase_request_by_id** — Get a pennylane purchase request by id. Returns the full request object including id, purchase_order_number, status, supplier, delivery_address, currency, amount, currency_amount, currency_amount_before_tax, exchange_rate, currency_tax, tax, reason, estimated_delivery_date, purchase_order, linked_invoices, created_at, and updated_at. Required: id.
- **list_all_pennylane_external_purchase_requests** — List pennylane purchase requests. Returns a collection of purchase request records each including id, purchase_order_number, status, supplier, delivery_address, currency, amount, currency_amount, reason, estimated_delivery_date, purchase_order, linked_invoices, created_at, and updated_at. Supports filtering by id, reviewed_by_id, user_id, or supplier_id, and sorting by id (defaults to descending).
- **list_all_pennylane_external_bank_establishments** — List bank establishments in pennylane. Returns: id, name, created_at, updated_at. Optionally filter by id or sort results using the filter and sort parameters.
- **list_all_pennylane_ledger_entry_ledger_entry_lines** — List all ledger entry lines belonging to a specific pennylane ledger entry. Returns: id. Required: ledger_entry_id.
- **create_a_pennylane_customer_invoice_e_invoice_import** — Import e-invoices for customer invoices in pennylane by submitting a JSON payload to the e-invoice imports endpoint. Returns an empty 204 response on success.
- **create_a_pennylane_supplier_invoice_e_invoice_import** — Import e-invoices for supplier invoices into Pennylane. No source documentation was found for this endpoint, so request body fields and response shape cannot be enumerated. Returns an empty 204 response on success.

## How it works

1. **Link your customer's Pennylane account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Pennylane.** The Proxy API is a 1-to-1 mapping of the Pennylane API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Embed accounting sync for European SMB customers** — If your SaaS serves French, German, or Spanish SMBs, Pennylane is rapidly becoming the default Financial OS for their finance teams and CPAs. Offering a native integration removes a major adoption blocker for finance-led buyers.
- **Automate spend management and AP workflows** — Spend management, corporate card, and AP automation tools can push coded supplier invoices, attach receipt PDFs, and auto-reconcile against bank transactions — eliminating manual data entry for the accountant.
- **Ship e-invoicing compliance for the French mandate** — With mandatory e-invoicing rolling out in France, billing and e-commerce SaaS can use Pennylane to handle Factur-X imports and direct submission to Partner Dematerialization Platforms (PA), keeping merchants compliant without building the pipeline themselves.
- **Post payroll and revenue journal entries directly to the ledger** — Payroll, HRIS, and revenue recognition tools can bypass invoice modules and push balanced debit/credit ledger entries straight into the right journal — automating the most tedious part of monthly close.
- **Sync procurement and purchase orders end-to-end** — Procurement SaaS platforms can push approved purchase requests into Pennylane and later link the matching supplier invoice, giving CFOs continuous visibility from commitment to payment.

## What you can build

- **Two-way supplier invoice sync with attachments** — Import supplier invoices with structured line items and attach the original PDF or receipt as a file attachment, then update status and accounting validation from your app.
- **Customer invoice automation with e-invoicing** — Create, finalize, and send customer invoices by email or directly to a government PA platform, including Factur-X imports for compliant French e-invoicing.
- **Bank transaction reconciliation engine** — Push external bank accounts and transactions, then programmatically match them to customer or supplier invoices to close the AR/AP loop automatically.
- **Direct journal entry posting for payroll and revenue** — List available journals and post balanced ledger entry lines against the correct ledger accounts, with lettering support for reconciled entries.
- **Incremental sync via changelog endpoints** — Build a performant, stateful sync engine using Pennylane's changelog endpoints for invoices, customers, suppliers, products, transactions, and ledger entries — no full polling required.
- **SEPA and GoCardless mandate management** — Create, update, and cancel SEPA and GoCardless direct debit mandates, request mandate emails, and associate them with customers for recurring billing flows.

## FAQs

### How is authentication handled for Pennylane?

Truto manages the Pennylane auth flow for you — your end users connect their Pennylane account through Truto's connect UI or link tokens, and Truto handles token storage, refresh, and credential rotation. You call the Pennylane tools using a Truto integrated account ID.

### Can I receive real-time events from Pennylane?

Yes. Pennylane supports external webhook subscriptions, and Truto exposes tools to list, create, update, and delete them. You can subscribe to events like invoice payments, customer/supplier changes, and ledger updates, then receive them through Truto's webhook delivery.

### How do I run incremental syncs efficiently?

Use Pennylane's changelog endpoints, available through Truto, for customer invoices, supplier invoices, customers, suppliers, products, ledger entry lines, transactions, and quotes. These return only records modified in the recent window, so you avoid full re-polling on every sync.

### Does the integration support e-invoicing and Factur-X?

Yes. You can import e-invoices (including Factur-X) for both customer and supplier invoices, send customer invoices directly to a Partner Dematerialization Platform (PA), and update e-invoice status on supplier invoices.

### Can I attach files like receipts or PDFs to invoices?

Yes. Use the file attachment and ledger attachment tools to upload PDFs and link them to supplier invoices, customer invoices, ledger entries, quotes, and commercial documents — keeping source documents in sync with structured data.

### What accounting objects can I read and write?

Through Truto you can work with customer and supplier invoices, customers (company and individual), suppliers, products, journals, ledger accounts, ledger entry lines, categories, transactions, bank accounts, quotes, purchase requests, billing subscriptions, SEPA/GoCardless mandates, trial balances, fiscal years, and FEC/general ledger exports.

## Related reading

- [Connect Pennylane to Claude: Manage Sales, Billing and Customers](https://truto.one/blog/connect-pennylane-to-claude-manage-sales-billing-and-customers/) — Learn how to connect Pennylane to Claude using a managed MCP server. Automate invoicing, reconcile transactions, and manage billing without custom code.
- [Connect Pennylane to ChatGPT: Sync Ledger and Financial Reporting](https://truto.one/blog/connect-pennylane-to-chatgpt-sync-ledger-and-financial-reporting/) — Learn how to connect Pennylane to ChatGPT using a managed MCP server. Automate ledger lettering, FEC exports, and invoice processing with AI.
