Create new shift
curl --request POST \
--url https://api.nexspace365.com/api/shifts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"facilityId": 1,
"title": "Evening Fulfillment",
"date": "2026-05-20",
"startTime": "16:00",
"endTime": "23:59",
"department": "Fulfillment",
"specialty": "Forklift Operator",
"requiredWorkers": 3,
"urgency": "high",
"rate": 32,
"notes": "Peak-season surge coverage"
}
'import requests
url = "https://api.nexspace365.com/api/shifts"
payload = {
"facilityId": 1,
"title": "Evening Fulfillment",
"date": "2026-05-20",
"startTime": "16:00",
"endTime": "23:59",
"department": "Fulfillment",
"specialty": "Forklift Operator",
"requiredWorkers": 3,
"urgency": "high",
"rate": 32,
"notes": "Peak-season surge coverage"
}
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({
facilityId: 1,
title: 'Evening Fulfillment',
date: '2026-05-20',
startTime: '16:00',
endTime: '23:59',
department: 'Fulfillment',
specialty: 'Forklift Operator',
requiredWorkers: 3,
urgency: 'high',
rate: 32,
notes: 'Peak-season surge coverage'
})
};
fetch('https://api.nexspace365.com/api/shifts', 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://api.nexspace365.com/api/shifts",
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([
'facilityId' => 1,
'title' => 'Evening Fulfillment',
'date' => '2026-05-20',
'startTime' => '16:00',
'endTime' => '23:59',
'department' => 'Fulfillment',
'specialty' => 'Forklift Operator',
'requiredWorkers' => 3,
'urgency' => 'high',
'rate' => 32,
'notes' => 'Peak-season surge coverage'
]),
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://api.nexspace365.com/api/shifts"
payload := strings.NewReader("{\n \"facilityId\": 1,\n \"title\": \"Evening Fulfillment\",\n \"date\": \"2026-05-20\",\n \"startTime\": \"16:00\",\n \"endTime\": \"23:59\",\n \"department\": \"Fulfillment\",\n \"specialty\": \"Forklift Operator\",\n \"requiredWorkers\": 3,\n \"urgency\": \"high\",\n \"rate\": 32,\n \"notes\": \"Peak-season surge coverage\"\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://api.nexspace365.com/api/shifts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"facilityId\": 1,\n \"title\": \"Evening Fulfillment\",\n \"date\": \"2026-05-20\",\n \"startTime\": \"16:00\",\n \"endTime\": \"23:59\",\n \"department\": \"Fulfillment\",\n \"specialty\": \"Forklift Operator\",\n \"requiredWorkers\": 3,\n \"urgency\": \"high\",\n \"rate\": 32,\n \"notes\": \"Peak-season surge coverage\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nexspace365.com/api/shifts")
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 \"facilityId\": 1,\n \"title\": \"Evening Fulfillment\",\n \"date\": \"2026-05-20\",\n \"startTime\": \"16:00\",\n \"endTime\": \"23:59\",\n \"department\": \"Fulfillment\",\n \"specialty\": \"Forklift Operator\",\n \"requiredWorkers\": 3,\n \"urgency\": \"high\",\n \"rate\": 32,\n \"notes\": \"Peak-season surge coverage\"\n}"
response = http.request(request)
puts response.read_body{
"id": 1024,
"facilityId": 1,
"title": "Evening Fulfillment",
"date": "2026-05-20",
"startTime": "16:00",
"endTime": "23:59",
"department": "Fulfillment",
"specialty": "Forklift Operator",
"requiredWorkers": 3,
"assignedStaffIds": [
42,
58
],
"status": "open",
"urgency": "high",
"rate": 32,
"notes": "Peak-season surge coverage",
"createdAt": "2026-05-10T12:00:00Z",
"updatedAt": "2026-05-11T08:15:00Z"
}{
"error": {
"message": "<string>",
"code": "<string>",
"details": {},
"suggestion": "<string>",
"retryable": true
},
"requestId": "<string>"
}{
"error": {
"message": "Invalid or revoked API key",
"code": "UNAUTHENTICATED",
"suggestion": "Send a valid `Authorization: Bearer <token>` (nex_live_/nex_pat_ key, JWT, or OAuth access token).",
"retryable": false
}
}{
"error": {
"message": "Insufficient API key scope",
"code": "INSUFFICIENT_SCOPE",
"suggestion": "Mint or rotate a key that includes the required scope, or grant a wildcard like `resource:*`.",
"retryable": false
}
}{
"error": {
"message": "Rate limit exceeded for this API key",
"code": "API_KEY_RATE_LIMITED",
"suggestion": "Wait until X-RateLimit-Reset before retrying, or batch operations.",
"retryable": true
}
}Shifts
Create new shift
Create a new shift for scheduling. Required API-key scope: shifts:write
POST
/
api
/
shifts
Create new shift
curl --request POST \
--url https://api.nexspace365.com/api/shifts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"facilityId": 1,
"title": "Evening Fulfillment",
"date": "2026-05-20",
"startTime": "16:00",
"endTime": "23:59",
"department": "Fulfillment",
"specialty": "Forklift Operator",
"requiredWorkers": 3,
"urgency": "high",
"rate": 32,
"notes": "Peak-season surge coverage"
}
'import requests
url = "https://api.nexspace365.com/api/shifts"
payload = {
"facilityId": 1,
"title": "Evening Fulfillment",
"date": "2026-05-20",
"startTime": "16:00",
"endTime": "23:59",
"department": "Fulfillment",
"specialty": "Forklift Operator",
"requiredWorkers": 3,
"urgency": "high",
"rate": 32,
"notes": "Peak-season surge coverage"
}
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({
facilityId: 1,
title: 'Evening Fulfillment',
date: '2026-05-20',
startTime: '16:00',
endTime: '23:59',
department: 'Fulfillment',
specialty: 'Forklift Operator',
requiredWorkers: 3,
urgency: 'high',
rate: 32,
notes: 'Peak-season surge coverage'
})
};
fetch('https://api.nexspace365.com/api/shifts', 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://api.nexspace365.com/api/shifts",
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([
'facilityId' => 1,
'title' => 'Evening Fulfillment',
'date' => '2026-05-20',
'startTime' => '16:00',
'endTime' => '23:59',
'department' => 'Fulfillment',
'specialty' => 'Forklift Operator',
'requiredWorkers' => 3,
'urgency' => 'high',
'rate' => 32,
'notes' => 'Peak-season surge coverage'
]),
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://api.nexspace365.com/api/shifts"
payload := strings.NewReader("{\n \"facilityId\": 1,\n \"title\": \"Evening Fulfillment\",\n \"date\": \"2026-05-20\",\n \"startTime\": \"16:00\",\n \"endTime\": \"23:59\",\n \"department\": \"Fulfillment\",\n \"specialty\": \"Forklift Operator\",\n \"requiredWorkers\": 3,\n \"urgency\": \"high\",\n \"rate\": 32,\n \"notes\": \"Peak-season surge coverage\"\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://api.nexspace365.com/api/shifts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"facilityId\": 1,\n \"title\": \"Evening Fulfillment\",\n \"date\": \"2026-05-20\",\n \"startTime\": \"16:00\",\n \"endTime\": \"23:59\",\n \"department\": \"Fulfillment\",\n \"specialty\": \"Forklift Operator\",\n \"requiredWorkers\": 3,\n \"urgency\": \"high\",\n \"rate\": 32,\n \"notes\": \"Peak-season surge coverage\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nexspace365.com/api/shifts")
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 \"facilityId\": 1,\n \"title\": \"Evening Fulfillment\",\n \"date\": \"2026-05-20\",\n \"startTime\": \"16:00\",\n \"endTime\": \"23:59\",\n \"department\": \"Fulfillment\",\n \"specialty\": \"Forklift Operator\",\n \"requiredWorkers\": 3,\n \"urgency\": \"high\",\n \"rate\": 32,\n \"notes\": \"Peak-season surge coverage\"\n}"
response = http.request(request)
puts response.read_body{
"id": 1024,
"facilityId": 1,
"title": "Evening Fulfillment",
"date": "2026-05-20",
"startTime": "16:00",
"endTime": "23:59",
"department": "Fulfillment",
"specialty": "Forklift Operator",
"requiredWorkers": 3,
"assignedStaffIds": [
42,
58
],
"status": "open",
"urgency": "high",
"rate": 32,
"notes": "Peak-season surge coverage",
"createdAt": "2026-05-10T12:00:00Z",
"updatedAt": "2026-05-11T08:15:00Z"
}{
"error": {
"message": "<string>",
"code": "<string>",
"details": {},
"suggestion": "<string>",
"retryable": true
},
"requestId": "<string>"
}{
"error": {
"message": "Invalid or revoked API key",
"code": "UNAUTHENTICATED",
"suggestion": "Send a valid `Authorization: Bearer <token>` (nex_live_/nex_pat_ key, JWT, or OAuth access token).",
"retryable": false
}
}{
"error": {
"message": "Insufficient API key scope",
"code": "INSUFFICIENT_SCOPE",
"suggestion": "Mint or rotate a key that includes the required scope, or grant a wildcard like `resource:*`.",
"retryable": false
}
}{
"error": {
"message": "Rate limit exceeded for this API key",
"code": "API_KEY_RATE_LIMITED",
"suggestion": "Wait until X-RateLimit-Reset before retrying, or batch operations.",
"retryable": true
}
}Authorizations
bearerAuthapiKeyAuth
JWT token authentication
Body
application/json
Response
Shift created successfully
Unique shift identifier
Facility where the shift takes place
Shift title or description
Shift date
Shift start time
Shift end time
Department for the shift
Required specialty
Number of workers needed
IDs of assigned staff members
Current shift status
Available options:
open, assigned, in_progress, completed, cancelled Shift urgency level
Available options:
low, medium, high, critical Pay rate for the shift
Additional notes or requirements
⌘I

