Skip to content
English
  • There are no suggestions because the search field is empty.

Visma.net Payroll integration

Connect Huma to Visma.net Payroll to keep employee profiles, positions, absence and salary in sync

 

Table of contents

 


 

Roles and access

Role in Huma System role with full access to Organization
Role in Visma.net Payroll «Integration administrator», and access to «Visma.net App Store»
Permissions for the Huma app in Visma «Read employees» and «Write employees»
Extra for absence sync «Calendar API»

 

💡 Not sure which roles you need in Visma.net Payroll? Contact Visma support for guidance.

⚠️ If you change the permissions for the Huma app in Visma, it can take up to 1 hour before the changes are available in Huma.

 

 

How data flows

Data Huma → Visma Visma → Huma When
Profile fields ✅ Automatic ✅ Manual only Huma changes are sent in real time. Visma changes are brought in when you click «Sync users».
New employees ✅ Manual only ✅ Manual only During «Sync users»
Positions ✅ Automatic ❌ When a position is created or changed in Huma
Absence ✅ Automatic ❌ When absence is approved in Huma and has an end date
Salary ✅ Automatic ❌ When salary is created, changed or deleted in Huma

 

⚠️ Historical data is not transferred. Only positions, absence and salary created or changed after you turn on each setting are sent to Visma.net Payroll.

 

 

Before you start

  • You have a System role with full access to Organization in Huma.
  • You, or a colleague, can log in to Visma.net Payroll as an administrator with access to «Visma.net App Store».
  • Employees who exist in both systems have the same email address in Huma and Visma. Huma matches employees by email only.
  • Salary is registered in NOK in Huma. Visma.net Payroll only accepts NOK.
  • If you want to sync absence:
    • Absence must be set up in Huma first (absence types or work schedules).
    • The absence types (event codes) you want to use must exist in Visma.
    • «Calendar API» must be enabled for the Huma app in Visma.

🔗 Getting started with Payroll & accounting integrations

 

 

Set up the integration

Step 1: Get the Tenant ID from Visma.net Payroll

  1. Log in to Visma.net Payroll as an administrator with access to «Visma.net App Store».
  2. Go to «Visma.net App Store», then find and open the «Huma HR» app.
  3. Under «Activate the service now», click «Set permissions».
  4. Enable «Read employees» and «Write employees».
  5. If you want to sync absence, also enable «Calendar API».
  6. Click «Integrate».
  7. Click your name in the top right corner and copy the «Tenant ID».

 

1-Sep-27-2026-09-19-36-4142-PM

2-Sep-27-2026-09-19-36-3915-PM

 

 

Step 2: Connect Huma to Visma.net Payroll

  1. In Huma, go to «Integrations» and select «Visma.net Payroll».
  2. Read the «Overview» and «Details» tabs.
  3. Click «Set up» in the top right corner.
  4. Give the connection a name.
  5. Choose who should be part of this connection: everyone, or a specific team, location or company.
  6. Click «Continue».
  7. Paste the «Tenant ID» from Visma.
  8. Confirm that you have the legal authority to accept the terms on behalf of your organization.
  9. Click «Continue».

 

🔗 Need more than one connection, for example one per company? See Multiple integrations.

 

1-Sep-27-2026-09-20-21-0315-PM

Screenshot 2026-09-27 at 23.22.15

 

 

Step 3: Choose what to sync

You can change all of these settings later.

Setting When it's on When it's off
Positions: Create, update and delete Position changes in Huma are sent to Visma. Positions are not sent.
Salary: Create, update and delete in Visma.net Payroll when updated in Huma Salary changes in Huma are sent to Visma. If a salary's start date doesn't match an existing salary in Visma, a new one is created. Salary is not sent.
Absence: Create, update and delete in Visma.net Payroll when updated in Huma Approved absence is sent to the calendar in Visma. Absence is not sent.

 

💡 Entering historical positions? Turn position sync off while you enter them. Historical positions aren't meant for the payroll system and can cause errors in the payroll timeline. Turn it on before you create positions that start today or in the future.

💡 If you turn on absence sync after the integration is set up, click «Reconnect» on the integration page afterwards.

 

Screenshot 2026-09-27 at 23.22.33

 

 

Step 4: Map absence types

You only do this step if absence sync is on.

  1. Go through each absence type in Huma.
  2. Select the matching absence type (event code) in Visma.
  3. Leave any type you don't want to send unmapped.
  4. Click «Save».

 

💡 You can change the mapping later. Click ··· on the integration page and select «Map absence types».

 

Screenshot 2026-09-27 at 23.25.25

 

 

Step 5: Sync users to activate the integration

After setup, the integration page says «This integration has been set up, but is not active». Nothing is sent until you complete this step.

  1. Click «Sync users».
  2. Matching users are employees with the same email in both systems.
    • Click «View users» to see fields with different or missing values.
    • For each case, choose to update Huma with the value from Visma, update Visma with the value from Huma, or leave it.
    • Click «Next».
  3. Non-matching users are employees that exist in only one system.
    • Choose whether to create all of them, only the ones you select, or none.
    • Choose the direction: Visma → Huma, or Huma → Visma.
  4. Click «Sync users».

The status changes to «Connected and active». You'll get an email with the result.

 

💡 Note

Before you sync, decide which system has the most up-to-date information. Your choices here overwrite data.

⚠️ Users missing required fields are not synced until the missing values are added.

⚠️ Only employees with a start date in Visma of today or earlier are created in Huma. Employees with a future start date are shown during «Sync users», but are not created.

 

Screenshot 2026-09-27 at 23.27.56

Screenshot 2026-09-27 at 23.28.10

 

 

After the integration is active

Screenshot 2026-09-27 at 23.30.06

 

What happens automatically

  • Changes to supported profile fields in Huma are sent to Visma in real time.
  • Positions, absence and salary are sent when they change in Huma, if those settings are on.

 

When you need to sync manually

Click «Sync users» when:

  • You have changed a supported field in Visma and want it in Huma.
  • You have added employees in Visma that should be created in Huma.
  • You have added employees in Huma that should be created in Visma. New employees are never created in Visma automatically.

 

New employees created from Huma

Employees created in Visma from Huma get the status «Draft». A Visma user must open the employee, click «Edit draft» and fill in the fields Visma requires before the employee becomes active. If you're unsure which fields this applies to, contact Visma support.

 

2-Sep-27-2026-09-29-34-6041-PM

 

When an employee leaves

Deactivated in Huma:

  • The employee is not deactivated in Visma.
  • The employee is locked for updates from the integration.

Deleted in Huma:

  • The employee is not deleted in Visma.
  • The next «Sync users» suggests creating them in Huma again.
  • The employee can't be synced if they were changed in Visma after they were deleted in Huma.

💡 To end the employment in Visma, set the contract end date and end reason on the position in Huma. See Supported fields.

 

Change settings or the Tenant ID

  1. Go to the Visma.net Payroll integration in Huma.
  2. Click ··· in the top right corner.
  3. Select an option:
    • «Edit connection settings» to change sync settings or the Tenant ID.
    • «Edit connection details» to change the name or who is part of the connection.
    • «Map absence types» to change the absence mapping.

⚠️ After you turn absence sync on or off, click «Reconnect» on the integration page.

⚠️ If you change the permissions for the Huma app in Visma, wait up to 1 hour before you change the integration settings in Huma.

 

Disconnect or remove

  • Disconnect: Stops syncing but keeps your configuration.
  • Remove: Stops syncing and deletes all stored configuration.

 

 

Supported fields

Profile fields

Changes in Huma are sent automatically. Changes in Visma are brought in with «Sync users».

Huma field Field in Visma.net Payroll Required Notes
Email address Company email ✅ Used to match employees. Must be unique in Huma. Huma uses the company email in Visma, or the first email if there is no company email. If only a private email exists in Visma, updating the email in Huma adds a work email in Visma.
API name: emails[].address
Employee ID Employee number ✅ Must be unique in Huma. Maximum 12 characters. Only updated in Visma for employees in draft mode.
API name: number
First name First name   From Huma: the current name in Visma gets an end date, and the new name is added from today. From Visma: the current name is used.
API name: personNames[].firstName
Last name Last name   Same as first name.
API name: personNames[].lastName
Phone number Company phone   Must be unique in Huma.
API name: phones[].number
Address Address (Street, Postcode, City, Country)   The second address line in Huma is not sent.
API names: address.streetName, address.zipCode, address.cityName, address.countryCode
Bank account Salary payment method   Norwegian account numbers are sent as a local bank account. International accounts are sent as IBAN + BIC. National account numbers from other countries are sent as «Cash».
API name: salaryPaymentMethod
Identifications National identity number / D-number   Only Norwegian national identity numbers and D-numbers. The date of birth must match the first six digits. The integration can't remove this value in Visma.
API names: personIds[].personId.id, personIds[].personId.typeOfId, personIds[].personId.country

 

Positions (Huma → Visma)

Huma field Field in Visma.net Payroll Required Notes
Contract start date Start date ✅ Used to find the position in Visma.
API name: positions[].activeStart
Contract end date End date   Only sent with a supported end reason, and only if the date is today or later.
API name: positions[].activeEnd
End reason End reason   Never sent without an end date.
API name: positions[].positionEndReason
Position percentage Position percentage   API name: positions[].partTimeFactor
Contract type Employment form   Only sent for positions of type «Ordinary» or «Maritime» in Visma.
API name: positions[].employmentForm

 

End reason

End reason in Huma Ends the position in Visma?
The employee has resigned ✅
The employer has terminated the employee ✅
The contract, engagement, or temporary position has expired ✅
Change of payroll system or accountant ✅
Internal transfer, Other, or not set ❌ The employment continues in Visma.

 

Contract type

Contract type in Huma Sent to Visma as
Permanent Permanent (fast)
Temporary, Seasonal, Trainee, Job training program Temporary (midlertidig)
Casual Temporary employee on call (midlertidigAnsattSomTilkallingsvikar)
Consultant, Freelance, Third party, Other Not sent

 

Absence (Huma → Visma)

Huma field Field in Visma.net Payroll Required Notes
Absence type Event code ✅ Set up in Step 4.
API name: eventcode
Time period From date / To date ✅ API names: startDate, endDate
Percentage Percent ✅ The event code in Visma must allow grading. Visma doesn't allow graded vacation.
API names: inputType, properties.percent
Note Comment   Shown when the absence is approved in Visma.
API name: comment

 

Salary (Huma → Visma)

Huma field Field in Visma.net Payroll Required Notes
From date From date   If no value is set, there is no start date in Visma.
API name: salaryInformation.activeStart
To date To date   If no value is set, there is no end date in Visma.
API name: salaryInformation.activeEnd
Amount Hourly salary / Monthly salary / Annual salary ✅ Must be in NOK. Hourly, monthly and annual amounts are sent as they are. Weekly amounts are converted to hourly salary using the weekly working hours in Visma.
API names: salaryInformation.hourlySalary, salaryInformation.monthlySalary, salaryInformation.yearlySalary
Interval Contract salary type   Hourly or weekly → Hourly. Monthly → Monthly. Annual → Yearly.
API name: salaryInformation.contractSalaryType
Interval Salary type   Hourly or weekly → Variable salary. Monthly or annual → Fixed salary.
API name: salaryInformation.salaryType

 

 

Error log and troubleshooting

Where to find the error log

  1. Go to the Visma.net Payroll integration in Huma.
  2. Open the «Error log» tab.

 

Errors are grouped by day. Each entry shows a message, the time, the employee it applies to and a level:

Level Meaning
🔴 Error Something was not sent to Visma. You need to act.
🟡 Warning Something needs your attention.
🔵 Info For your information. No action needed.

 

Integration status

Status on the integration page What to do
This integration has been set up, but is not active Click «Sync users» to activate it.
Connected and active Everything is running.

 

Common errors

Error message (or part of it) What it means How to fix
Can not find unique or non-overlapping position in Visma… Huma can't find exactly one position in Visma that covers the dates of the position in Huma. Check the positions in Visma. Make sure one position covers the start and end date, then save the position in Huma again.
Position not synced to Visma: this change would leave a gap… The change would leave a gap in the position percentage or contract type timeline. Visma doesn't allow gaps. Make sure the history matches in Huma and Visma, then try again.
Position not synced to Visma: Huma and Visma have drifted… Visma doesn't have the values Huma expected, often because someone changed the position directly in Visma. Compare the position in Huma and Visma. Correct the difference, then try the change in Huma again.
…overlaps with existing part time factor / employment form… The change overlaps with existing values in Visma. Update Visma manually, or adjust the dates in Huma.
Can not sync position end to Visma: contract end date … is in the past Only end dates that are today or later are sent. This protects historical payroll data. Register the end of employment manually in Visma.
Position deletion is not propagated to Visma The position was deleted in Huma only. Close the position manually in Visma if needed.
Salary modification impossible because of an overlapping salary in Visma Visma already has a different salary in the same period. Correct the salaries in Visma, then save the salary in Huma again.
Salary in another currency than NOK Visma.net Payroll only accepts NOK. The salary is not sent. Register the salary in NOK in Huma, or manually in Visma.
More than one matching absence found… Visma has more than one absence that matches the absence in Huma. Remove the duplicate in Visma, then change the absence in Huma again.

 

When Visma rejects absence

If Visma rejects an absence, Huma marks it as rejected, notifies the relevant people and logs the error. Common reasons:

  • The employee has no active employment in Visma for the period, is inactive, or has a future start date.
  • The event code doesn't allow grading, or has a limit on the number of occurrences that is exceeded.
  • The absence conflicts with absence already registered in Visma.
  • The employee card in Visma is missing information, such as salary, working hours, or a position percentage above 0 %.
  • The absence types and balances are not assigned in the calendar in Visma.

 

 

FAQ

Why are changes I make in Visma not showing in Huma?
Changes only go automatically from Huma to Visma. To bring changes from Visma into Huma, click «Sync users».

 

How are positions matched between Huma and Visma?
Huma looks for the one position in Visma that covers the contract start date and end date. Within that position, Huma matches the position percentage and contract type by their previous dates and values. If nothing matches, the change is not sent, and the error is logged. This protects your payroll data in Visma.

 

What happens if I delete a position or a salary in Huma?
A deleted position is not sent to Visma. The position stays in Visma, and you must close it there if needed. A deleted salary is also deleted in Visma.

 

How is sick leave handled?
When sick leave is sent from Huma, the medical certificate option is enabled in Visma, with the same start date as in Huma. Self-certification does not enable the medical certificate option.

 

Why can't I send «Sick child» absence to Visma?
Visma requires a child to be registered on the absence. Huma doesn't send this, so you must fill in «Child» manually in Visma.

 

Is absence from Huma automatically approved in Visma?
It depends on the settings for each event code in Visma. Contact Visma support if you're unsure.

 

How is absence time calculated in Visma?
Visma calculates the time based on its own work schedule settings. Make sure the calendar settings in Huma and Visma match, so days off and public holidays are calculated correctly.

 

What happens during a salary revision in Huma?
Huma sends the changes for each employee. If a change would affect more than one employment in Visma for the same employee, the error is logged and nothing is updated in Visma for that employee.

 

Why do salary rows in Huma and Visma no longer match?
Visma merges consecutive salary rows with the same amount. If you create several identical salary rows in Huma in a row, the systems can get out of sync. For employees who are not in draft mode, Visma doesn't allow salary history to be deleted, only cleared.

 

 

Related articles

🔗 Getting started with Payroll & accounting integrations

🔗 How positions work in integrations

🔗 How absence works in integrations

🔗 How salary works in integrations

🔗 Multiple integrations