Vouchers, invoices, reports, bank, ledgers, payroll and more — described in a public OpenAPI specification.
What is available →claude.ai, Claude Desktop, the mobile app and ChatGPT connect with an ordinary sign-in, read your accounts and add vouchers you approve.
How to connect →For scripts and Claude Code: create a token in Settings, choose full or read-only access, and delete it whenever you like. Access granted via claude.ai appears in the same list.
Create and use a token →REST API: the same things you can do in the app
The app is built on the same API you get access to. Every endpoint under
/api/ is described in an OpenAPI 3 specification that is publicly
available, no login required:
- Swagger UI — browse the endpoints and see parameters and responses.
/v3/api-docs— machine-readable specification (JSON) for code generators and Postman.
| Area | Examples |
|---|---|
| Vouchers and chart of accounts | Record and search vouchers, look up accounts |
| Reports | Trial balance, income statement, balance sheet, general ledger and VAT for any period |
| Invoices and ledgers | Outgoing invoices, open items for customers and suppliers |
| Documents in | Upload a PDF or image that becomes a posting suggestion in the Inbox |
| Bank | Statement import and reconciliation |
| Register sales (v1) | Daily settlements and receipts from cash registers, POS and web shops: /api/v1/salgsimport |
| Payroll, hours, travel and expenses | Employees, payroll runs, time tracking, travel claims |
| Fixed assets, year-end and tax return | Depreciation, year-end closing and the status flow towards filing |
Every call works on the company of the user who owns the token. No parameter can
point to another company — ask for something that is not yours and the API
answers 404.
curl -H "Authorization: Bearer <token>" \
"https://macct.no/api/rapport/saldobalanse?fra=2026-01-01&til=2026-09-30"
Register sales from cash registers, POS and web shops
POST /api/v1/salgsimport/batcher accepts daily settlements or individual sales as JSON,
with totals per VAT code and per payment method. Macct validates and stores the submission but posts
nothing: posting is confirmed by a signed-in user under Register sales. Send an
Idempotency-Key — the same key and content return the same submission, and the same
external ID is never posted twice, whether it arrives through the API or a file. Create the token with
"Sales import only (POS system)" under Settings → API tokens: the POS system can then only send sales
and read the status of its own submissions, not read the accounts or do anything else.
curl -X POST -H "Authorization: Bearer <token>" -H "Idempotency-Key: z-2026-10-10-k1" \
-H "Content-Type: application/json" https://macct.no/api/v1/salgsimport/batcher -d '{
"kilde": "Kassesystem", "importtype": "DAGSOPPGJOR",
"transaksjoner": [{ "eksternId": "Z-1042", "dato": "2026-10-10", "kasse": "K1",
"mvaLinjer": [{ "mvaKode": "3", "netto": 1000.00, "mva": 250.00, "brutto": 1250.00 }],
"betalinger": [{ "betalingsmaate": "KORT", "belop": 1000.00 }, { "betalingsmaate": "KONTANT", "belop": 250.00 }] }]
}'
MCP: let Claude work in your accounts
MCP (Model Context Protocol) is an open standard for giving AI assistants access
to tools. Macct is an MCP server at https://macct.no/api/mcp. Connect
Claude to it and you can say “here is the invoice from Adobe — add it to Macct”,
and Claude sends it through the same flow as the Inbox: reading, supplier lookup,
posting suggestion and checks. Claude shows you the suggestion and posts it only
when you say yes — unless you switch on automatic posting in Settings yourself.
The same applies in ChatGPT and other MCP clients.
The tools
| Tool | What it does |
|---|---|
last_opp_bilag | Sends in an invoice or receipt and creates a suggestion |
hent_innboks, hent_forslag | Shows the suggestions: account, VAT, warnings and an explanation of why |
godkjenn_forslag, forkast_forslag | Posts or discards — only after you have confirmed |
hent_noekkeltall, hent_saldobalanse, hent_hovedbok, sok_bilag | Answers questions about your numbers |
hent_reskontro, hent_aapne_fakturaer, hent_uavstemt_bank | Who owes what, and what is unreconciled in the bank |
hent_frister, hent_mva_termin | Deadlines and VAT for the current term |
hent_regnskapshelse | Accounting health: which of the eight checks are red, what is wrong, and where to fix it |
sok_kontoplan, foreslaa_kontering | Finds the right account for an expense |
The server also offers the prompt behandle_innboks. In Claude Code it
becomes the command /mcp__macct__behandle_innboks, which walks through
the Inbox suggestion by suggestion and asks you about each one.
Connect from claude.ai, Claude Desktop, the mobile app or ChatGPT — with sign-in
This is the simplest route, and the one that works in the browser and on your phone. You paste no token — the connection uses the same sign-in as the app (OAuth 2.1), including Macct’s own two-factor code if you have turned it on under Security — if you sign in with Google, your Google account’s two-step verification applies instead.
- In claude.ai: Settings → Connectors → Add custom connector, and
paste
https://macct.no/api/mcp. In ChatGPT: add Macct as an app. Claude Desktop and the mobile app share the connectors you add in claude.ai. - You are sent to Macct and sign in as usual.
- Macct shows a consent page: who is asking, which company it concerns, and whether the access should be read or read and post. Press Accept.
- Done. Ask Claude about your numbers, or drop an invoice into the conversation.
The access covers exactly one company — if you are an accounting firm, pick the client under Agency → Clients before connecting. It appears under Settings → API tokens marked “OAuth” with the client name, and you can delete it there whenever you like. The client loses access immediately. The access renews itself for up to 90 days without a new sign-in.
Connect from Claude Code — with a token
Claude Code in the terminal connects with an API token you create under Settings (see below):
claude mcp add --transport http macct https://macct.no/api/mcp \
--header "Authorization: Bearer <token>"
Once you have created a token, Settings shows the snippet with the token filled
in. Other MCP clients that support HTTP transport with an
Authorization header connect the same way. Claude Desktop can also be
connected like this, through the mcp-remote bridge — but the sign-in
above is simpler.
Create and use an API token
- Log in and go to Settings → Integrations and reporting → API tokens.
- Give the token a name, for example “Claude on the work laptop”.
- Tick Read-only if the client should only read and answer questions.
- Copy the token straight away — it is shown only once.
The token is sent as Authorization: Bearer <token> on every call,
both to the REST API and to the MCP server. It is valid for one year, and you can
delete it in the same list at any time — the client loses access immediately.
Both creation and deletion are recorded in the company's security log.
| Access | What the token can do |
|---|---|
| Read-only | Read reports, inbox, ledgers and vouchers. Anything that changes data is refused — both over REST and in MCP. |
| Full | The same as you can do in the app with your user, including recording and deleting. |
A token is tied to you and your company. Treat it like a password — anyone who has it can use your access.
Limits and requirements
-
MCP does not post without your yes — unless you switch on automatic posting in Settings yourself. Then a document with no warnings is posted straight away, just as when you upload it in the app or send it by email. Otherwise:
godkjenn_forslagrequires the client to state that you have confirmed, that the suggestion has not changed since you saw it, and — if the suggestion has a blocking warning, such as a possible duplicate — that you have confirmed that specifically. This is checked in code, not just in an instruction. - REST with a full token is like using the app. A script with a full token can record vouchers directly, without suggestion and approval. If an AI should only answer questions, give it a read-only token.
- Filing goes through approval. The MCP server has no tool for sending anything to Altinn. Over REST, the tax return follows the same status flow as in the app: draft → ready → approved → submitted.
- One access, one company. A connection from claude.ai or ChatGPT covers the company you chose on the consent page. To work in another company, connect again and pick it there. A “read” access can never post, whatever the assistant is asked to do.
- 100 calls per minute per IP address to
/api/. Above the limit the API answers429. -
Large files:
last_opp_bilagtakes the file as base64 inside the call. That suits scripts; for files on disk,curl -F fil=@invoice.pdf https://macct.no/api/ocr/scan-fakturaor the email intake is simpler. Reading a document typically takes 10–15 seconds. - No webhooks yet: to find out about something new, ask the API.
Examples of use
- Vouchers from the conversation: drop an invoice into claude.ai and say “add it to Macct”. You see account and VAT before anything is posted — unless you switch on automatic posting in Settings yourself.
- Questions about the numbers: “Who owes us money?”, “What will VAT be this term?”, “What did we spend on software last year?” — the answers come from your own accounts.
- The inbox round: run
/mcp__macct__behandle_innbokson Friday and go through the week's documents one by one. - Receipts from a folder: a small script that sends every PDF in a folder to
/api/ocr/scan-faktura, so they are waiting in the Inbox. - Your own dashboard: fetch the trial balance or income statement every month with a read-only token and put the numbers in your spreadsheet or BI tool.
API and MCP are included in the subscription. Connect from claude.ai, sign in and add your first voucher.
Try free for 30 days See the price