Estimate employment dates
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"employee_id": "<id>",
"work_assignment_ids": [
"<id>"
]
}
]
'import requests
url = "https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates"
payload = [
{
"employee_id": "<id>",
"work_assignment_ids": ["<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([{employee_id: '<id>', work_assignment_ids: ['<id>']}])
};
fetch('https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates', 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/calculations/estimated_employment_dates",
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([
[
'employee_id' => '<id>',
'work_assignment_ids' => [
'<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/calculations/estimated_employment_dates"
payload := strings.NewReader("[\n {\n \"employee_id\": \"<id>\",\n \"work_assignment_ids\": [\n \"<id>\"\n ]\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/calculations/estimated_employment_dates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"employee_id\": \"<id>\",\n \"work_assignment_ids\": [\n \"<id>\"\n ]\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates")
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 {\n \"employee_id\": \"<id>\",\n \"work_assignment_ids\": [\n \"<id>\"\n ]\n }\n]"
response = http.request(request)
puts response.read_body{
"data": [
{
"employee_id": "<id>",
"work_assignment_ids": [
"<id>"
],
"estimated_first_day_worked": "2026-01-01",
"estimated_last_day_worked": "2026-01-31"
}
]
}Calculations
Estimate employment dates
Estimate the first and last day each employee worked. The estimate comes from payroll data, not from hire or termination dates. Pay periods on approved or paid payrolls set the range, ignoring $0 pay stubs, historical payrolls and corrections. A pay rate that starts inside the first pay period moves the first day later, and a pay rate that ends inside the last pay period moves the last day earlier.
POST
/
calculations
/
estimated_employment_dates
Estimate employment dates
curl --request POST \
--url https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"employee_id": "<id>",
"work_assignment_ids": [
"<id>"
]
}
]
'import requests
url = "https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates"
payload = [
{
"employee_id": "<id>",
"work_assignment_ids": ["<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([{employee_id: '<id>', work_assignment_ids: ['<id>']}])
};
fetch('https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates', 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/calculations/estimated_employment_dates",
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([
[
'employee_id' => '<id>',
'work_assignment_ids' => [
'<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/calculations/estimated_employment_dates"
payload := strings.NewReader("[\n {\n \"employee_id\": \"<id>\",\n \"work_assignment_ids\": [\n \"<id>\"\n ]\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/calculations/estimated_employment_dates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"employee_id\": \"<id>\",\n \"work_assignment_ids\": [\n \"<id>\"\n ]\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.nmbr.co/services/payroll/calculations/estimated_employment_dates")
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 {\n \"employee_id\": \"<id>\",\n \"work_assignment_ids\": [\n \"<id>\"\n ]\n }\n]"
response = http.request(request)
puts response.read_body{
"data": [
{
"employee_id": "<id>",
"work_assignment_ids": [
"<id>"
],
"estimated_first_day_worked": "2026-01-01",
"estimated_last_day_worked": "2026-01-31"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Response
200 - application/json
OK
Hide child attributes
Hide child attributes
The employee.
The work assignments the estimate was calculated from.
The estimated first day worked, or null when the employee has never been paid.
The estimated last day worked, or null when the employee has never been paid.

