Accounting
Pennylane
API integration
Ship Accounting features without building the integration. Full Pennylane API access via Proxy and 150+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Talk to usUse Cases
Why integrate with Pennylane
Common scenarios for SaaS companies building Pennylane integrations for their customers.
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
Ship these features with Truto + Pennylane
Concrete product features your team can ship faster by leveraging Truto’s Pennylane integration instead of building from scratch.
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.
SuperAI
Pennylane AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
Why Truto
Why use Truto’s MCP server for Pennylane
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 500+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Pennylane in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Pennylane account
Use Truto’s frontend SDK to connect your customer’s Pennylane account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Pennylane
Truto’s Proxy API is a 1-to-1 mapping of the Pennylane API. You call us, we call Pennylane, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Pennylane’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Pennylane on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
From the Blog
Pennylane integration guides
Deep dives, architecture guides, and practical tutorials for building Pennylane integrations.
Pennylane
Get Pennylane integrated into your app
Our team understands what it takes to make a Pennylane integration successful. A short, crisp 30 minute call with folks who understand the problem.