List payroll runs
curl --request GET \
--url https://api.melso.ai/v1/companies/{company_id}/payroll-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.melso.ai/v1/companies/{company_id}/payroll-runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.melso.ai/v1/companies/{company_id}/payroll-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"period": "<string>",
"kind": "ordinary",
"status": "received",
"created_at": "2023-11-07T05:31:56Z",
"external_id": "<string>",
"totals": {
"employees": 123,
"gross_pay": "121.00",
"irpf_withheld": "121.00",
"employee_contributions": "121.00"
},
"issues": [
{
"employee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "<string>",
"message": "<string>",
"blocking": true
}
],
"settlement_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tax_return_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
],
"next_cursor": "<string>"
}{
"error": "invalid token",
"code": "unauthorized",
"request_id": "req_01JAB3K9X2"
}{
"error": "invoice not found",
"code": "not_found",
"request_id": "req_01JAB3K9X2"
}Payroll runs
List payroll runs
Lists the payroll runs you sent for the company, newest period first.
GET
/
companies
/
{company_id}
/
payroll-runs
List payroll runs
curl --request GET \
--url https://api.melso.ai/v1/companies/{company_id}/payroll-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.melso.ai/v1/companies/{company_id}/payroll-runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.melso.ai/v1/companies/{company_id}/payroll-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"period": "<string>",
"kind": "ordinary",
"status": "received",
"created_at": "2023-11-07T05:31:56Z",
"external_id": "<string>",
"totals": {
"employees": 123,
"gross_pay": "121.00",
"irpf_withheld": "121.00",
"employee_contributions": "121.00"
},
"issues": [
{
"employee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "<string>",
"message": "<string>",
"blocking": true
}
],
"settlement_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tax_return_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
],
"next_cursor": "<string>"
}{
"error": "invalid token",
"code": "unauthorized",
"request_id": "req_01JAB3K9X2"
}{
"error": "invoice not found",
"code": "not_found",
"request_id": "req_01JAB3K9X2"
}Preview. A contract we are building with design partners. It is not callable yet, and fields can still change. See Availability.
Authorizations
Your partner secret key, mk_live_… for real companies or mk_test_…
for test companies. Keep it on your servers. See
Authentication.
Path Parameters
The company's ID. Every company-scoped call works in exactly this company.
Query Parameters
Page size.
Required range:
1 <= x <= 200The next_cursor of the previous page.
A year (2026), a quarter (2026-Q3), a month (2026-09) or an instalment (2026-1P).
Pattern:
^[0-9]{4}(-Q[1-4]|-(0[1-9]|1[0-2])|-[1-3]P)?$Example:
"2026-Q3"