curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/contractors \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"business_name": "Contractor Co",
"first_name": "John",
"last_name": "Smith",
"email": "john@smith.com",
"external_ref": "<external_ref>"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/contractors"
payload = {
"business_name": "Contractor Co",
"first_name": "John",
"last_name": "Smith",
"email": "john@smith.com",
"external_ref": "<external_ref>"
}
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_name: 'Contractor Co',
first_name: 'John',
last_name: 'Smith',
email: 'john@smith.com',
external_ref: '<external_ref>'
})
};
fetch('https://sandbox.nmbr.co/services/payroll/contractors', 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/contractors",
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_name' => 'Contractor Co',
'first_name' => 'John',
'last_name' => 'Smith',
'email' => 'john@smith.com',
'external_ref' => '<external_ref>'
]),
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/contractors"
payload := strings.NewReader("{\n \"business_name\": \"Contractor Co\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@smith.com\",\n \"external_ref\": \"<external_ref>\"\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/contractors")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"business_name\": \"Contractor Co\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@smith.com\",\n \"external_ref\": \"<external_ref>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/contractors")
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_name\": \"Contractor Co\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@smith.com\",\n \"external_ref\": \"<external_ref>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "contractor",
"data": {
"business_name": "Contractor Co",
"first_name": "John",
"last_name": "Smith",
"middle_initial": null,
"email": "john@smith.com",
"business_number": null,
"sin_last_3": null,
"external_ref": "<external_ref>",
"preferred_locale": null,
"archived_at": null,
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/contractors/<id>"
}
}Create a contractor
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/contractors \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"business_name": "Contractor Co",
"first_name": "John",
"last_name": "Smith",
"email": "john@smith.com",
"external_ref": "<external_ref>"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/contractors"
payload = {
"business_name": "Contractor Co",
"first_name": "John",
"last_name": "Smith",
"email": "john@smith.com",
"external_ref": "<external_ref>"
}
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_name: 'Contractor Co',
first_name: 'John',
last_name: 'Smith',
email: 'john@smith.com',
external_ref: '<external_ref>'
})
};
fetch('https://sandbox.nmbr.co/services/payroll/contractors', 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/contractors",
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_name' => 'Contractor Co',
'first_name' => 'John',
'last_name' => 'Smith',
'email' => 'john@smith.com',
'external_ref' => '<external_ref>'
]),
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/contractors"
payload := strings.NewReader("{\n \"business_name\": \"Contractor Co\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@smith.com\",\n \"external_ref\": \"<external_ref>\"\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/contractors")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"business_name\": \"Contractor Co\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@smith.com\",\n \"external_ref\": \"<external_ref>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/contractors")
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_name\": \"Contractor Co\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john@smith.com\",\n \"external_ref\": \"<external_ref>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "contractor",
"data": {
"business_name": "Contractor Co",
"first_name": "John",
"last_name": "Smith",
"middle_initial": null,
"email": "john@smith.com",
"business_number": null,
"sin_last_3": null,
"external_ref": "<external_ref>",
"preferred_locale": null,
"archived_at": null,
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/contractors/<id>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The contractor's business or corporation name. null for individual contractors.
255The contractor's first name. null for corporation contractors.
50The contractor's last name. null for corporation contractors.
50The contractor's middle initial. null for corporation contractors.
1The contractor's email address, used for payroll communications.
The contractor's 15-character (BN15) Canada Revenue Agency (CRA) program account number, consisting of a 9-digit Business Number (BN), a 2-letter program identifier, and a 4-digit reference number. null for individual contractors. The 9-digit root begins with 1, 7, or 8 and carries a Luhn check digit; the reference number starts at 0001.
The contractor's Social Insurance Number (SIN). null for corporation contractors. 9 digits, sent as a string. Spaces and dashes are stripped before validation. The first digit cannot be 0 or 8, and the number must pass the Luhn checksum.
255The locale used for payroll communications sent to this contractor, such as Pay Stub emails. If not set, the Company's locale is used.
en, fr The date the contractor was archived. Archiving a contractor also archives all Work Assignments that are not already archived. Archived contractors do not appear in active listings.
Response
Created
The unique identifier of the object in Nmbr.
The type of the object in Nmbr ("contractor").
Hide child attributes
Hide child attributes
The contractor's business or corporation name. null for individual contractors.
255The contractor's first name. null for corporation contractors.
50The contractor's last name. null for corporation contractors.
50The contractor's middle initial. null for corporation contractors.
1The contractor's email address, used for payroll communications.
255The contractor's 15-character (BN15) Canada Revenue Agency (CRA) program account number, consisting of a 9-digit Business Number (BN), a 2-letter program identifier, and a 4-digit reference number. null for individual contractors. The 9-digit root begins with 1, 7, or 8 and carries a Luhn check digit; the reference number starts at 0001.
15The last 3 digits of the contractor's Social Insurance Number (SIN). null if no SIN has been provided.
A reference to the object in an external system, e.g. the primary key of the object in your application's database. Nmbr doesn't use, validate, parse, or require this value to be unique - it simply stores it for your reference.
255The locale used for payroll communications sent to this contractor, such as Pay Stub emails. If not set, the Company's locale is used.
en, fr The date the contractor was archived. Archiving a contractor also archives all Work Assignments that are not already archived. Archived contractors do not appear in active listings.
The date and time the object was created in Nmbr.
The date and time the object was last updated in Nmbr.

