maesn

Pennylane API Integration

Pennylane is a French accounting platform for small and mid-sized companies and for the accounting firms that work with them. It covers invoicing, supplier invoices, VAT and the ledger, and it is growing quickly in its home market. Connect it through Maesn and you reach it with the same REST API and the same data model as every other supported system.

YOUR PRODUCT+26
Trusted by winning software teams
HubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicapHubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicap
What it takes

What a Pennylane integration costs

Pennylane is the system in this catalogue where the build is not the long pole. Getting a credential is, and it happens before any code runs. Here is what the integration actually asks of you, and what Maesn takes off the table.

Pennylane: The credential comes from a person

The partner step, walked with you

Pennylane hands out no credentials on a form. Its partnerships team reviews your integration first, and the client ID and secret follow once that review is done. The secret is shown a single time and cannot be retrieved later, so losing it means a new application rather than a reset. Maesn does that step with you rather than pointing at a form, and provides a sandbox in the meantime: Pennylane publishes no free trial account, so without one there is nothing to build against.

Pennylane: One request budget for every endpoint

The ceiling stated, not glossed over

Pennylane allows 25 requests every 5 seconds, counted per token and across all endpoints, in the sandbox as well as in production. Creating a single customer invoice costs several sequential calls against that same budget. Maesn runs the orchestration and returns one error contract for the 429, so the retry logic is written once rather than once per system.

Pennylane: Nothing calls your endpoint

A delta pull on the filter you already wrote

Pennylane's webhooks are in beta and its own documentation recommends the changelog endpoints instead, and no event is enabled here today. What replaces it is a scheduled read on the same filter and the same pagination you use for every other system, with the cursor normalised away.

What reaches your code is a REST call and an account key. The slow part of Pennylane is the credential rather than the build, and it is a step you take once for every customer who follows.

A short call is usually enough to tell whether Maesn fits your use case.

Customer voice

Clockin turned integrations into a way into new markets

Clockin digitises time tracking for small and mid-sized businesses. The integrations they built stopped being a support cost and started bringing customers in, which is the same trade a place in the Pennylane ecosystem offers a product that wants to reach French companies and their accountants.

We use Maesn to successfully leverage integrations and partnerships as a key driver for lead generation and expansion into new markets and customer segments.
Fabian Ebbert
CSO, Clockin
Why companies choose Maesn

Three reasons to reach the Pennylane API through Maesn

Connecting Pennylane directly is a manageable project once the credential exists. Keeping it alive through token rotation, staying inside one shared request budget and then adding the next system is the part that decides your roadmap.

01

The Pennylane-specific work stays here

Access tokens last 24 hours, and every refresh invalidates the refresh token it used. Two of your workers refreshing in the same second therefore cancel each other out and send that customer back to the consent screen. Maesn refreshes each connected customer in one place and in order, so the race cannot happen, and re-sends the filter that Pennylane's cursor drops between pages. None of it reaches your code.

02

What is switched on, in writing

Customers and suppliers come back readable and writable, which is the counterparty pair every payables and receivables flow starts from. Read and write cover the same list here, so a record that arrives from Pennylane can be written back to Pennylane without a second mapping. Everything beyond that list is available on request.

03

The next system costs nothing

Once Pennylane runs, every other supported accounting and ERP system answers on the same interface with the same data model. The two headers stay the same and the change-detection loop you wrote here keeps working. Your second integration is a configuration step rather than a second project.

Technology partner

Pennylane access runs through its partner programme

Most providers stop at the API. Maesn does the technical enablement and the relationship, and on Pennylane the two are the same conversation: the credential your integration needs is the outcome of the partnership rather than something you configure before it.

Technical enablement

One integration against the Unified API and one data model, identical to every other system Maesn supports. Your engineers meet the same interface here as they will for the next system.

Partnership support

Maesn takes you through the Pennylane partnership step, from the technical requirements to the submission, rather than handing you a form and a link.

How Pennylane grants access

The relationship comes before the credential

Pennylane's own documentation sends developers to its partnerships team to register an application, and the client ID and secret arrive once that application has been validated. There is no self-service route to a production credential, and neither side publishes how long validation takes, so it belongs in the plan as a lead time.

Production listings run on OAuth

A company API token is enough to try things out in a sandbox, and Pennylane's own guides use one for exactly that. For an integration published through its marketplace it requires OAuth 2.0 instead, so the flow you ship is the one described in the authentication section above rather than the one you prototyped with. Worth knowing before the prototype, not after.

The audience is French companies and their accountants

Pennylane sits between businesses and the accounting firms that keep their books, and its partner programme is run out of France in French. That is who a listing puts your product in front of, and it is worth knowing which of the two you are selling to.

The integration runs under your product's name, and the partner status is yours rather than ours. Maesn is the layer behind it.

We go through the Pennylane requirements and the submission with you.

Authentication

One Pennylane client of your own, refreshed for you

Pennylane authenticates with OAuth 2.0, and the application your customers authorise is yours rather than Maesn's. It is the plain redirect flow: your customer visits Pennylane's consent screen once, and the account key comes back to you afterwards. No separate company selection step is needed, because a Pennylane token already names the company it is scoped to.

Auth method
OAuth 2.0
Client credentials issued by Pennylane

One integration, every customer. Maesn holds the credentials and runs the handshake, the rotation and the re-authentication behind them.

What Maesn holds for you
Your client credentials
The client ID and secret Pennylane issued to you are submitted once and used for every connection afterwards, so the code exchange runs here rather than in your backend. What your code holds is an account key per customer.
The token cycle, which is the part that bites
Access tokens last 24 hours. Every refresh immediately invalidates the refresh token it consumed and returns a new one, and the refresh window closes after 90 days. Maesn keeps the current pair for each connected customer and refreshes them one at a time, so a race between two of your workers cannot strand anybody.

Pennylane scopes a token either to one company or, for accounting firms, to all the companies that firm manages, and in the second case each call still has to name the company it is for. That is a property of the token rather than of the flow, so it is worth confirming which of the two your customers hold before you design the connect step.

How your customer connects
  1. 1

    Your customer starts in your product

    You send them into the flow and Maesn opens Pennylane's consent screen. It carries your application's name, because the client is registered to your company, so the connection reads as yours rather than as a third party's.

  2. 2

    Pennylane returns to Maesn

    The callback on your client points at Maesn, so Maesn receives the authorisation code and exchanges it for the first access and refresh token. That exchange never runs in your backend, and your customer lands back in your product with nothing to paste.

  3. 3

    You work with one account key

    Maesn stores the connection and returns an account key. From there every request carries your API key plus that account key, the same two headers you already send for every other system in the catalogue.

Every system in the catalogue authenticates differently, and Pennylane is the case where the credential is hard to obtain and then easy to lose: a refresh token that is used twice is gone, and the end user who connected the account has to go through consent again. Unified authentication is where that lives. The rotation, the storage of the current pair and the serialised refresh are handled once for every system rather than once per system, so nothing about the token cycle reaches the code you write.

Staying in sync

Change on Pennylane arrives on your schedule

Change detection on Pennylane is a scheduled read, and it is the same scheduled read you already run for every other system in the catalogue. Pennylane's own webhooks are in beta, and its documentation recommends the changelog endpoints instead while that lasts, so pulling here is the vendor's own recommendation rather than a workaround.

What Pennylane sends

Three events, all of them in beta, and Pennylane's own advice is to fall back on its changelog endpoints while that lasts. A changelog entry reports a resource ID and an operation rather than the record itself, so something still has to read the object afterwards.

What you run instead

One scheduled read, with the same filter and the same pagination you use for every other system. The code that detects change on Pennylane is the code you already wrote, pointed at a different account key.

The interval is a product decision with a hard edge behind it: Pennylane keeps four weeks of change history and will not answer for anything older. Inside that window a delta pull catches up cleanly after downtime, which a missed push never does. Outside it, what is left is a full comparison.

Writing change detection once per system is where the cost of a direct integration shows up most plainly: a loop for Pennylane, then another one for the next system with its own filter syntax and its own idea of what a page is. Pennylane pages with a cursor that carries your position and not your filter, so a request that forgets to re-send it comes back with unfiltered rows rather than an error. One way to filter and page is what removes that class of mistake. What you handle through the event model and what you pull on a schedule stay two paths, and only one of them is Pennylane’s today.

Before you start

What Pennylane asks for up front

Most of this list is about the credential rather than the code, because on Pennylane the credential comes first. Four things are worth having decided before you start.

A Pennylane OAuth client, issued by their partnerships team
Not a self-service registration. Pennylane validates the integration first and then hands over a client ID and secret, and the secret cannot be retrieved afterwards. Losing it means a new application rather than a reset.
The eleven scopes that client has to carry
Customers, suppliers, customer and supplier invoices, the ledger, file attachments, categories, products and quotes, plus bank accounts and transactions as read only. The list is in the documentation, and it is worth reading before you submit rather than after.
A place to keep per-company identifiers
Customer, product and ledger account IDs differ from one Pennylane company to the next, and its ledger accounts follow the French chart of accounts. Store them per connected company, because the same product carries a different ID for every customer you connect.
A schedule, and a window it has to stay inside
Change detection is a read you run on an interval. Pennylane keeps its change history for four weeks and refuses to look further back, so an integration that goes quiet for longer needs a full comparison rather than a catch-up.

We walk through the credential and the partner step with you.

The data model

One shape for Pennylane, and for the system after it

Pennylane keeps its books on the French chart of accounts, and its identifiers differ from one connected company to the next. A shared shape is what keeps both of those out of the code you write.

Everything readable is also writable, and nothing updates

Customers and suppliers are enabled in both directions. Updates in place are not: you can create a supplier and there is no enabled path to change it afterwards, so plan corrections before you plan the first write.

The scope list is wider than what is switched on

The client you register with Pennylane carries eleven scopes, from invoices to the ledger. Customers and suppliers are what is enabled through Maesn today, and the rest of that list is available on request, so tell us which objects your use case needs.

No object deletes by default

No object has delete enabled. Accounting practice expects corrections and cancellations as new documents anyway, so plan them that way rather than around a delete you would have to request.

Whatever the connection carries comes back in the shared common data model, so a contact from Pennylane has the same shape as a contact from a system ten times its size, and the code you write here is the code you reuse for the next one.

The ceiling is worth designing for rather than discovering. Pennylane allows 25 requests every 5 seconds per token across every endpoint, and a single invoice takes several calls to assemble, so a bulk job meets the limit long before a single sync does. When it does, the 429 arrives with the headers that say when to come back, and one error contract is what keeps that from being a Pennylane-shaped branch in your code.

Tell us which objects your use case needs and we will confirm what is possible.

Pennylane FAQ

Pennylane API questions

What is Pennylane?

Pennylane is a French accounting platform for small and mid-sized companies and the accounting firms that work with them, covering invoicing, supplier invoices, VAT and the ledger. For a software team the relevant part is how it is reached: OAuth 2.0 with credentials the vendor issues by hand, a shared request budget across all endpoints and change detection through a changelog rather than an event.

How do I get access to the Pennylane API?

Through Pennylane's partnerships team rather than a developer portal. You describe the integration and the scopes it needs, and once it is validated you receive a client ID and a client secret. The secret is shown once and cannot be retrieved later, so store it before you close the page. Maesn goes through that step with you and can provide a sandbox to build against in the meantime.

Which software is a Pennylane partner and how do I get listed?

Pennylane runs its own technology partner programme and publishes the list of partners itself, so that page is the answer to who is on it today. Getting on it means a qualification process with their partnership team, and production integrations published through the marketplace have to use OAuth 2.0 rather than a company token. Maesn supports you through the technical requirements and the submission.

How does Pennylane authentication work?

OAuth 2.0 with a client your company registers with Pennylane. Access tokens are valid for 24 hours, and every refresh immediately invalidates the refresh token it used and returns a new one, with the refresh window closing after 90 days. Two workers refreshing at the same time will strand the connection, which is why Maesn keeps the current pair for each connected customer and refreshes them one at a time.

Does Pennylane support webhooks?

Not in a form you should build on today. Pennylane has a webhook feature, and its own documentation carries a beta warning that recommends falling back on the changelog endpoints while that lasts. No event is enabled through Maesn either. Change detection is therefore a scheduled read using the same filter and pagination as every other system in the catalogue.

Which data can I read and write in Pennylane?

Customers and suppliers are readable and writable today. No object updates in place, no object deletes and no object sends a native event. 69 further combinations are marked on demand, which means not enabled by default rather than unavailable. Tell us which ones your use case needs and we will confirm what is possible.

What are Pennylane's rate limits?

25 requests every 5 seconds, applied per token and across all endpoints rather than per endpoint. It is enforced in the sandbox as well as in production, and it is worth planning for, because operations like creating a customer invoice take several sequential calls against that same budget. Maesn runs that orchestration and hands you one error shape for the 429 instead of one per system.

Is a sandbox available for Pennylane development?

Pennylane publishes no free trial account, so there is nothing to sign up for. Maesn provides a sandbox for Pennylane, as it does for every system it supports, which means you can build while the credential conversation is still running. The rate limit applies there too.

Why integrate Pennylane through Maesn instead of directly?

Because the work does not stop at Pennylane. Direct means owning the partnership step, the 24-hour token and its rotating refresh, a cursor that forgets your filter between pages, a four-week ceiling on change history and the multi-call orchestration behind a single invoice, for one system in one country. Through Maesn you build once against one data model, and every other supported accounting and ERP system is then reachable on the same interface.
Ship your ERP and accounting integrations. Connect once.
Book a demo