Visma Cloud Payroll (Spiris Lon) API
REST API for Spiris Lon / Visma Cloud Payroll covering employees, employments, salary transactions, absences, pay periods, payslips and accounting output. Published as OpenAPI 3.0.4 in two live versions, V2 (68 paths / 88 operations) and V1 (73 paths / 63 operations), served from vlsapi.vismaonline.com and sharing the Visma Online IdentityServer with eAccounting.
GET
/v2/agreements
Get agreements
POST
/v2/agreements
Creates an agreement.
GET
/v2/agreements/{agreementId}
Get agreement by id
GET
/v2/breakrules
Get break rules
POST
/v2/breakrules
Create a break rule
GET
/v2/breakrules/{breakRuleId}
Get break rule by id
POST
/v2/shortcuts/careofsickchild
Create a care of sick child shortcut
GET
/v2/shortcuts/careofsickchild/{shortcutId}
Get a care of sick child shortcut by id
PUT
/v2/shortcuts/careofsickchild/{shortcutId}
Update a care of sick child shortcut
DELETE
/v2/shortcuts/careofsickchild/{shortcutId}
Delete a care of sick child shortcut
GET
/v2/shortcuts/careofsickchild/{startDate}/{endDate}
Get care of sick child shortcuts between dates
GET
/v2/employees
Get all employees
POST
/v2/employees
Create employee
GET
/v2/employees/{employeeId}
Get employee by id
POST
/v2/employees/{employeeId}/workschedules
Create employee work schedule
POST
/v2/employees/{employeeId}/agreements
Create employee agreement
GET
/v2/externalperiods
Get external periods
POST
/v2/externalperiods
Create an external period
GET
/v2/externalperiods/{externalPeriodId}
Get external period by unique identifier
DELETE
/v2/externalperiods/{externalPeriodId}
Delete an external period
GET
/v2/externalperiods/{employeeId}/{deviationDate}
Get external period by employee and deviation date
POST
/v2/shortcuts/holiday
Create a holiday shortcut
GET
/v2/shortcuts/holiday/{shortcutId}
Get a holiday shortcut by id
PUT
/v2/shortcuts/holiday/{shortcutId}
Update a holiday shortcut
DELETE
/v2/shortcuts/holiday/{shortcutId}
Delete a holiday shortcut
GET
/v2/shortcuts/holiday/{startDate}/{endDate}
Get holiday shortcuts between dates
POST
/v2/shortcuts/hoursworked
Create an hours worked shortcut
GET
/v2/shortcuts/hoursworked/{shortcutId}
Get an hours worked shortcut by id
PUT
/v2/shortcuts/hoursworked/{shortcutId}
Update an hours worked shortcut
DELETE
/v2/shortcuts/hoursworked/{shortcutId}
Delete an hours worked shortcut
GET
/v2/shortcuts/hoursworked/{startDate}/{endDate}
Get hours worked shortcuts between dates
POST
/v2/shortcuts/otherabsence
Create an other absence shortcut
GET
/v2/shortcuts/otherabsence/{shortcutId}
Get an other absence shortcut by id
PUT
/v2/shortcuts/otherabsence/{shortcutId}
Update an other absence shortcut
DELETE
/v2/shortcuts/otherabsence/{shortcutId}
Delete an other absence shortcut
GET
/v2/shortcuts/otherabsence/{startDate}/{endDate}
Get other absence shortcuts between dates
POST
/v2/shortcuts/otheradditiondeduction
Create other addition and deduction shortcut
GET
/v2/shortcuts/otheradditiondeduction/{shortcutId}
Get other addition and deduction shortcut by id
PUT
/v2/shortcuts/otheradditiondeduction/{shortcutId}
Update other addition and deduction shortcut
DELETE
/v2/shortcuts/otheradditiondeduction/{shortcutId}
Delete other addition and deduction shortcut
GET
/v2/shortcuts/otheradditiondeduction/{startDate}/{endDate}
Get other addition and deduction shortcuts between dates
POST
/v2/shortcuts/overtime
Create an overtime shortcut
GET
/v2/shortcuts/overtime/{shortcutId}
Get an overtime shortcut by id
PUT
/v2/shortcuts/overtime/{shortcutId}
Update an overtime shortcut
DELETE
/v2/shortcuts/overtime/{shortcutId}
Delete an overtime shortcut
GET
/v2/shortcuts/overtime/{startDate}/{endDate}
Get overtime shortcuts between dates
POST
/v2/shortcuts/parentalleave
Create a parental leave shortcut
GET
/v2/shortcuts/parentalleave/{shortcutId}
Get a parental leave shortcut by id
PUT
/v2/shortcuts/parentalleave/{shortcutId}
Update a parental leave shortcut
DELETE
/v2/shortcuts/parentalleave/{shortcutId}
Delete a parental leave shortcut
GET
/v2/shortcuts/parentalleave/{startDate}/{endDate}
Get parental leave shortcuts between dates
GET
/v2/paycodes
Gets paycodes
GET
/v2/paycodes/{paycodeId}
Gets a paycode by id
GET
/v2/paycodes/travelandexpense
Gets paycodes to use for travel and expense shortcut.
GET
/v2/paycodes/otheradditiondeduction
Gets paycodes to use for other addition deduction shortcut.
GET
/v2/payrollsettings
Get payroll settings.
GET
/v2/payslips/wagerun/{wagerunId}
Gets payslips for specified wage run
GET
/v2/payslips/{payslipId}
Gets payslip by id
GET
/v2/payslips/{employeeId}/withdetails
Gets all employees payslips with employee details
POST
/v2/shortcuts/sickleave
Create a sick leave shortcut
GET
/v2/shortcuts/sickleave/{shortcutId}
Get a sick leave shortcut by id
PUT
/v2/shortcuts/sickleave/{shortcutId}
Update a sick leave shortcut
DELETE
/v2/shortcuts/sickleave/{shortcutId}
Delete a sick leave shortcut
GET
/v2/shortcuts/sickleave/{startDate}/{endDate}
Get sick leave shortcuts between dates
POST
/v2/shortcuts/timebank
Create a timebank shortcut
GET
/v2/shortcuts/timebank/{shortcutId}
Get a timebank shortcut by id
PUT
/v2/shortcuts/timebank/{shortcutId}
Update a timebank shortcut
DELETE
/v2/shortcuts/timebank/{shortcutId}
Delete a timebank shortcut
GET
/v2/shortcuts/timebank/{startDate}/{endDate}
Get timebank shortcuts between dates
GET
/v2/timeruleannualdates
Get time rule annual dates
POST
/v2/timeruleannualdates
Create an annual date for time rule
GET
/v2/timeruleannualdates/{timeRuleAnnualDateId}
Get time rule annual date by unique identifier
POST
/v2/shortcuts/travelandexpense
Create a travel and expense shortcut
GET
/v2/shortcuts/travelandexpense/{shortcutId}
Get a travel and expense shortcut by id
PUT
/v2/shortcuts/travelandexpense/{shortcutId}
Update a travel and expense shortcut
DELETE
/v2/shortcuts/travelandexpense/{shortcutId}
Delete a travel and expense shortcut
GET
/v2/shortcuts/travelandexpense/{startDate}/{endDate}
Get travel and expense shortcuts between dates
GET
/v2/wageruns
Get wage runs
GET
/v2/wageruns/{wagerunId}
Get wage run by unique identifier
GET
/v2/workdayoverrides
Get work day overrides
POST
/v2/workdayoverrides
Create a work day override
GET
/v2/workdayoverrides/{workDayOverrideId}
Get work day override by unique identifier
GET
/v2/workschedules
Get work schedules
POST
/v2/workschedules
Create a work schedule
GET
/v2/workschedules/{workScheduleId}
Get work schedule by unique identifier
GET
/v2/workscheduletimeadjustments
Get work schedule time adjustments
POST
/v2/workscheduletimeadjustments
Create a work schedule time adjustment
GET
/v2/workscheduletimeadjustments/{workScheduleTimeAdjustmentId}
Get work schedule time adjustment by unique identifier
Documentation
Specifications
Other Resources
Every API here is available over the APIs.io API and to AI agents over MCP.
{
"openapi": "3.0.4",
"info": {
"title": "Spiris Lön API V2",
"description": "Visit our complete [Spiris Lön/Cloud Payroll API docs](https://developer.vismaonline.com) for how to get started, more information about authentication, error handling, query customization and more.",
"contact": {
"email": "api@spiris.se"
},
"version": "v2"
},
"servers": [
{
"url": "https://vlsapi.vismaonline.com/"
}
],
"paths": {
"/v2/agreements": {
"get": {
"tags": [
"Agreements"
],
"summary": "Get agreements",
"description": "Get all agreements or add query parameters to filter the results. The response will include a paginated list of agreements.\r\n \r\n\r\n",
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PaginatedResponseOfAgreementResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"post": {
"tags": [
"Agreements"
],
"summary": "Creates an agreement.",
"description": "Creates an agreement.\r\n\r\n\r\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateAgreementRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AgreementResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/agreements/{agreementId}": {
"get": {
"tags": [
"Agreements"
],
"summary": "Get agreement by id",
"description": " Gets an agreement by specified id.\r\n\r\n",
"parameters": [
{
"name": "agreementId",
"in": "path",
"description": "Id of the agreement",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "The agreement with the specified id.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AgreementResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/breakrules": {
"get": {
"tags": [
"BreakRule"
],
"summary": "Get break rules",
"description": "Get all break rules or add query parameters to filter the results. The response will include a paginated list of break rules.\r\n\r\n\r\n",
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PaginatedResponseOfBreakRuleResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"post": {
"tags": [
"BreakRule"
],
"summary": "Create a break rule",
"description": "Create a break rule with properties specified in the request body\r\n\r\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateBreakRuleRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Resource created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BreakRuleResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/breakrules/{breakRuleId}": {
"get": {
"tags": [
"BreakRule"
],
"summary": "Get break rule by id",
"description": "Gets a specific break rule by ID. Query options can be applied to customize the response. The response contains the requested break rule.\r\n\r\n\r\n",
"parameters": [
{
"name": "breakRuleId",
"in": "path",
"description": "The Id of the break rule",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BreakRuleResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/shortcuts/careofsickchild": {
"post": {
"tags": [
"CareOfSickChild"
],
"summary": "Create a care of sick child shortcut",
"description": "Create a new care of sick child shortcut for an employee. The shortcut will be registered based on the specified registration method (time, hours, or percentage). If the end date is in a different month than the start date, the shortcut will be split into separate shortcuts for each month.\r\n\r\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CareOfSickChildRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CareOfSickChildResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/shortcuts/careofsickchild/{shortcutId}": {
"get": {
"tags": [
"CareOfSickChild"
],
"summary": "Get a care of sick child shortcut by id",
"description": "Get a specific care of sick child shortcut by its unique identifier. Use query parameters to select specific properties in the response.\r\n\r\n",
"parameters": [
{
"name": "shortcutId",
"in": "path",
"description": "The care of sick child shortcut id",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CareOfSickChildResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"put": {
"tags": [
"CareOfSickChild"
],
"summary": "Update a care of sick child shortcut",
"description": "Update an existing care of sick child shortcut by replacing its content. Only shortcuts that have not been read (imported by a payroll administrator) can be updated. The shortcut must belong to the same third-party client that created it.\r\n\r\n",
"parameters": [
{
"name": "shortcutId",
"in": "path",
"description": "The shortcut id",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CareOfSickChildRequest"
}
]
}
}
}
},
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CareOfSickChildResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"delete": {
"tags": [
"CareOfSickChild"
],
"summary": "Delete a care of sick child shortcut",
"description": "Delete a care of sick child shortcut by its unique identifier. Only shortcuts that have not been read (imported by a payroll administrator) can be deleted. The shortcut must belong to the same third-party client that created it.\r\n\r\n",
"parameters": [
{
"name": "shortcutId",
"in": "path",
"description": "The shortcut id",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful"
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/shortcuts/careofsickchild/{startDate}/{endDate}": {
"get": {
"tags": [
"CareOfSickChild"
],
"summary": "Get care of sick child shortcuts between dates",
"description": "Get all care of sick child shortcuts within a specified date range. Use query parameters to filter the results or include only shortcuts created by the same client.\r\n\r\n",
"parameters": [
{
"name": "startDate",
"in": "path",
"description": "Start date in format yyyy-MM-dd",
"required": true,
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "endDate",
"in": "path",
"description": "End date in format yyyy-MM-dd",
"required": true,
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "includeOnlySameClientShortcuts",
"in": "query",
"description": "If true, only includes shortcuts created by the same client",
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CareOfSickChildResponse"
}
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/migration/companysettings": { },
"/v2/migration/company/completeguide": { },
"/v2/migration/company/mtmigrationguidestatuscompleted": { },
"/v2/migration/company/guidestate": { },
"/v2/migration/employees": { },
"/v2/migration/employees/{employeeId}": { },
"/v2/employees": {
"get": {
"tags": [
"Employees"
],
"summary": "Get all employees",
"description": "Retrieves a paginated list of all employees in the company. \r\nYou can use query options ($filter, $select, $orderby, $top, $skip) to customize your request.\r\nThe endpoint includes both active and draft employees but excludes deleted employees. Limited employees are also included in the results.\r\n\r\n\r\n",
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PaginatedResponseOfEmployeeResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"post": {
"tags": [
"Employees"
],
"summary": "Create employee",
"description": "Create employee in this company.\r\n\r\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/CreateEmployeeRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Resource created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateEmployeeResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/employees/{employeeId}": {
"get": {
"tags": [
"Employees"
],
"summary": "Get employee by id",
"description": "Retrieves a specific employee by their unique identifier. The response includes comprehensive employee information such as personal details, contact information, address, employment status and other associated information.\nYou can use OData query options like `$select` to retrieve only specific fields from the employee record.\n\n\r\n\r\n",
"parameters": [
{
"name": "employeeId",
"in": "path",
"description": "Id of the employee",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EmployeeResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/employees/{employeeId}/workschedules": {
"post": {
"tags": [
"Employees"
],
"summary": "Create employee work schedule",
"description": "Add a work schedule to an employee.\r\n\r\n",
"parameters": [
{
"name": "employeeId",
"in": "path",
"description": "Id of employee",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/AddWorkScheduleToEmployeeRequest"
}
]
}
}
}
},
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AddWorkScheduleToEmployeeResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/employees/{employeeId}/agreements": {
"post": {
"tags": [
"Employees"
],
"summary": "Create employee agreement",
"description": "Add an agreement to an employee.\r\n\r\n",
"parameters": [
{
"name": "employeeId",
"in": "path",
"description": "Id of employee",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/AddAgreementToEmployeeRequest"
}
]
}
}
}
},
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AddAgreementToEmployeeResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/externalperiods": {
"get": {
"tags": [
"ExternalPeriods"
],
"summary": "Get external periods",
"description": "Get external periods.\n\r\n\r\n",
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PaginatedResponseOfExternalPeriodResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"post": {
"tags": [
"ExternalPeriods"
],
"summary": "Create an external period",
"description": "Create an external period.\n\nThe request is validated as follows:\n\n- A project/cost-center distribution is required.\n- Within each of `Project`, `CostCenter1`, `CostCenter2` and `CostCenter3`, percentages must be non-negative and total at most 100%. An allocation with a percentage of 0 is kept and applied as a 0% row on the payslip; it is not discarded.\n- Referenced projects and cost center items must exist on the company, and each cost center item must belong to the cost center dimension it is supplied under.\n- For requests that carry a project/cost-center distribution, `DeviationPeriodToDate` must match the employee's payroll period settings (the last day of a month, or the company's configured payment period day).\n- The period cannot be earlier than the employee's latest locked payslip.\n\nA validation failure returns `400 Bad Request` with a message describing the failing rule.\n\r\n\r\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/ExternalPeriodRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ExternalPeriodResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/externalperiods/{externalPeriodId}": {
"get": {
"tags": [
"ExternalPeriods"
],
"summary": "Get external period by unique identifier",
"description": "Get external period by unique identifier.\n\r\n\r\n",
"parameters": [
{
"name": "externalPeriodId",
"in": "path",
"description": "The external period unique identifier",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ExternalPeriodResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"delete": {
"tags": [
"ExternalPeriods"
],
"summary": "Delete an external period",
"description": "Delete an external period.\n\r\n\r\n",
"parameters": [
{
"name": "externalPeriodId",
"in": "path",
"description": "The external period unique identifier",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful"
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/externalperiods/{employeeId}/{deviationDate}": {
"get": {
"tags": [
"ExternalPeriods"
],
"summary": "Get external period by employee and deviation date",
"description": "Get external period by employee and deviation date.\n\r\n\r\n",
"parameters": [
{
"name": "employeeId",
"in": "path",
"description": "The unique identifier of the employee",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "deviationDate",
"in": "path",
"description": "The deviation date in format yyyy-MM-dd",
"required": true,
"schema": {
"type": "string",
"format": "date-time"
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ExternalPeriodResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/shortcuts/holiday": {
"post": {
"tags": [
"Holiday"
],
"summary": "Create a holiday shortcut",
"description": "Create a new holiday shortcut for an employee. The shortcut will be registered based on the specified registration method (time, hours or percentage).\r\n\r\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/HolidayRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HolidayResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
}
},
"/v2/shortcuts/holiday/{shortcutId}": {
"get": {
"tags": [
"Holiday"
],
"summary": "Get a holiday shortcut by id",
"description": "Get a specific holiday shortcut by its unique identifier. Use query parameters to select specific properties in the response.\r\n\r\n",
"parameters": [
{
"name": "shortcutId",
"in": "path",
"description": "The holiday shortcut id",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HolidayResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"put": {
"tags": [
"Holiday"
],
"summary": "Update a holiday shortcut",
"description": "Update an existing holiday shortcut by replacing its content. Only shortcuts that have not been read (imported by a payroll administrator) can be updated. The shortcut must belong to the same third-party client that created it.\r\n\r\n",
"parameters": [
{
"name": "shortcutId",
"in": "path",
"description": "The shortcut id",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/HolidayRequest"
}
]
}
}
}
},
"responses": {
"200": {
"description": "Request successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HolidayResponse"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommonExtendedBadRequest"
}
}
}
}
}
},
"delete": {
"tags": [
"Holiday"
],
"summary": "Delete a holiday shortcut",
"description": "Delete a holiday shortcut by its unique identifier. Only shortcuts that have not been read (imported by a payroll administrator) can be deleted. The shortcut must belong to the same third-party client that created it.\r\n\r\n",
"parameters": [
{
"name": "shortcutId",
"in": "path",
"description": "The shortcut id",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Request successful"
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
# --- truncated at 32 KB (418 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/visma/refs/heads/main/openapi/visma-payroll-api-v2-openapi.json