[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Register Fortnox customer payments automatically

> Match incoming payments to unpaid Fortnox invoices and register them in one run, leaving unmatched amounts to you. Runs daily from an agent.

Source: https://cotlet.dev/integrations/fortnox-api-mcp-server/register-invoice-payments

Money lands in the bank account, and someone has to find each invoice in Fortnox, type the amount and the payment date, and register it, one invoice at a time.

Cotlet does it in your own Fortnox account with list\_invoices, get\_invoice and register\_payment, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=fortnox) [All Fortnox tools](https://cotlet.dev/integrations/fortnox-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Fortnox do this on its own?

Fortnox matches payments by itself when a bank connection is set up, and invoices sent with Fakturaservice are marked paid when the money arrives (checked 14 Oct 2026). The API has an Invoice Payments resource under the payment scope. What neither does is read a payment list from your own system, such as a payment processor export, and register it against invoices with the rows that fail to match reported back.

## How you do it in Fortnox today

1. With a bank connection and bookkeeping in Fortnox, incoming payments are matched to the right invoice and booked automatically; rows that do not match by themselves have to be matched manually.
2. For one invoice in the older view, open it, click Hantera and then Registrera inbetalning; in the new view the same function is under Fler alternativ.
3. For many, go to Meny - Fakturering - Inbetalningar, fill in the payment date in Betaldatum, search the invoice in the Faktura field by customer number, customer name, invoice number or OCR number, type the amount in Betalt SEK and click Lägg till.
4. For a partial payment, enter only the amount that arrived, and add the invoice again for the next payment.
5. Finally book the payments from the list.

## How to register Fortnox customer payments automatically

Prompt

```
Here are yesterday's incoming payments. Find the matching unpaid invoice in Fortnox by invoice number or OCR, register the payment, and list anything that does not match.
```

1. 01  
### Collect open invoices  
list\_invoices runs with status unpaid and, when your list names a customer, that customer number, so the agent only compares payments with invoices that are still open.
2. 02  
### Match by reference, then by amount  
A payment is matched on invoice number or OCR number first. Only if there is no reference does the agent match on customer plus exact amount, and only when exactly one open invoice fits.
3. 03  
### Read the invoice before paying it  
get\_invoice shows the remaining amount, so a short payment is registered as a partial payment instead of closing the invoice, and an overpayment is not registered at all.
4. 04  
### Register the payment  
register\_payment records the amount and the payment date you gave, not today's date, so the books match the bank statement. Each call asks for your OK by default.
5. 05  
### Leave the rest for you  
Payments with no match, two possible matches or an amount above the open balance are listed with the reason, never forced onto an invoice.

### What you get back

Example data

```
Payments in the list: 9
Registered 7, e.g. invoice 2377 Nordlys Design AB: 15,000 SEK, now fully paid
Partial: 1 (invoice 2379, 5,000 of 12,500 SEK, 7,500 SEK left)
Left for you 1: 3,200 SEK from "Berg AB" matches two open invoices
```

### Other ways to ask

- Every morning, register payments from the bank export in this folder and show me what did not match.
- Only match payments by OCR number and list everything else without registering it.
- List invoices that were paid late last month with the days late, but register nothing.

## What Fortnox allows, and what to know first

- Fortnox registers a payment with a payment date you choose, which is the date it is booked against.
- A partial payment keeps the invoice open for the next payment: enter only the amount that arrived.
- Invoices sent with Fakturaservice are marked as paid in Fortnox when the money has arrived, so they need no manual registration.
- With a bank file, a row that is not matched automatically has to be matched by hand.
- The API's payment scope covers Invoice Payments and needs a Fortnox licence for Bokföring, Order or Kundfaktura.

register\_payment asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.

Sources: [Fortnox Support: Manuell registrering av betalningar](https://support.fortnox.se/produkthjalp/bankkopplingar/manuell-registrering-av-betalningar) · [Fortnox Support: Registrera betalda kundfakturor](https://support.fortnox.se/produkthjalp/bankkopplingar/kundfaktura-registrera-betalda-kundfakturor) · [Fortnox Support: Skicka fakturan med Fakturaservice](https://support.fortnox.se/produkthjalp/faktura-betaltjanster/skicka-fakturan-med-fakturaservice) · [Fortnox Developer: Scopes](https://www.fortnox.se/developer/guides-and-good-to-know/scopes)

## Call register\_payment from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/fortnox/invoices/2377/payments \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":15000,"payment_date":"2026-10-13"}'
```

Example response

```
{
"invoice_number": "2377",
"paid_amount": 15000,
"payment_date": "2026-10-13",
"balance": 0,
"status": "fully paid",
"currency": "SEK"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is fortnox\_write → register\_payment. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/fortnox-api-mcp-server.md#automations)

## Fortnox tools this automation uses

__Cotlet Fortnox tools used to register Fortnox customer payments automatically__
| Tool | Parameters |
| ----------------- | ---------------------------------------------------- |
| list\_invoices | status, customer\_number, due\_before, limit, cursor |
| get\_invoice | invoice\_number |
| register\_payment | invoice\_number, amount, payment\_date |

[All 11 Fortnox tools with descriptions](https://cotlet.dev/integrations/fortnox-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Fortnox to Cotlet?

Yes. You sign in to Fortnox yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Fortnox once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Fortnox automations

- [Create and send Fortnox invoices from a list](https://cotlet.dev/integrations/fortnox-api-mcp-server/create-and-send-invoices.md)
- [Book recurring Fortnox journal entries as vouchers](https://cotlet.dev/integrations/fortnox-api-mcp-server/book-journal-entries.md)
- [Fortnox API and MCP server: every tool](https://cotlet.dev/integrations/fortnox-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Fortnox.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Fortnox.

[Sign up free](https://cotlet.dev/app/signup?app=fortnox)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
