maesn

Spiris API Integration

Spiris is the Swedish name of Visma eAccounting, and it used to be called SPCS. Behind all three names sits one target system on one API, which is why a connection built for a Norwegian customer already reaches a Swedish one. Maesn holds the token lifecycle, the paging and the regional setup behind a single REST interface, and your product never has to know which of the names a customer uses.

YOUR PRODUCT+25
Trusted by winning software teams
HubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicapHubSpotTipaltiPaywiseRallyQredNordhealthFindityFintoClockinHEROHolviLanes & PlanesAgicap
The problem

Spiris, SPCS and eAccounting name one system

Most of the work on this system is not the endpoints. It is the naming, the scope declaration that cannot be widened later without going back to every customer, and a token that dies without telling anyone. Here is what you do not build.

Spiris: Three names, one system

You integrate once, not per market

Sweden says Spiris, Norway and the Netherlands say eAccounting, and older Swedish material says SPCS. They resolve to the same target system, so there is no second implementation and no mapping table in your code.

Spiris: Scopes are declared up front

The declaration is made once, on this side

This system wants its scopes stated precisely before the first customer connects rather than requested as you go. Maesn submits them with the credentials, so the decision is made once instead of per connection.

Spiris: Fifty results, then silence

The whole set arrives, not the first page of it

The system returns 50 results per page by default and does not object if nobody asks for the rest, so a sync written without explicit paging reports success and returns part of the data. Maesn pages every collection endpoint, so what arrives is complete.

What is left for you is the read you actually wanted, on the same shape you use for every other accounting system you connect.

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

Why companies choose Maesn

Three reasons to reach the Spiris API through Maesn

Building straight against this system is not hard because the API is hard. It is hard because three things about it only become visible after you have shipped.

01

One connection covers three markets

A Swedish customer on Spiris and a Norwegian customer on eAccounting are the same integration. Built directly, you would discover that after treating them as two, and the discovery usually comes from a sales conversation rather than from the documentation.

02

The callback URL is not yours to set

The redirect address of the application has to be changed by Visma on request, not in a settings screen. That is a support conversation in the middle of your build, and it is the kind of dependency that is easy to plan around and expensive to meet unplanned.

03

The same shape as the systems next to it

Reading a customer record here and reading one on a German or Dutch system returns the same object through Maesn. Without that, every market you enter adds a second data model to your product rather than a second connection.

One system, several markets

One Spiris connection also reaches Norway and the Netherlands

The most useful thing to know about this system commercially is that it is not several systems. What changes across its markets is the name a customer says, not the API behind it.

Sweden calls it Spiris and called it SPCS before that. Norway and the Netherlands call it eAccounting. All three names resolve to one target system on one API, so a Swedish customer and a Norwegian customer are the same integration rather than two. Nothing in your product has to branch on which name appears on their invoice.

That matters most at the point where it is easiest to get wrong, which is planning. Teams regularly scope a second integration for the Swedish market before discovering that the work was already done. The direction that costs more is the other one: assuming the names are one system when they are not. Visma runs several products that genuinely are separate, on their own APIs, and the way to tell them apart is the Visma portfolio rather than the brand a prospect mentions.

The technical detail behind this page therefore lives with the target system, and it is written up in full on the Visma eAccounting API integration page. Everything below applies to a Spiris account because it is that system.

Authentication

Spiris scopes are declared before the first customer connects

Spiris authenticates with OAuth 2.0, and two details separate it from the OAuth systems next to it. The scopes are declared precisely and in advance rather than requested as you go, so what your application can reach is settled before the first customer connects. And the token is invalidated silently when a user changes their password, with no notification and no error until something calls. The company selection sits on Visma's side of the consent flow, and in Sweden it is regularly an accounting office doing the picking.

Auth method
OAuth 2.0
Scopes declared up front, three values submitted once
What Maesn holds for you
Three credentials and the scope declaration
Client id, client secret and subscription key, submitted once and reused for every customer regardless of which market they are in. The scope set is declared alongside them rather than negotiated per connection.
The refresh, per tenant
Token refresh runs per tenant on this side, so the lifecycle is not something your product schedules or stores per customer.

Declaring scopes up front is worth planning around rather than working around. Widening them later means going back to every connected customer for a fresh approval, so what your product might need in a year belongs in the conversation before the first one connects.

How your customer connects
  1. 1

    Your customer starts in your product

    You send them into the flow and Maesn opens the consent screen. It carries your application's name, because the application is registered under your company.

  2. 2

    They approve the declared scopes

    The screen shows what was declared in advance, and it asks which company the connection is for. Where an accounting office connects on a client's behalf, that choice is the one step worth getting right.

  3. 3

    You work with one account key

    Maesn stores the connection and returns an account key. Every request carries your Maesn API key plus that key, whichever of the regional brands the customer runs.

Staying in sync

Spiris data stays fresh on one scheduled read

Spiris sends no native events, so freshness here is a scheduled read, and that read runs on the same filter and the same pagination as every other system you connect. Events on a particular object are available on request.

What Spiris pushes on its own

Nothing: the system carries no native event stream, so a change inside a customer's account is visible once something reads it. Where events on a particular object matter to your product, that is what the on demand column is for.

What Maesn runs for you

One scheduled read, on the same filter and the same pagination as every other system you connect, with the paging handled on this side rather than left to a default that stops after the first page.

The paging matters more here than the missing events, because it fails without saying so. A read that stops at the first 50 records returns a valid response and an incomplete answer, and nothing in the payload marks the difference.

The paging is the part worth planning for, because a read that stops at fifty records returns a valid response and an incomplete answer. One way to filter and page turns that from something you have to remember into something you do not, and the event model is where a Spiris object lands the day one of these events is switched on.

Before you start

What a Spiris integration needs before the first call

Three things have to exist before any code runs, and one of them takes longer than the others because it involves a third party.

An active Spiris or Visma eAccounting account
The connection is made against a live account. Which of the two names it is sold under makes no difference to the setup.
Client id, client secret and subscription key
Three values rather than one. They arrive when the application is registered and are submitted once, then used for every customer.
The callback URL, changed by Visma
The application has to point at Maesn's callback address, and that change is requested from Visma rather than made yourself. Worth starting early, because nothing else can be tested until it is done.

We walk through the registration and the callback change with you.

Object coverage

What you read in Spiris today

2 objects read on this connection today, customers and suppliers, and 145 object and operation combinations are available on request, the highest count in the catalogue. Naming the ones your use case needs is how they get switched on.

Showing 2 of 37 objects · 28 more available on demand

Spiris object and operation coverage through the Maesn Unified API
ObjectReadCreateUpdateDeleteWebhook
Customers
Suppliers
Supported
live today
On demand
available on request
Not available
not offered by Spiris

The name is the first thing that goes wrong

A Swedish prospect says Spiris, an older Swedish document says SPCS, and the target system is called Visma eAccounting. Teams routinely scope two integrations before finding out it is one. The target system behind all three names is the same, and nothing in your code has to branch on which one a customer says.

Two objects read today, the rest on request

Customers and suppliers read on this connection now. Anything in your product that has to push into the ledger is in the on demand column rather than switched on, which makes it a request instead of a rebuild: name the objects your use case needs and they get enabled for your connection.

The highest on-demand count in the catalogue

145 of the object and operation combinations on this system are marked as available on request, which is rank one of the 29 systems with a coverage matrix. It means the reach here is wide and the answer to a capability question is a short conversation rather than a lookup.

The callback address depends on a third party

Changing where the application redirects to is done by Visma on request, not in a settings screen. It is a small task with an unpredictable lead time, and it sits in front of every test you want to run.

This is the coverage table of Visma eAccounting, and that is not a substitution. Spiris is that system under its Swedish name, so there is one matrix rather than two, and a figure that differed between them would mean one of the two was wrong.

What the table shows beyond the two is that almost nothing here is marked as unsupported: the great majority sits on request, so the question is which objects to switch on rather than whether the system can carry them. Name the ones your use case uses and that is the conversation.

What you do read arrives in the same common data model as every other connected system, so a customer record from a Swedish account and one from a Norwegian account are the same object in your product, with the same fields in the same shape.

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

Partnerships

The Spiris integration directory is a channel, not a badge

Spiris runs its own integration directory, and it is a distribution channel rather than a badge. It lists more than 400 integrations, each on its own page, and those pages link out to the partner's own site. Getting listed is a conversation with their ecosystem team, and what it needs from you is a page that describes what your product does with Spiris data.

The directory is where Swedish customers look

Their own instructions send a customer to the directory first and to the partner second. A listing is therefore closer to a channel than to a logo on a wall.

What Maesn covers, and what stays yours

The connection, the token lifecycle and the reads are ours. The listing, the description and the customer relationship are yours, and no part of that runs through us.

Spiris FAQ

Spiris API questions

Is Spiris the same thing as Visma eAccounting?

Yes. It is one target system sold under different names by market: Spiris in Sweden, where it used to be called SPCS, and eAccounting in Norway and the Netherlands. An integration built for one of them already reaches the others. The name changed, the API did not.

Do I have to build twice to serve Swedish and Norwegian customers?

No. Both run on the same connection through Maesn, and your code does not branch on the market. What differs is the name your customer uses for the product, and that never reaches your integration.

What happened to SPCS?

SPCS is the older Swedish name for the same product. You will still find it in customer documentation and in older material, and it refers to what is called Spiris today. There is no separate system and no migration on your side.

What can I read from Spiris today?

Customers and suppliers read on this connection now, and 145 of the object and operation combinations are available on request, the highest count of any system in the catalogue. Naming the objects your use case needs is how the rest gets switched on for you.

Does Spiris send webhooks?

Spiris sends no native events, so freshness runs on a scheduled read with Maesn's paging and filtering behind it. Events on a particular object are available on request, so an event your product depends on is something to name rather than to work around.

How long does it take to connect?

The part that is worth planning is not the code. The callback address of your application has to be changed by Visma on request, and the scopes have to be declared before the first customer connects. Both are quick to do and slow to discover late.
Ship your ERP and accounting integrations. Connect once.
Book a demo