# Pennylane MCP connector

The Pennylane connector brings your invoices, journals, ledger accounts and ledger entries into Claude, ChatGPT, Cursor and other AI clients through Elaichi, so each person can look up, book and reconcile entries inside their own Pennylane access.

Source: https://elaichi.ai/connectors/pennylane/

## Facts

| | |
| --- | --- |
| Application | Pennylane |
| Category | Accounting |
| AI tools | 153 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 153 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Pennylane is connected

- Show ledger entries posted to account 401 last month.
- Which journals have no entries this quarter?
- List ledger accounts created since April with their attachments.

## Connect Pennylane in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Pennylane.
2. Optionally set Share with, then press Connect.
3. Paste a Pennylane API key. One person generates a token in Pennylane and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Pennylane tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Pennylane to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Pennylane to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Pennylane to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Pennylane to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Pennylane tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Pennylane through Elaichi

### Book a journal entry from a plain request

Accounting. Describe the transaction, the journal and the account, and the entry lines are created in Pennylane with the supporting document attached to the ledger.

### Match payments to the invoices they settle

Accounting. Ask for the open lines on a customer account and letter the payment against the right invoice lines in Pennylane, or undo a matching that was made in error.

### Import a batch of customer invoices

Finance. Hand over the invoices from your billing tool and have them imported into Pennylane in one pass instead of keying each one by hand.

### Bring received e-invoices into the books

Accounts payable. Import the electronic invoices your suppliers send so they land in Pennylane ready for review, coding and payment.

### Recategorize ledger lines before month end

Bookkeeping. Pull the ledger entry lines still sitting in the wrong category, check them one by one, and move each to the right category in Pennylane before the close.

### Get told when the ledger changes

Finance operations. Set up and manage Pennylane webhook subscriptions so your other systems hear about new entries as they happen, and review or remove those subscriptions when they are no longer needed.

## Frequently asked questions

### How do I connect Pennylane to Claude?

First connect Pennylane in Elaichi by pasting the API key from your Pennylane account, then in Claude open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint. Pennylane connects with an API key, so there is no OAuth application to register and no client ID or secret to generate. You sign in to Elaichi with your own account, and from then on Claude reaches Pennylane through that one endpoint.

### Does Pennylane work with ChatGPT and Cursor as well as Claude?

Yes. Once Pennylane is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Pennylane once and every client you use picks it up.

### What can an AI agent actually do with my Pennylane data?

An agent can list and read your Pennylane journals, ledger accounts and ledger entry lines, create new entries and attach supporting documents, letter payments against invoices, and update the category on a ledger line. It can import customer invoices and received e-invoices in bulk, and manage the webhook subscriptions that tell other systems when Pennylane changes. Because this connector covers a lot of ground, short concrete asks such as "show me the unmatched lines on account 411" work better than long paragraphs.

### Does connecting Pennylane give the AI access to all of my company's books?

No. Every call to Pennylane runs inside the access of the person who signed in to Elaichi, so an agent sees the same journals, accounts and invoices that person could already see in Pennylane. Elaichi can narrow that further, for example to reading only, but it can never widen access beyond what Pennylane itself grants.

### Can my team share one Pennylane connection?

Yes. One person connects Pennylane in Elaichi and shares the connection with a team, and nobody else ever handles the API key. Each teammate still signs in to Elaichi as themselves, so the audit log records who booked which entry or lettered which payment in Pennylane.

### Can I stop an agent from deleting or changing things in Pennylane?

Yes. Restrictions in Elaichi apply per action, so you can allow reading Pennylane ledger entries while blocking the creation of entries, the removal of lettering or the deletion of webhook subscriptions. A blocked action is never advertised to Claude, ChatGPT, Cursor or any other client, so no prompt can reach it.

### What happens to a Pennylane connection when someone leaves the company?

Offboarding that person in Elaichi ends their access to Pennylane through every AI client at once. If they had shared a Pennylane connection with a team, it keeps working for everyone else. If you want it gone entirely, disconnecting Pennylane once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client at the same time.

## All 153 Pennylane tools

Every tool below is callable through https://api.elaichi.ai/mcp once Pennylane is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Pennylane external webhook subscriptions** (List). 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). 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). 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). 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). Delete a pennylane webhook subscription by id. Returns an empty 204 response on success. Required: id.
- **List all Pennylane external journals** (List). 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). 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** (Get). Retrieve a single pennylane journal by id. Returns: id, code, label, type. Required: id.
- **List all Pennylane external ledger accounts** (List). 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). 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). 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). 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** (Create). 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). 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). 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). 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** (Create). 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** (Delete). 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). 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). 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** (Update). 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** (Create). 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** (Create). 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** (Create). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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** (Create). 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). 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). 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** (Get). 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). 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** (Get). 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). 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** (Get). 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). 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** (Get). 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). 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). 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** (Get). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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** (Create). 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** (Delete). 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). 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** (Create). 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** (Update). 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** (Create). 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). 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). 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). 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** (Update). 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** (Create). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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** (Create). 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** (Delete). 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** (Create). 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** (Create). 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** (Update). 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). 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). 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). 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). 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). 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). 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** (Get). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). 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). List appendices of a pennylane quote. Returns: id, url, filename, created_at, updated_at. Required: quote_id.
- **Create a Pennylane quote appendix** (Create). 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). 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). 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** (Create). 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). 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). 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). 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). 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** (Create). 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). 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). 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). 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). 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). 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). 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). Delete a SEPA mandate by id in pennylane. Returns an empty 204 response on success. Required: id.
- **List all Pennylane external gocardless mandates** (List). 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). 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** (Create). 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** (Create). 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** (Create). 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). 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). 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** (Create). 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). 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). 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** (Create). 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). 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). 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). 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). 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** (Create). 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** (Create). 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.
