curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/reports/workers-compensation \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"business_entity_id": "<id>",
"pay_schedule_id": "<id>",
"filters": {
"year": 2026,
"province_of_work": "ON"
}
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/reports/workers-compensation"
payload = {
"business_entity_id": "<id>",
"pay_schedule_id": "<id>",
"filters": {
"year": 2026,
"province_of_work": "ON"
}
}
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({
business_entity_id: '<id>',
pay_schedule_id: '<id>',
filters: {year: 2026, province_of_work: 'ON'}
})
};
fetch('https://sandbox.nmbr.co/services/payroll/reports/workers-compensation', 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/workers-compensation",
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([
'business_entity_id' => '<id>',
'pay_schedule_id' => '<id>',
'filters' => [
'year' => 2026,
'province_of_work' => 'ON'
]
]),
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/workers-compensation"
payload := strings.NewReader("{\n \"business_entity_id\": \"<id>\",\n \"pay_schedule_id\": \"<id>\",\n \"filters\": {\n \"year\": 2026,\n \"province_of_work\": \"ON\"\n }\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/workers-compensation")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"business_entity_id\": \"<id>\",\n \"pay_schedule_id\": \"<id>\",\n \"filters\": {\n \"year\": 2026,\n \"province_of_work\": \"ON\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/reports/workers-compensation")
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 \"business_entity_id\": \"<id>\",\n \"pay_schedule_id\": \"<id>\",\n \"filters\": {\n \"year\": 2026,\n \"province_of_work\": \"ON\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "report",
"data": {
"type": "workers-compensation",
"business_entity": {
"id": "<id>",
"object": "business_entity",
"links": {
"self": "/business_entities/<id>"
}
},
"pay_schedule": {
"id": "<id>",
"object": "pay_schedule",
"links": {
"self": "/pay_schedules/<id>"
}
},
"payroll": null,
"filters": {
"payroll_type": null,
"payroll_status": null,
"pay_date_from": null,
"pay_date_to": null,
"year": 2026
},
"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 WCB report
When a Workers Compensation Board Report is created, the report content will be created asynchronously. It may then be retrieved asynchronously from the GET endpoint using an “accept: text/csv” header.
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/reports/workers-compensation \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"business_entity_id": "<id>",
"pay_schedule_id": "<id>",
"filters": {
"year": 2026,
"province_of_work": "ON"
}
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/reports/workers-compensation"
payload = {
"business_entity_id": "<id>",
"pay_schedule_id": "<id>",
"filters": {
"year": 2026,
"province_of_work": "ON"
}
}
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({
business_entity_id: '<id>',
pay_schedule_id: '<id>',
filters: {year: 2026, province_of_work: 'ON'}
})
};
fetch('https://sandbox.nmbr.co/services/payroll/reports/workers-compensation', 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/workers-compensation",
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([
'business_entity_id' => '<id>',
'pay_schedule_id' => '<id>',
'filters' => [
'year' => 2026,
'province_of_work' => 'ON'
]
]),
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/workers-compensation"
payload := strings.NewReader("{\n \"business_entity_id\": \"<id>\",\n \"pay_schedule_id\": \"<id>\",\n \"filters\": {\n \"year\": 2026,\n \"province_of_work\": \"ON\"\n }\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/workers-compensation")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"business_entity_id\": \"<id>\",\n \"pay_schedule_id\": \"<id>\",\n \"filters\": {\n \"year\": 2026,\n \"province_of_work\": \"ON\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/reports/workers-compensation")
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 \"business_entity_id\": \"<id>\",\n \"pay_schedule_id\": \"<id>\",\n \"filters\": {\n \"year\": 2026,\n \"province_of_work\": \"ON\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "report",
"data": {
"type": "workers-compensation",
"business_entity": {
"id": "<id>",
"object": "business_entity",
"links": {
"self": "/business_entities/<id>"
}
},
"pay_schedule": {
"id": "<id>",
"object": "pay_schedule",
"links": {
"self": "/pay_schedules/<id>"
}
},
"payroll": null,
"filters": {
"payroll_type": null,
"payroll_status": null,
"pay_date_from": null,
"pay_date_to": null,
"year": 2026
},
"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 business_entity_id and payroll_id is either empty or not set.
Must be present when filters.province_of_work is either empty or not set.
Hide child attributes
Hide child attributes
2024 <= x <= 2027AB, BC, FEDERAL, MB, NB, NL, NS, NT, NU, OC, ON, PE, QC, SK, YT Must be present when filters.province_of_work is either empty or not set.
AB, BC, FEDERAL, MB, NB, NL, NS, NT, NU, OC, ON, PE, QC, SK, YT 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.

