curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/reports/payroll-register \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"payroll_id": "<id>"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/reports/payroll-register"
payload = { "payroll_id": "<id>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({payroll_id: '<id>'})
};
fetch('https://sandbox.nmbr.co/services/payroll/reports/payroll-register', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.nmbr.co/services/payroll/reports/payroll-register",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'payroll_id' => '<id>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.nmbr.co/services/payroll/reports/payroll-register"
payload := strings.NewReader("{\n \"payroll_id\": \"<id>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.nmbr.co/services/payroll/reports/payroll-register")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"payroll_id\": \"<id>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/reports/payroll-register")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"payroll_id\": \"<id>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "report",
"data": {
"type": "payroll-register",
"business_entity": null,
"pay_schedule": null,
"payroll": {
"id": "<id>",
"object": "payroll",
"links": {
"self": "/payrolls/<id>"
}
},
"filters": {
"payroll_type": [
"regular",
"off_cycle",
"historical",
"correction"
],
"payroll_status": null,
"pay_date_from": null,
"pay_date_to": null,
"year": null
},
"has_results": false,
"format": null,
"sheet": null,
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/reports/<id>"
}
}Create payroll register report
When a Payroll Register Report is created, the report content will be created asynchronously. It may then be retrieved from GET /reports/{id}/download, or from GET /reports/{id} with an Accept: text/csv header.
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/reports/payroll-register \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"payroll_id": "<id>"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/reports/payroll-register"
payload = { "payroll_id": "<id>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({payroll_id: '<id>'})
};
fetch('https://sandbox.nmbr.co/services/payroll/reports/payroll-register', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.nmbr.co/services/payroll/reports/payroll-register",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'payroll_id' => '<id>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.nmbr.co/services/payroll/reports/payroll-register"
payload := strings.NewReader("{\n \"payroll_id\": \"<id>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.nmbr.co/services/payroll/reports/payroll-register")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"payroll_id\": \"<id>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/reports/payroll-register")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"payroll_id\": \"<id>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "report",
"data": {
"type": "payroll-register",
"business_entity": null,
"pay_schedule": null,
"payroll": {
"id": "<id>",
"object": "payroll",
"links": {
"self": "/payrolls/<id>"
}
},
"filters": {
"payroll_type": [
"regular",
"off_cycle",
"historical",
"correction"
],
"payroll_status": null,
"pay_date_from": null,
"pay_date_to": null,
"year": null
},
"has_results": false,
"format": null,
"sheet": null,
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/reports/<id>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Must be present when payroll_id is either empty or not set.
Must be present when pay_schedule_id is either empty or not set.
Sets the output format for /download: csv or xlsx. Required to use /download.
csv, xlsx For multi-sheet reports, selects which sheet /download returns. Payroll Register supports summary or detail.
detail, summary Response
Created
The unique identifier of the object in Nmbr.
The type of the object in Nmbr ("report").
Hide child attributes
Hide child attributes
cra-remittance, ei-cpp-balance, ei-qpp-qpip-balance, employer-health-tax, journal-entry, journal-entry-line-item, liability, payroll-register, rl1-preview, rq-remittance, t4-preview, vacation-accrual, workers-compensation, year-end-forms, year-to-date The output format set at creation for /download. One of csv or xlsx. null when no format was specified โ required to use /download.
csv, pdf, xlsx 255The sheet selected at creation for multi-sheet reports (e.g. summary or detail for Payroll Register). null when the report has a single sheet or no sheet was specified.
255The date and time the object was created in Nmbr.
The date and time the object was last updated in Nmbr.

