Search
Maventa services and reach Finland e-invoicing in Finland Mass Printing Service Sweden e-invoicing in Sweden Norway e-invoicing in Norway Denmark e-invoicing in Denmark Netherlands e-invoicing in the Netherlands Belgium e-invoicing in Belgium Germany e-invoicing in Germany Estonia e-invoicing in Estonia Latvia e-invoicing in Latvia Poland e-invoicing in Poland Italy e-invoicing in Italy France e-invoicing in France Spain e-invoicing in Spain

Mass Printing Service

The Maventa Mass Printing Service, also referred to as Payslip, allows sending PDF files as physical letters through the Finnish printing service. While originally designed for distributing payslips, it can be used for sending any type of letters, provided the printing service rules are followed. This service is available only for Finnish companies.

New: Kivra delivery starting 22 April 2026. Letters can be delivered to recipients’ Kivra digital mailboxes instead of being printed. Read more below.

Invoices intended for print should always be sent via the standard invoice delivery channels, not through this service.

User account opening

To use the Mass printing API, you need a dedicated user account. Create one by calling the registration endpoint with your existing sw_api_key and company_uuid from Maventa:

Request for registering

Key Example Description
sw_api_key d33e92be-a46b-4963-8ada-25452712e0a6 Existing software API key from Maventa
company_uuid 99445728-5fd3-428a-96e1-ca0cab692276 Existing company uuid from Maventa
company_name Test Company Oy Name of the company
user_email test@yritys.fi User email address that will be used as user name, needs to be unique! Each account needs it’s own email address
user_pw secret1234 Password for the user
test_mode 1 1 opens the account in test mode which means that material is not really send out. Note! Contact support to disable the test mode. 0 opens the account in production mode
disable_notify_on_complete 1 Set to 0 (default) to receive an email notification when material is printed successfully. Set to 1 to disable notifications.

Response for registering

The response code will always be a HTTP 200 and the response body is one of the following:

Value Description
“OK” Successful registration, letters can be send and login works
“ERROR: COMPANY UUID ALREADY REGISTERED” Registration failed, company exists already in Payslip service
“ERROR: USER EMAIL ALREADY REGISTERED” Registration failed, user email exists already in Payslip service
“ERROR: ONLY FINNISH COMPANIES ALLOWED” Only Finnish companies allowed to register
“ERROR: USER EMAIL INVALID” Invalid email address
“ERROR: INVALID VENDOR KEY” Invalid software API key
“ERROR: INVALID COMPANY UUID” Invalid company uuid
“ERROR: INVALID VALUES” Company_name, user_email or user_pw empty
“ERROR: REGISTRATION FAILED” Most likely company name already exists in Payslip service.

Sending letters

To send a letter to Mass printing service there are currently two supported methods:

  1. New JSON-based API (recommended) - https://payslip.maventa.com/input_json
  2. Legacy IPOSTXML-based method (deprecated - will be removed in future) - https://payslip.maventa.com/input_public

The POST /input_json endpoint allows authenticated users to send PDF files for print delivery services. This endpoint accepts multipart form data containing a PDF file and associated metadata for both recipient and sender information.

Authentication for JSON API

The endpoint supports multiple authentication methods for backwards compatibility:

Method 1: Bearer token authentication (recommended)

Header Required:

Method 2: Legacy API key authentication (deprecated)

Headers Required:

Method 3: Legacy username/password authentication (deprecated)

Headers Required:

Sending with JSON API

Required parameters
Parameter Type Description
pdf File PDF file to be processed (max 20MB), mime type must be application/pdf
hash String SHA1 hash of the PDF file (lowercase hexadecimal)
sw_api_key String Software vendor API key
version String Client version identifier (e.g. “MyErp 2.25”)
Recipient information (required)
Parameter Type Description
recipient[name] String Recipient’s full name
recipient[address] String Street address
recipient[post_code] String Postal code
recipient[post_office] String Post office / city
recipient[country] String Country code in ISO 3166-1 alpha-2 code (e.g., “FI”)
Optional parameters
Optional sender information (required for digital post send)
Parameter Type Description
sender[name] String Sender’s name or company name
sender[sender_id] String Sender OVT/EIA (e.g. 00371111111)
Optional recipient information (used for digital post lookups for better matching)
Parameter Type Description
recipient[phone] String Recipient’s mobile phone number for digital post lookups (international format e.g. +358401234567)
recipient[email] String Recipient’s email address for digital post lookups
recipient[ssn] String Recipient’s social security number / national ID for digital post lookups
Printing options
Parameter Type Default Description
duplex Boolean false Enable double-sided printing
color_print Boolean false Enable color printing
letter_class String “priority” Delivery class (“priority” or “economy”)
prevent_digital_post Boolean false Force physical delivery only
letter_subject String   Custom letter subject shown to the recipient in Kivra (default: “Kirje lähettäjältä [company name]”)
Licensing parameters
Parameter Type Description
license_key String License key for the sending system if applicable (optional)
license_meta String License metadata for the sending system if applicable (optional)
Response codes and values for sending
Success response for sending
Error responses for sending
Status code Response body Description
401 Authorization Required Authentication failed or company account is inactive
400 Invalid multipart request Request is not proper multipart/form-data or missing the PDF file
400 Missing version parameter Required metadata is missing or incomplete
400 Missing metadata Required metadata is missing or incomplete
400 Invalid vendor key The provided sw_api_key is not valid
409 Duplicate file A file with the same hash has already been processed
413 File size too large PDF file exceeds size limit (20MB)
415 Invalid file type Wrong mime type in request
422 Hash values do not match Provided hash doesn’t match the uploaded file
500 Temporary server error File processing failed on the server side, try again later
Example requests for sending

Using Bearer Token Authentication (Recommended)

curl -X POST "https://payslip-stage.maventa.com/input_json" \
  -H "Authorization: Bearer your_api_token_here" \
  -H "X-Client-Id: your_company_uuid_here" \
  -F "pdf=@document.pdf" \
  -F "hash=a1b2c3d4e5f6789..." \
  -F "version=MyERP 1.25" \
  -F "sw_api_key=your_sw_api_key_here" \
  -F "recipient[name]=Essi Esimerkki" \
  -F "recipient[address]=Kotikatu 123" \
  -F "recipient[post_code]=00100" \
  -F "recipient[post_office]=Helsinki" \
  -F "recipient[country]=FI" \
  -F "sender[name]=Tulostaja Oy Ab" \
  -F "sender[sender_id]=00371234567890" \
  -F "duplex=true" \
  -F "color_print=false" \
  -F "letter_class=economy"

GET /file_status/:id API Endpoint

The /file_status/:id endpoint allows authenticated users to check the processing status of a specific payslip using its UUID. The endpoint supports the same authentication methods as the /input_json endpoint described above.

Response codes and values for status call
Success response for status call
Possible status values for status call
Status Description
Pending File is being processed or waiting in queue at the print service provider
Done File has been successfully printed and delivered to the mail distributor
Error An error occurred during processing (you will be separately contacted in case of errors)
Error response for status call
Status Code Response Body Description
401 Authorization Required Authentication failed or company account is inactive
404 File not found No payslip found with the provided UUID for your company
Example requests for status call
curl -X GET "https://payslip-stage.maventa.com/file_status/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer your_api_token_here" \
  -H "X-Client-Id: your_company_uuid_here"

IPOSTXML-based API (deprecated)

Authentication for IPOSTXML-based API

You need to give authentication using HTTP headers. You can give either:

POST parameters for IPOSTXML-based API

Key Example Description
version MyOwnERP Name of the software (and its version) making the sending. Makes problem solving easier
filename letters_2019_12.zip Name of the ZIP package, should be unique
file RVBMMTExMzQ0O The actual ZIP file attached using multipart/form-data
zipHash 69a56b2b66d548d7b51f6dcc9003e90bafce2162 SHA1 hash of ZIP content, will get check in server to make sure package came through as whole
hash 856697ad0cae67ec48f7627be4cef74feaa2f36b SHA1 hash of PDF content, will get saved to server for duplicate prevention. Same hash key cannot be used for sending again
document_type PDFXML PDFXML
letter_class economy Economy or priority (default value). Letter class to use for sending
sw_api_key 5992955a-3b66-4439-94d1-a854a764da49 Existing software API key from Maventa. Value given in sending call will override the one set for the Payslip company account in registration
license_key 1234-5678-MKSK-1234 License key of software making the call (255 chars max)
license_meta License key for MyOwnERP Additional information about the licensing system
color_print true Colour printing: true for colour, false for black & white (default)
duplex true Duplex printing for both sides of the letter. Default is false
prevent_digital_post true Prevent sending to OmaPosti. Default is false

Important: File upload must be done using the multipart/form-data content type. Do not send the file as a Base64-encoded string in a query parameter. If your integration currently does this, we recommend updating it to use multipart upload.

Response for sending with IPOSTXML-based API

The response code will be a HTTP 200 and the response body is one of the following or “401 Unauthorized” if authentication fails:

Value Description
“OK: sent_filename.zip” Successful sending
“ERROR: HASH VALUE DOES NOT MATCH” Parameter zipHash does not match to the SHA1hash
“ERROR: ERROR: DUPLICATE FILE” Found file with parameter hash
“ERROR: FILE TOO LARGE” API allows max 10Mt files
“ERROR: DOCUMENT TYPE UNSUPPORTED” document_type is something else than PDFXML
“ERROR: FILE IS NOT ZIP” Parameter filename needs to be .zip
“ERROR: ZIP FILE CONTAINS UNSUPPORTED FILES” Only .pdf files are allowed
“ERROR: ZIP FILE CORRUPTED” Unzipping failed
“ERROR: NO LETTERS FOUND” No letter were found. No .pdf files found inside the zip file
“ERROR: SINGLE XML REFERENCES MULTIPLE PDFS” Single iPost-XML can only have reference to one PDF (XML to PDF 1-1 ratio)
“ERROR: sent_filename.zip” Unexpected error, sending failed. Contact our support for more information
“ERROR: LETTER OPTION MISMATCH” All IPost-XMLs in a ZIP file must have the same printing options (letter class, colour..) for billing purposes

Zip file content

PDFs

Example of iPost-XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<lb:LetterBundle schemaVersion="v0x4" senderFileId="FileD1" xmlns:lb="urn:itella-letterbundle-v0x4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:itella-letterbundle-v0x4 LetterBundle_V0x4.xsd">
  <lb:Bundle senderBundleId="">
    <lb:BundleCommon creationDate="2020-06-24T13:17:00.0Z" isTest="false">
      <lb:Sender companyName="Your company Oy" contact="" contactPerson="Support" email="support@support.com" phoneNumber="010-5058474" ovtID="003712345678">
        <lb:SenderAddress>
          <lb:Eu1 name="Your company Oy" address="PL 000" postalCode="00101" city="Helsinki" countryCode="FI"/>
        </lb:SenderAddress>
      </lb:Sender>
      <lb:StdBundleProcessing customerId="" departmentClassification="false" electronicArchiving="T" envelope="S" fileFormat="0" isDuplex="true" letterClass="2" paper="0" password="" serviceFunction="0"/>
      <lb:ExternalFile fileName="sent_filename.pdf" format="PDF" senderFileId="wm_0c5c09e0-03d3-4340-bb6b-0c3c14be7f42">
        <lb:CheckSum type="MD5" value="nnnnnnnnnnnnn"/>
      </lb:ExternalFile>
    </lb:BundleCommon>
    <lb:Letter senderLetterId="LetterID1">
      <lb:LetterMeta>
        <lb:Location pages="1" startPage="1"/>
        <lb:Recipient>
          <lb:Address>
            <lb:Eu1 address="Kotikatu 1" city="Helsinki" countryCode="FI" name="Asiakas Anssi" postalCode="01001"/>
          </lb:Address>
        </lb:Recipient>
      </lb:LetterMeta>
    </lb:Letter>
  </lb:Bundle>
</lb:LetterBundle>

Checking the status of sent packages for IPOSTXML-based API

To check the status of the sent package, use https://payslip.maventa.com/file_status.

Headers for checking the file status

You need to give authentication using HTTP headers. You can give either:

GET parameter for checking the file status

Key Example Description
filename sent_filename.zip Name of your ZIP package

Response for checking the file status

Value Description
“DONE” Package is processed and sent successfully
“PENDING” Package is still in sending process
“ERROR” Sending of the package has failed (in these cases our support will get notified and they will contact the sender with more detailed reason for error)
“ERROR: No file found” No file found with the given filename

Technical restrictions of the PDF

All files must be of PDF format (or have the same content requirements) for it to be printed correctly. That means that the file cannot contain dynamic components and that all fonts, images and others are included in the file (ie the files should be 100% “self-contained”). All new customers must test their PDF files (all variants of fonts, images, etc.) to verify that the PDFs can be handled. If the PDF contains graphics, such as logos, charts, and other images, they must be of good quality.

Instructions for letter layout

Your PDF letter needs to follow these PDF layout rules by Posti. Addition to Posti as the mail distributor, there is also Jakeluyhtiö Suomi Oy (JYS) which have few additions to the Posti rules. Difference is the tracking barcodes they print on the invoice image, see the JYS rules merged with the Posti ones.

Receiver information should be marked as clearly as possible to make sure machine readability.

Envelope size

The Finnish printing service uses two envelope sizes:

Storage time

Once Maventa receives final confirmation from the print service provider, the file is completely removed from Maventa’s servers. We recommend storing the files on the ERP side for at least a few months after the sending in case there are some support cases related to the sent letters.

Delivery schedule

Letters that are sent to Maventa before 24:00 will get printed, processed and enveloped overnight and handed over to the mail distributor the following morning. Production does not take place during the weekends and holidays.

Delivery depends on the selected letter class. For Finnish companies sending domestic letters, there are two options: Priority and Economy.

For Finnish domestic letters, the practical difference between Priority and Economy is often minimal. Regional delivery schedules can have more impact on delivery timing than the letter class itself. Priority may still benefit B2B invoicing, but for consumer invoices, the recipient’s local delivery schedule is usually the deciding factor.

For international letters, only priority is available.

OmaPosti delivery

OmaPosti is an application that allows customers to receive their letters electronically instead of in paper form. When a receiver has an active OmaPosti account and has not opted out of receiving digital letters from a specific sender, the invoice will be redirected to the receiver’s OmaPosti account instead of being delivered as a physical letter. To determine if a receiver has an OmaPosti account, a combination of consumer’s name and postal address is used for identification.

It is also possible for the sender to exclude the letter from being sent through the OmaPosti route by setting the prevent_digital_post parameter to true in the sending API call.

For the OmaPosti route to function, the necessary information must be provided as an API parameter (or in the IPOSTXML document). This includes the sender’s OVT code and the receiver’s name and address.

Kivra delivery

Kivra delivery for the Mass Printing Service will be available starting 22 April 2026.

Kivra is a digital mailbox service where consumers choose to receive their letters and documents electronically. When a recipient has a Kivra account, they have actively opted in to digital delivery. Delivering to Kivra reduces printing and postage costs while reaching recipients in their preferred channel.

How it works

Before a letter is handed over to the print provider, Maventa performs an automatic lookup against the Kivra consumer registry using the recipient’s information. If a match is found, the letter is delivered to the recipient’s Kivra inbox instead of being printed and mailed. If no match is found, delivery falls through to the normal print route — no changes needed on your end.

Kivra has a maximum PDF size limit of 15 MB. If the letter exceeds this limit, it falls through to the normal print route automatically.

The lookup is performed using the following recipient data (in priority order):

  1. Social security number (SSN)
  2. Email address
  3. Full name + street address + postal code + post office
  4. Full name + phone number

To improve Kivra match rates, provide as much recipient information as possible in your API calls. The JSON API supports optional recipient[email] and recipient[phone] parameters that enable additional lookup methods beyond name and address matching.

Unlike OmaPosti, Kivra does not require the sender’s OVT code. The Kivra sender account (tenant) is based on the company’s business ID (BID), so no OVT information needs to be included in the API call for Kivra delivery.

Automatic sender setup

Each company can have only one sender account (tenant) in Kivra. The tenant represents the company as a recognised sender, and its name is what recipients see in their Kivra inbox.

If a tenant does not already exist for the company, Maventa automatically creates one when the company’s first letter is delivered via Kivra — no action is required. Maventa sets the tenant name based on the company’s official name from the YTJ registry at the time the company was created in Maventa.

If another service provider has already created a tenant for the company in Kivra, that existing tenant and its name are used. To update the tenant name, contact Kivra directly.

Custom letter subject

You can customise the letter subject that the recipient sees in their Kivra inbox using the letter_subject parameter. By default, the subject is “Kirje lähettäjältä [company name]”.

Opting out of Kivra delivery

To force physical delivery for a specific letter — for example, when a guaranteed paper trail is required — set the prevent_digital_post parameter to true in the API call. This opts out of both Kivra and OmaPosti delivery for that letter.

Billing

Kivra deliveries are billed as consumer invoices. The billing action name is EINVOICE_KIVRA_FI.

User account closing

If you wish to close the service, please contact Maventa support.

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