Create Offboarding Movement
Creates a new offboarding movement request to return hardware from an employee to storage, or an OFF_ON transfer between employees when toEmployeeEmail is provided.
Prerequisites
For standard offboarding (employee → storage), query get employee by ID or get all employees to obtain hardwareIds, or provide company / employee objects in the request body.
For OFF_ON (employee → employee), source and destination employees must already exist, and hardware must already be assigned to the source employee. Use employeeEmail, toEmployeeEmail, and hardwares.hardwareIds. Source and destination employees must have compatible countryCode values (same country, or both in the EU).
When toEmployeeEmail is provided, the request creates an OFF_ON movement instead of returning hardware to storage.
Authentication
This endpoint requires authentication. See Authentication for details.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| expectedDate | string | No | Expected date for the movement (YYYY-MM-DD) |
| handledBy | string | Yes | Who handles the movement (TECSPAL, COMPANY) |
| factoryReset | boolean | No | Whether hardware needs factory reset (ignored for OFF_ON) |
| companyCode | string | One of | Company code for an existing managed company |
| company | object | One of | Company details for inline create/update (see Company Properties) |
| employeeEmail | string | One of | Email of an existing source employee |
| employee | object | One of | Source employee details for inline create/update (see Employee Properties) |
| toEmployeeEmail | string | No | Destination employee email for OFF_ON transfers |
| hardwares | object | Yes | Hardware details (see Hardware Properties) |
Company Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Name of the company |
| companyCode | string | Yes | Unique 3-character company code |
| countryCode | string | No | Country code in ISO 3166-1 alpha-2 format |
| abmCode | string | No | ABM integration code |
Employee Properties
| Property | Type | Required | Description |
|---|---|---|---|
| firstName | string | Yes | First name of the employee |
| lastName | string | Yes | Last name of the employee |
| string | Yes | Email address of the employee | |
| phone | string | No | Phone number with country code |
| governmentDNI | string | Yes | Government-issued identification number |
| cpf | string | No | Brazilian tax ID (required in practice for BR employees when the movement is created) |
| address | string | Yes | Primary address |
| city | string | Yes | City of residence |
| addressExtraInfo | string | No | Additional address information |
| postCode | string | Yes | Postal code |
| countryCode | string | Yes | Country code in ISO 3166-1 alpha-2 format |
Hardware Properties
| Property | Type | Required | Description |
|---|---|---|---|
| hardwareIds | array | No | IDs of existing hardware on the source employee |
| newHardwares | array | No | New hardware to create and include (standard offboarding only) |
New Hardware Properties
| Property | Type | Required | Description |
|---|---|---|---|
| serialNumber | string | Yes | Serial number of the hardware |
| description | string | No | Description of the hardware |
| dateBought | string | Yes | Purchase date as ISO-8601 DateTime (e.g. 2024-01-15T00:00:00.000Z; date-only is rejected) |
| hardwareType | string | One of | Type of hardware (e.g. MONITOR, HEADPHONES) |
| commonModelId | string | One of | Catalog model UUID (use instead of hardwareType when applicable) |
| newHardware | boolean | No | Whether the hardware is new |
| externalReference | string | No | External reference code |
Do not send countryCode, companyCode, or employeeProfileId in newHardwares; the backend sets them from the movement context.
Request
Production URL: https://orchestrator.tecspal.com/
Sandbox URL: https://orchestrator-dev.tecspal.com/
Endpoint: POST /movement_requests/offboarding
Example Request (existing company and employee)
{
"data": {
"handledBy": "TECSPAL",
"expectedDate": "2024-12-21",
"factoryReset": false,
"companyCode": "DM1",
"employeeEmail": "john_doe@email.com",
"hardwares": {
"hardwareIds": ["335dea85-b83a-489a-9b80-414f625cd17b"],
"newHardwares": []
}
},
"request": "movement_requests/offboarding",
"vendor": "tecspal",
"verb": "POST"
}
Example Request (with company, employee, and hardware objects)
{
"data": {
"handledBy": "TECSPAL",
"expectedDate": "2024-12-21",
"factoryReset": false,
"hardwares": {
"hardwareIds": ["335dea85-b83a-489a-9b80-414f625cd17b"],
"newHardwares": [
{
"serialNumber": "SN-987654",
"description": "Office monitor",
"dateBought": "2024-01-15T00:00:00.000Z",
"hardwareType": "MONITOR",
"newHardware": true
}
]
},
"company": {
"name": "Larian Studios",
"companyCode": "DM1",
"countryCode": "UY"
},
"employee": {
"firstName": "John",
"lastName": "Doe",
"email": "john_doe@email.com",
"phone": "+598 99999999",
"governmentDNI": "DNI123",
"address": "Plaza Independencia 848",
"city": "Montevideo",
"addressExtraInfo": "",
"postCode": "11100",
"countryCode": "UY"
}
},
"request": "movement_requests/offboarding",
"vendor": "tecspal",
"verb": "POST"
}
Example Request (OFF_ON)
{
"data": {
"handledBy": "TECSPAL",
"expectedDate": "2024-12-21",
"factoryReset": false,
"companyCode": "DM1",
"employeeEmail": "jane_bloggs@email.com",
"toEmployeeEmail": "maria_lopez@example.com",
"hardwares": {
"hardwareIds": ["433d760e-cd6b-4d28-97c0-7e69c6751e22"],
"newHardwares": []
}
},
"request": "movement_requests/offboarding",
"vendor": "tecspal",
"verb": "POST"
}
Response Schema
| Property | Type | Description |
|---|---|---|
| statusCode | number | HTTP status code of the response |
| message | string | Description of the response status |
| envelop | array | Array containing the list of movement requests |
Movement Request Properties
| Property | Type | Description |
|---|---|---|
| id | string | Unique identifier of the movement request |
| movementRequestNumber | number | Request number |
| createdAt | string | ISO timestamp when the request was created |
| updatedAt | string | ISO timestamp when the request was last updated |
| type | string | Type of request (OFFBOARDING, OFF_ON) |
| status | string | Status of the request (e.g., PROCESSING, DONE) |
| eta | string | null | Estimated time of arrival (nullable) |
| sendTo | string | Destination type (STORAGE for offboarding, EMPLOYEE for OFF_ON) |
| handledBy | string | The team or person handling the request |
| expectedDate | string | Expected date for completion |
| factoryReset | boolean | Whether a factory reset is required |
| trackingLink | string | null | Link for tracking (nullable) |
| trackingCode | string | null | Code for tracking (nullable) |
| dateCompleted | string | null | Date when the request was completed (nullable) |
| apiClientRequesterName | string | Name of the API client requester |
| requesterEmail | string | null | Email of the user who created the request |
| toEmployeeId | string | null | ID of the employee who should receive the hardware |
| fromEmployeeId | string | null | ID of the employee returning the hardware |
| movementRequestStatusHistoric | array | Status change history of the request |
| toEmployee | object | null | Details of the employee the request is for (nullable) |
| fromEmployee | object | null | Employee initiating the request |
| storage | object | Storage details (null for OFF_ON) |
| companyName | string | Name of the company |
| hardwares | array | List of hardware items related to the request |
fromEmployee Properties
| Property | Type | Description |
|---|---|---|
| id | string | Unique identifier of the employee |
| firstName | string | First name of the employee |
| lastName | string | Last name of the employee |
| countryCode | string | Country code of the employee |
| string | Email of the employee | |
| address | string | Full address of the employee |
| addressExtraInfo | string | Extra address information (nullable) |
| postCode | string | Postal code of the employee's address |
storage Properties
| Property | Type | Description |
|---|---|---|
| id | string | Unique identifier of the storage |
| countryCode | string | Country code of the storage |
hardwares Properties
| Property | Type | Description |
|---|---|---|
| id | string | Unique ID of the hardware |
| description | string | Description or notes |
| serialNumber | string | Serial number of the hardware |
| brand | string | Hardware brand (if applicable) |
| name | string | Name of the hardware (from model or hardwareType) |
| ram | string | RAM configuration (if applicable) |
| diskSpace | string | Disk size (if applicable) |
| displaySize | string | Display size (if applicable) |
| processor | string | Processor (if applicable) |
| image | string | URL to the image |
Example Response
{
"envelop": [
{
"id": "b861eb3d-6d04-41cb-b5b2-efde278e36b8",
"movementRequestNumber": 50001006,
"createdAt": "2025-04-14T14:50:08.363Z",
"updatedAt": "2025-04-14T14:50:08.363Z",
"type": "OFFBOARDING",
"status": "PROCESSING",
"eta": null,
"sendTo": "STORAGE",
"handledBy": "TECSPAL",
"expectedDate": "2025-12-21",
"factoryReset": false,
"trackingLink": null,
"trackingCode": null,
"dateCompleted": null,
"apiClientRequesterName": "EXAMPLE API CLIENT",
"toEmployee": null,
"fromEmployee": {
"id": "0a86b6c2-7373-42fa-a44a-70857cef0f90",
"firstName": "John",
"lastName": "Doe",
"countryCode": "UY",
"email": "john_doe@email.com",
"address": "Plaza Independencia 848, Montevidéu, Uruguai",
"addressExtraInfo": "Praça Independência",
"postCode": "11100"
},
"storage": {
"id": "f5d253a3-e494-4614-9c8e-001789def712",
"countryCode": "UY"
},
"companyName": "Larian Studios",
"hardwares": [
{
"id": "335dea85-b83a-489a-9b80-414f625cd17b",
"description": "Something",
"serialNumber": "123",
"brand": "Samsung",
"name": "MONITOR",
"image": "https://a-us.storyblok.com/f/1001855/405x366/dd53bc39ef/generic-monitor.png"
}
]
}
],
"message": "Request successful",
"statusCode": 201
}
Error Responses
Bad Request (400)
{
"details": [
{
"field": "employeeEmail",
"message": "Employee email is required"
}
],
"error": "Bad Request",
"message": "Invalid request data",
"statusCode": 400
}
Not Found (404)
{
"error": "Not Found",
"message": "Employee not found",
"statusCode": 404
}
Notes
- To include all hardware assigned to the source employee automatically, send
"hardwareIds": []and omitnewHardwares. Omitting thehardwareIdsfield does not trigger auto-include. - For OFF_ON,
toEmployeeEmailmust reference an existing employee; hardware is transferred to that employee instead of storage. newHardwaresapplies to standard offboarding (employee → storage) only.- The movement request is created with
PROCESSINGstatus whenhandledByisTECSPAL, orDONEimmediately whenhandledByisCOMPANY. - When
handledByisTECSPAL, Tecspal's logistics team will manage the return or transfer. - When
handledByisCOMPANY, the company is responsible for the hardware movement. - The
factoryResetflag applies to offboarding to storage; it is ignored for OFF_ON transfers.