Search
Getting Started Invoice sending Invoice sending Consumer Invoicing Printing Email invoicing Invoice receiving Invoice receiving Scanning Detect Fraud reporting Integration tools Webhooks Reference implementations Maventa Connector Embeddable User Interface Peppol Peppol Network Document Exchange Invoice Response Self-billing support Invoicing formats Invoicing formats Validation Peppol BIS 3.0 Finvoice 3.0 Document types and type codes Preview Maventa JSON (table) Preview Maventa JSON (json schema) Account management Companies and Settings Department Company Users Billing Accounts receivable Accounts receivable Ropo Reminder & Collection Amili Kassavirta Amili Perintä

Invoice receiving

Maventa makes it easy to receive invoices from multiple sources, including country-specific e-invoicing networks, Peppol, and PDF scanning services. Once activated, Maventa registers your company in the relevant electronic address directories and assigns you an electronic invoice address (EIA) that senders can use to deliver invoices directly to you.

All invoices first arrive in your Maventa account, where they can be downloaded or fetched via API into your system. You can also use webhooks to create a smooth, automated receiving flow and integrate the Detect service for validation and fraud detection. For extra protection, the fraud reporting feature allows you to flag suspicious senders and help prevent invoice fraud across the network.

This guide covers the REST API. If you are using the SOAP API, see the SOAP invoice receiving API methods instead. For authentication setup, see Getting started with the REST API.

Typical receiving flow

The following steps describe the recommended flow for receiving invoices:

  1. Activate — Enable VISMA Network and Peppol receiving for the company.
  2. Listen — Register a webhook for DOCUMENTS.INVOICE.RECEIVED events.
  3. Download — When a webhook fires, fetch the invoice XML, image, and attachments by ID.
  4. Validate — If Detect is enabled, fetch fraud and validation check results.
  5. Back up — Poll GET /v1/invoices once a day to catch any invoices missed by webhooks.

Prerequisites

To start receiving invoices, make sure you have:

Step 1: Activate invoice receiving

To start receiving invoices, enable the VISMA Network setting. This is the main control for receiving e-invoices in Maventa. It allows the company to receive invoices from other Maventa users and, depending on the country, also from other operators or banks.

Once VISMA Network is turned on, additional networks such as Peppol or scanning can be enabled separately. Maventa recommends enabling Peppol for all customers to ensure the widest possible reach for receiving invoices.

After activation, the company is automatically registered in the relevant electronic address directories (depending on the country) and assigned an electronic invoice address (EIA) that senders can use to deliver invoices directly. The company also becomes visible as an invoice recipient in Maventa Finder and via the lookup method.

You can check which address registries are used in each country, as well as whether the country supports operator or bank networks, in the country-specific guides. Typically, receiving is activated at the same time the account is registered, but it can also be enabled later if needed.

Activate VISMA Network

Call the POST /v1​/company​/profiles endpoint authenticated with company scope, providing the network VISMA and profiles INVOICE_AND_CREDIT_NOTE:

{
  "profiles": [
    "INVOICE_AND_CREDIT_NOTE"
  ],
  "network": "VISMA"
}

No other parameters are needed. Expect the status field in the response to be pending. To confirm successful registration, call the GET /v1​/company​/profiles endpoint and check that the status has changed to active.

Register company as Peppol receiver

When activating the electronic receiving setting, Maventa recommends that all customers are also registered to receive electronic invoices in the international Peppol network. When a company is registered, its information is added to the Peppol Directory.

Authenticate with company scope and call POST /v1​/company​/profiles, specifying the network as PEPPOL and profiles INVOICE_AND_CREDIT_NOTE:

{
  "profiles": [
    "INVOICE_AND_CREDIT_NOTE"
  ],
  "network": "PEPPOL"
}

The profile INVOICE_AND_CREDIT_NOTE automatically registers both document types for Peppol BIS Billing 3.0. Some countries also include additional, country-specific profiles automatically. Maventa automatically keeps the Peppol registration updated as new invoice profiles are introduced. There is no need to register new profiles when the format updates.

Peppol BIS Billing UBL Invoice V3

Peppol document identifier:

  • urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1

Process identifier: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0

Peppol BIS Billing UBL Credit Note V3

Peppol document identifier:

  • urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2::CreditNote##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1

Process identifier: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0

Call GET /v1​/company​/profiles again to verify that the status of the PEPPOL network registration is active. If the response contains the error code PROFILE_ALREADY_REGISTERED, the company is already registered with another Peppol access point. The current access point must deregister the company before Maventa can complete the registration.

Switching Peppol access points requires coordination with the current provider. Contact the existing access point and ask them to deregister the company. Once deregistered, repeat the registration call above. The process typically takes a few business days.

With registration, the company is visible with an electronic invoicing address (EIA) to suppliers in the Peppol network.

The Peppol Directory is available as a reference tool for looking up registered companies. Maventa automatically updates this directory, making your company visible there. Note that the Peppol Directory is not part of the actual delivery infrastructure — it serves informational purposes only.

Deactivate invoice receiving

To stop receiving invoices on a specific network, delete the corresponding network registration. This removes the company from the associated electronic address directories, and senders can no longer deliver invoices to the company through that network.

First, retrieve the profile ID by calling GET /v1​/company​/profiles with company scope. Filter by network if needed — for example, ?network=VISMA or ?network=PEPPOL. The response includes the id for each active registration.

Then, call DELETE /v1​/company​/profiles/{id} with the profile id to delete the registration.

The VISMA Network registration cannot be deleted while Peppol or scanning registrations are still active. Deactivate those registrations first before removing the VISMA Network profile.

Not all profiles can be deleted. If deletion is not allowed for a specific profile, the endpoint returns a 409 Conflict response.

To deregister from Peppol specifically, use the same approach: find the Peppol profile ID from the list and delete it. The company is then removed from the Peppol network and the Peppol Directory. Senders looking up the company through Peppol will no longer find a registered e-invoicing address.

Each network registration can be deactivated independently. For example, deleting the Peppol registration does not affect the VISMA Network registration, and vice versa.

Receiving invoice extensions

To enable receiving of invoice extensions, call PUT /v1/company/profiles/{id}/extensions.

Example request:

{
  "profile_name": "INVOICE_AND_CREDIT_NOTE",
  "extensions": ["GACCOUNT10"]
}

Currently, Maventa supports only the GACCOUNT10 extension for the Netherlands.

To view the active extensions, call GET /v1/company/profiles/{id}.

{
  // ...
  "profiles_with_extensions": [
    {
      "profile_name": "INVOICE_AND_CREDIT_NOTE",
      "extensions": ["GACCOUNT10"]
    }
  ]
}

To disable receiving of invoice extensions, call PUT /v1/company/profiles/{id}/extensions with an empty extensions array:

{
  "profile_name": "INVOICE_AND_CREDIT_NOTE",
  "extensions": []
}

Step 2: Fetch received invoices

To determine when an invoice has been received to a company account, you can either listen for webhook notifications or poll the API for incoming invoices. Webhooks are the preferred method, as they provide faster and more efficient delivery compared to regular polling.

Webhooks

Webhooks notify your system immediately when a new invoice arrives, enabling a seamless automated receiving flow. As a backup routine, Maventa recommends polling for invoices once a day.

Register for webhook notifications for received invoices

Register for invoice receipt events by calling POST /v1/company/notifications.

Example registering for RECEIVED events for invoices:

RequestResponse
{
  "destination_type": "WEBHOOK",
  "destination": "https://your.example/endpoint",
  "events": [
    "DOCUMENTS.INVOICE.RECEIVED"
  ]
}
{
  "id": "d726d240-4631-483e-a4e3-61bbefa0e7b7",
  "destination_type": "WEBHOOK",
  "destination": "https://your.example/endpoint",
  "events": [
    "DOCUMENTS.INVOICE.RECEIVED"
  ]
}

Maventa calls the specified endpoint with a payload like this:

{
  "event":            "DOCUMENTS.INVOICE.RECEIVED",
  "company_id":       "53a4e05d-42f0-4e76-acd6-968ab4558c6f",
  "event_timestamp":  "2024-11-23T12:03:48+02:00",
  "event_data": {
    "invoice_id":     "c154feee-399b-488e-aecd-580578b140e0",
    "invoice_number": "1002",
    "origin":         "PEPPOL",
    "sender_name":    "Sender",
    "sender_bid":     "937729111"
  }
}

Example registering for RECEIVED events for invoices with vendor webhooks:

RequestResponse
{
  "destination_type": "VENDOR_WEBHOOK",
  "destination": "https://your.example/endpoint",
  "vendor_key": "your_vendor_api_key_here",
  "events": [
    "DOCUMENTS.INVOICE.RECEIVED"
  ]
}
{
  "id": "d726d240-4631-483e-a4e3-61bbefa0e7b7",
  "destination_type": "VENDOR_WEBHOOK",
  "destination": "https://your.example/endpoint",
  "events": [
    "DOCUMENTS.INVOICE.RECEIVED"
  ]
}

Store the event_data.invoice_id for later processing and deduplication. Maventa may deliver the same webhook event more than once (for example, if your endpoint is temporarily unreachable), so always check whether an invoice ID has already been processed before downloading it again.

Your endpoint should return an HTTP 200 status code to acknowledge receipt. If Maventa does not receive a 200 response, the webhook is retried. Refer to the Webhooks guide for full details on retry behaviour, payload signatures, and configuration.

Polling

If you do not use webhooks, you can poll the API to list new invoices and then download them with their attachments. Maventa recommends polling no more than once or twice per day. Even when using webhooks, poll once a day as a backup to catch any missed deliveries.

List new received invoices

Use GET /v1/invoices with parameters direction=RECEIVED, received_at_start, and received_at_end to get a list of invoices to download. This method is called per company, so it is only possible to list invoices from one company at a time.

The timestamp parameters use ISO 8601 format, for example:

GET /v1/invoices?direction=RECEIVED&received_at_start=2025-01-15T08:00:00%2B02:00&received_at_end=2025-01-15T20:00:00%2B02:00

The response is paginated. Use the page and per_page parameters to iterate through results. Check the response headers or result count to determine whether more pages are available.

  • Call the method starting with the latest fetch timestamp and ending with the current timestamp.
  • If the API returns an error, do not update the stored timestamp. Retry the listing later.
  • Save the returned invoice IDs locally with a status such as “pending download”.
  • The server timestamp is GMT+2. Differences between client-side and server-side clocks can create gaps. Add a buffer of about 1 minute before and after the timestamps to avoid missing invoices.

Download invoice based on ID

After you have saved the new incoming invoice IDs, download the invoice files and attachments into your system.

Invoice downloading involves obtaining:

Use GET /v1/invoices/{id} to download the invoice XML file in the specified format, or to download the invoice image. Set the return_format parameter to the desired format.

Common return_format values for XML download:

Value Format
PEPPOLBIS30 Peppol BIS Billing 3.0 (recommended)
FINVOICE30 Finvoice 3.0
TEAPPSXML30 TEAPPSXML 3.0
UBL20 UBL 2.0
SIUBL Visma SI-UBL

For the full list of supported formats, see the Validator API specification and the invoicing formats page.

  • Mark an invoice as successfully retrieved only after it has actually been downloaded. If the download fails, log the error and retry later.
  • Use the locally stored invoice ID list to ensure the same invoice is not downloaded twice.

Download invoice image and attachments

To download the invoice image, use the return_format parameter:

Example: Original format Peppol BIS3

If the invoice’s original format is Peppol BIS3 and you download it as Peppol BIS3, you only need the XML file as it has all original attachments embedded.

When downloading in a different format than the original, Maventa converts the XML but does not embed separate attachments into the converted file. Download attachments separately using the files endpoint described below.

Example: Original format TEAPPSXML 3.0 downloaded as Finvoice 3.0

If the invoice’s original format is TEAPPSXML 3.0 and it includes an invoice image and extra attachments:

Invoices may also contain attachments, listed in the files array of the invoice metadata. Download each attachment separately using GET /v1/invoices/{id}/files/{file_id} with the id from each file entry.

Most often, attachments include an invoice image — a PDF document with a visual representation of the invoice data. If one is not provided by the sender, Maventa generates it.

Invoice origin and origin_type details

In the invoice details, the origin field indicates the source of the received invoice — for example, PEPPOL, VISMA, or SCAN. If the origin is SCAN, the origin_type field provides additional detail about the scanning method:

origin_type Description
SCAN_PDF Scanned from a PDF file
SCAN_PAPER Scanned from a paper invoice
AUTOSCAN Automatically scanned from a PDF file (ML-based)
SCAN Scanned from non-invoice material

Scanned invoices may have lower data accuracy than electronic invoices, depending on the quality of the source document. Consider adding extra validation for scanned invoices in your integration, especially for key fields like amounts and bank account numbers. For more information about scanning services, see Scanning.

Error handling

When building your receiving integration, plan for common failure scenarios:

Scenario Recommended approach
Download API returns an error Log the error, keep the invoice ID as “pending download”, and retry after a few minutes. Use exponential backoff (e.g. 1 min, 5 min, 30 min).
Webhook endpoint is temporarily down Maventa retries webhook delivery. Poll once a day as a backup to catch any gaps.
Duplicate invoice ID received Check your local ID list before processing. Duplicates can occur from webhook retries or overlapping polling windows.
Unexpected invoice format Log the original format and the requested return_format. Verify the format is supported by checking the Validator API.

Step 3: Fetch Detect results

If the Detect service is enabled for the company, fetch the validation and fraud check results for each received invoice.

Use GET /v1/invoices/{id}/detect_results to download the check results based on invoice ID.

The response includes results from checks such as VAT register verification, bank account change detection, and warning list cross-referencing. Use these results to flag invoices that require manual review before approval.

For more information, see the Detect service documentation and Fraud reporting.

Back to top

AI Chat Support 24/7

  • Get help via AI chat available 24/7 whenever it suits you
  • Chat extensively uses Maventa support pages, websites, and blogs in its answers
  • If you need assistance that the AI cannot provide, you can also ask a customer service agent to join the conversation
  • Support requests processed Monday to Friday
Cancel Open chat

Got feedback?

Did you not find what you were looking for? Or was something explained unclearly? Or just want to share your thoughts? We are happy to hear your feedback!

Note: This form is not a way to get support, this is only for feedback for the documentation website. If you need support, please contact Maventa support.

Integration Guide Services & Reach API Specification Changelogs Integration guide Getting Started Invoice sending Consumer Invoicing Printing Email invoicing Invoice receiving Scanning Detect Fraud reporting Webhooks Reference implementations Maventa Connector Embeddable User Interface Peppol Network Document Exchange Invoice Response Self-billing support Invoicing formats Validation Peppol BIS 3.0 Finvoice 3.0 Document types and type codes Maventa JSON (table) Maventa JSON (json schema) Companies and Settings Department Company Users Billing Accounts receivable Ropo Reminder & Collection Amili Kassavirta Amili Perintä Services and reach Maventa services and reach e-invoicing in Finland Mass Printing Service e-invoicing in Sweden e-invoicing in Norway e-invoicing in Denmark e-invoicing in the Netherlands e-invoicing in Belgium e-invoicing in Germany e-invoicing in Estonia e-invoicing in Latvia e-invoicing in Poland e-invoicing in Italy e-invoicing in France e-invoicing in Spain Api specification API overview Getting Started Common & authentication API Invoices API Documents API Companies & settings API Lookups API Detect API Validator API Receivables API Billing API Scanning API B2CFI API B2CNO API B2CSE API Partner API Getting Started API Methods Overview Account Configuration API Methods Invoice Sending API Methods Invoice Receiving API Methods B2C Norway API Methods B2C Finland API Methods Other API Methods Changelogs Product changelog Developer Changelog
Clear Send

Enter your credentials to Maventa testing environment, to authenticate and try things out with the Swagger UI. This will fetch a Bearer token using OAuth2 with the endpoint POST https://ax-stage.maventa.com/oauth2/token. The token is stored in your browser's session storage (cleared when you close the tab) and used in Swagger calls done from this documentation website. The token is valid for 1 hour.

Never use your production credentials here. This is only for testing the Maventa test environment in the Swagger UI.
Reset All None
eui global company lookup document:receive document:send invoice:receive invoice:send company:read company:write validate receivables:assignments analysis billing:reports partner:invoice_delivery_actions partner:lookups partner:takeovers partner:lyanthe_scan_service fi_bank_message:send fi_bank_message:receive
Cancel Sign In