curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/form_batches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"owner_id": "<id>",
"form_type": "t4",
"effective_date": "2026-01-01",
"form_stage": "original",
"contact_name": "Prof. Brody Ernser III",
"contact_email": "weber.pierre@example.net",
"contact_area_code": "657",
"contact_phone_number": "3654916"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/form_batches"
payload = {
"owner_id": "<id>",
"form_type": "t4",
"effective_date": "2026-01-01",
"form_stage": "original",
"contact_name": "Prof. Brody Ernser III",
"contact_email": "weber.pierre@example.net",
"contact_area_code": "657",
"contact_phone_number": "3654916"
}
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({
owner_id: '<id>',
form_type: 't4',
effective_date: '2026-01-01',
form_stage: 'original',
contact_name: 'Prof. Brody Ernser III',
contact_email: 'weber.pierre@example.net',
contact_area_code: '657',
contact_phone_number: '3654916'
})
};
fetch('https://sandbox.nmbr.co/services/payroll/form_batches', 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/form_batches",
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([
'owner_id' => '<id>',
'form_type' => 't4',
'effective_date' => '2026-01-01',
'form_stage' => 'original',
'contact_name' => 'Prof. Brody Ernser III',
'contact_email' => 'weber.pierre@example.net',
'contact_area_code' => '657',
'contact_phone_number' => '3654916'
]),
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/form_batches"
payload := strings.NewReader("{\n \"owner_id\": \"<id>\",\n \"form_type\": \"t4\",\n \"effective_date\": \"2026-01-01\",\n \"form_stage\": \"original\",\n \"contact_name\": \"Prof. Brody Ernser III\",\n \"contact_email\": \"weber.pierre@example.net\",\n \"contact_area_code\": \"657\",\n \"contact_phone_number\": \"3654916\"\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/form_batches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"owner_id\": \"<id>\",\n \"form_type\": \"t4\",\n \"effective_date\": \"2026-01-01\",\n \"form_stage\": \"original\",\n \"contact_name\": \"Prof. Brody Ernser III\",\n \"contact_email\": \"weber.pierre@example.net\",\n \"contact_area_code\": \"657\",\n \"contact_phone_number\": \"3654916\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/form_batches")
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 \"owner_id\": \"<id>\",\n \"form_type\": \"t4\",\n \"effective_date\": \"2026-01-01\",\n \"form_stage\": \"original\",\n \"contact_name\": \"Prof. Brody Ernser III\",\n \"contact_email\": \"weber.pierre@example.net\",\n \"contact_area_code\": \"657\",\n \"contact_phone_number\": \"3654916\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "form_batch",
"data": {
"owner": {
"id": "<id>",
"object": "business_entity",
"links": {
"self": "/business_entities/<id>"
}
},
"form_type": "t4",
"form_stage": "original",
"effective_date": "2026-01-01",
"status": "draft",
"contact_name": "Prof. Brody Ernser III",
"contact_email": "weber.pierre@example.net",
"contact_area_code": "657",
"contact_phone_number": "3654916",
"contact_extension": null,
"note": null,
"metadata": {
"counts": {
"total": 0,
"valid": 0,
"invalid": 0,
"draft": 0,
"approved": 0,
"processing": 0,
"submitted": 0,
"done": 0,
"rejected": 0
},
"flags": {
"is_submittable": false
},
"timestamps": {
"submitted_at": null,
"completed_at": null
},
"identifiers": {
"confirmation_number": null
}
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/form_batches/<id>"
}
}Create a form batch
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/form_batches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"owner_id": "<id>",
"form_type": "t4",
"effective_date": "2026-01-01",
"form_stage": "original",
"contact_name": "Prof. Brody Ernser III",
"contact_email": "weber.pierre@example.net",
"contact_area_code": "657",
"contact_phone_number": "3654916"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/form_batches"
payload = {
"owner_id": "<id>",
"form_type": "t4",
"effective_date": "2026-01-01",
"form_stage": "original",
"contact_name": "Prof. Brody Ernser III",
"contact_email": "weber.pierre@example.net",
"contact_area_code": "657",
"contact_phone_number": "3654916"
}
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({
owner_id: '<id>',
form_type: 't4',
effective_date: '2026-01-01',
form_stage: 'original',
contact_name: 'Prof. Brody Ernser III',
contact_email: 'weber.pierre@example.net',
contact_area_code: '657',
contact_phone_number: '3654916'
})
};
fetch('https://sandbox.nmbr.co/services/payroll/form_batches', 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/form_batches",
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([
'owner_id' => '<id>',
'form_type' => 't4',
'effective_date' => '2026-01-01',
'form_stage' => 'original',
'contact_name' => 'Prof. Brody Ernser III',
'contact_email' => 'weber.pierre@example.net',
'contact_area_code' => '657',
'contact_phone_number' => '3654916'
]),
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/form_batches"
payload := strings.NewReader("{\n \"owner_id\": \"<id>\",\n \"form_type\": \"t4\",\n \"effective_date\": \"2026-01-01\",\n \"form_stage\": \"original\",\n \"contact_name\": \"Prof. Brody Ernser III\",\n \"contact_email\": \"weber.pierre@example.net\",\n \"contact_area_code\": \"657\",\n \"contact_phone_number\": \"3654916\"\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/form_batches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"owner_id\": \"<id>\",\n \"form_type\": \"t4\",\n \"effective_date\": \"2026-01-01\",\n \"form_stage\": \"original\",\n \"contact_name\": \"Prof. Brody Ernser III\",\n \"contact_email\": \"weber.pierre@example.net\",\n \"contact_area_code\": \"657\",\n \"contact_phone_number\": \"3654916\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/form_batches")
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 \"owner_id\": \"<id>\",\n \"form_type\": \"t4\",\n \"effective_date\": \"2026-01-01\",\n \"form_stage\": \"original\",\n \"contact_name\": \"Prof. Brody Ernser III\",\n \"contact_email\": \"weber.pierre@example.net\",\n \"contact_area_code\": \"657\",\n \"contact_phone_number\": \"3654916\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "form_batch",
"data": {
"owner": {
"id": "<id>",
"object": "business_entity",
"links": {
"self": "/business_entities/<id>"
}
},
"form_type": "t4",
"form_stage": "original",
"effective_date": "2026-01-01",
"status": "draft",
"contact_name": "Prof. Brody Ernser III",
"contact_email": "weber.pierre@example.net",
"contact_area_code": "657",
"contact_phone_number": "3654916",
"contact_extension": null,
"note": null,
"metadata": {
"counts": {
"total": 0,
"valid": 0,
"invalid": 0,
"draft": 0,
"approved": 0,
"processing": 0,
"submitted": 0,
"done": 0,
"rejected": 0
},
"flags": {
"is_submittable": false
},
"timestamps": {
"submitted_at": null,
"completed_at": null
},
"identifiers": {
"confirmation_number": null
}
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/form_batches/<id>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The type of Forms in this batch (e.g. T4, RL-1).
Must be a form type that supports form batches. Not all form types support batches.
rl1, roe, t4, t4a, td1, td1ab, td1bc, td1mb, td1nb, td1nl, td1ns, td1nt, td1nu, td1on, td1pe, td1sk, td1x, td1yt, tp_1015_3_v, tp_1015_r_13_v The name of the contact person responsible for this submission.
255The email address of the contact person.
255The 3-digit area code of the contact's phone number.
The 7-digit phone number of the contact.
The effective date used to determine the form variant for all Forms in this batch.
Determines the form variant. Defaults to January 1 of the current year if not provided.
The lifecycle stage of the Forms in this batch: original, amendment, or cancellation.
Defaults to original if not provided.
amendment, cancellation, original The optional extension for the contact's phone number.
An optional note for this form batch.
65000Response
Created
The unique identifier of the object in Nmbr.
The type of the object in Nmbr ("form_batch").
Hide child attributes
Hide child attributes
The type of Forms in this batch (e.g. T4, RL-1).
rl1, roe, t4, t4a, td1, td1ab, td1bc, td1mb, td1nb, td1nl, td1ns, td1nt, td1nu, td1on, td1pe, td1sk, td1x, td1yt, tp_1015_3_v, tp_1015_r_13_v 255The lifecycle stage of the Forms in this batch: original, amendment, or cancellation.
amendment, cancellation, original The effective date used to determine the form variant for all Forms in this batch.
The submission status of this batch.
done, draft, processing, submitted The name of the contact person responsible for this submission.
255The email address of the contact person.
255The 3-digit area code of the contact's phone number.
255The 7-digit phone number of the contact.
255The optional extension for the contact's phone number.
255An optional note for this form batch.
Form-type-specific metadata for this batch. Structure varies by form type.
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
The date and time the object was created in Nmbr.
The date and time the object was last updated in Nmbr.

