curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/accounting_code_rules \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"business_entity_id": "<id>",
"tag_id": "<id>",
"type": "earning",
"subtype": "wage",
"expense_accounting_code_id": "<id>",
"liability_accounting_code_id": "<id>"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/accounting_code_rules"
payload = {
"business_entity_id": "<id>",
"tag_id": "<id>",
"type": "earning",
"subtype": "wage",
"expense_accounting_code_id": "<id>",
"liability_accounting_code_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({
business_entity_id: '<id>',
tag_id: '<id>',
type: 'earning',
subtype: 'wage',
expense_accounting_code_id: '<id>',
liability_accounting_code_id: '<id>'
})
};
fetch('https://sandbox.nmbr.co/services/payroll/accounting_code_rules', 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/accounting_code_rules",
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>',
'tag_id' => '<id>',
'type' => 'earning',
'subtype' => 'wage',
'expense_accounting_code_id' => '<id>',
'liability_accounting_code_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/accounting_code_rules"
payload := strings.NewReader("{\n \"business_entity_id\": \"<id>\",\n \"tag_id\": \"<id>\",\n \"type\": \"earning\",\n \"subtype\": \"wage\",\n \"expense_accounting_code_id\": \"<id>\",\n \"liability_accounting_code_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/accounting_code_rules")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"business_entity_id\": \"<id>\",\n \"tag_id\": \"<id>\",\n \"type\": \"earning\",\n \"subtype\": \"wage\",\n \"expense_accounting_code_id\": \"<id>\",\n \"liability_accounting_code_id\": \"<id>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/accounting_code_rules")
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 \"tag_id\": \"<id>\",\n \"type\": \"earning\",\n \"subtype\": \"wage\",\n \"expense_accounting_code_id\": \"<id>\",\n \"liability_accounting_code_id\": \"<id>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "accounting_code_rule",
"data": {
"business_entity": {
"id": "<id>",
"object": "business_entity",
"links": {
"self": "/business_entities/<id>"
}
},
"tag_group": {
"id": "<id>",
"object": "tag_group",
"links": {
"self": "/tag_groups/<id>"
}
},
"tag": {
"id": "<id>",
"object": "tag",
"links": {
"self": "/tags/<id>"
}
},
"type": "earning",
"subtype": "wage",
"business_preset": null,
"expense_accounting_code": {
"id": "<id>",
"object": "accounting_code",
"links": {
"self": "/accounting_codes/<id>"
}
},
"liability_accounting_code": {
"id": "<id>",
"object": "accounting_code",
"links": {
"self": "/accounting_codes/<id>"
}
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/accounting_code_rules/<id>"
}
}Create an accounting code rule
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/accounting_code_rules \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"business_entity_id": "<id>",
"tag_id": "<id>",
"type": "earning",
"subtype": "wage",
"expense_accounting_code_id": "<id>",
"liability_accounting_code_id": "<id>"
}
'import requests
url = "https://sandbox.nmbr.co/services/payroll/accounting_code_rules"
payload = {
"business_entity_id": "<id>",
"tag_id": "<id>",
"type": "earning",
"subtype": "wage",
"expense_accounting_code_id": "<id>",
"liability_accounting_code_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({
business_entity_id: '<id>',
tag_id: '<id>',
type: 'earning',
subtype: 'wage',
expense_accounting_code_id: '<id>',
liability_accounting_code_id: '<id>'
})
};
fetch('https://sandbox.nmbr.co/services/payroll/accounting_code_rules', 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/accounting_code_rules",
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>',
'tag_id' => '<id>',
'type' => 'earning',
'subtype' => 'wage',
'expense_accounting_code_id' => '<id>',
'liability_accounting_code_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/accounting_code_rules"
payload := strings.NewReader("{\n \"business_entity_id\": \"<id>\",\n \"tag_id\": \"<id>\",\n \"type\": \"earning\",\n \"subtype\": \"wage\",\n \"expense_accounting_code_id\": \"<id>\",\n \"liability_accounting_code_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/accounting_code_rules")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"business_entity_id\": \"<id>\",\n \"tag_id\": \"<id>\",\n \"type\": \"earning\",\n \"subtype\": \"wage\",\n \"expense_accounting_code_id\": \"<id>\",\n \"liability_accounting_code_id\": \"<id>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/accounting_code_rules")
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 \"tag_id\": \"<id>\",\n \"type\": \"earning\",\n \"subtype\": \"wage\",\n \"expense_accounting_code_id\": \"<id>\",\n \"liability_accounting_code_id\": \"<id>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<id>",
"object": "accounting_code_rule",
"data": {
"business_entity": {
"id": "<id>",
"object": "business_entity",
"links": {
"self": "/business_entities/<id>"
}
},
"tag_group": {
"id": "<id>",
"object": "tag_group",
"links": {
"self": "/tag_groups/<id>"
}
},
"tag": {
"id": "<id>",
"object": "tag",
"links": {
"self": "/tags/<id>"
}
},
"type": "earning",
"subtype": "wage",
"business_preset": null,
"expense_accounting_code": {
"id": "<id>",
"object": "accounting_code",
"links": {
"self": "/accounting_codes/<id>"
}
},
"liability_accounting_code": {
"id": "<id>",
"object": "accounting_code",
"links": {
"self": "/accounting_codes/<id>"
}
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
},
"links": {
"self": "/accounting_code_rules/<id>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
A tag group to scope this rule to. When set without tag_id, creates a tag-group-level rule that applies to all tags in the group.
A tag from the business entity's accounting code tag group. Optional — when omitted, the rule matches line items by type/subtype or business_preset_id alone.
The line item type to scope this rule to (e.g. earning, deduction). Mutually exclusive with business_preset_id.
allowance, deduction, earning, employee_benefit, employer_benefit, employer_statutory_withholding, reimbursement, statutory_withholding The line item subtype to further scope this rule (e.g. wage, salary). Requires type to be set.
A business preset to scope this rule to. Provides the highest specificity match. Mutually exclusive with type and subtype.
When both tag_id and tag_group_id are omitted, either type or business_preset_id must be set.
Response
Created
The unique identifier of the object in Nmbr.
The type of the object in Nmbr ("accounting_code_rule").
Hide child attributes
Hide child attributes
The line item type this rule applies to (e.g. earning, deduction). When combined with subtype, narrows the rule to a specific line item category. Mutually exclusive with business_preset.
255The line item subtype this rule applies to (e.g. wage, salary). Must be accompanied by a type.
255A business preset this rule applies to. Provides the highest specificity match. Mutually exclusive with type and subtype.
The liability accounting code assigned when this rule matches.
The date and time the object was created in Nmbr.
The date and time the object was last updated in Nmbr.

