Skip to main content

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

ParameterTypeRequiredDescription
expectedDatestringNoExpected date for the movement (YYYY-MM-DD)
handledBystringYesWho handles the movement (TECSPAL, COMPANY)
factoryResetbooleanNoWhether hardware needs factory reset (ignored for OFF_ON)
companyCodestringOne ofCompany code for an existing managed company
companyobjectOne ofCompany details for inline create/update (see Company Properties)
employeeEmailstringOne ofEmail of an existing source employee
employeeobjectOne ofSource employee details for inline create/update (see Employee Properties)
toEmployeeEmailstringNoDestination employee email for OFF_ON transfers
hardwaresobjectYesHardware details (see Hardware Properties)

Company Properties

PropertyTypeRequiredDescription
namestringYesName of the company
companyCodestringYesUnique 3-character company code
countryCodestringNoCountry code in ISO 3166-1 alpha-2 format
abmCodestringNoABM integration code

Employee Properties

PropertyTypeRequiredDescription
firstNamestringYesFirst name of the employee
lastNamestringYesLast name of the employee
emailstringYesEmail address of the employee
phonestringNoPhone number with country code
governmentDNIstringYesGovernment-issued identification number
cpfstringNoBrazilian tax ID (required in practice for BR employees when the movement is created)
addressstringYesPrimary address
citystringYesCity of residence
addressExtraInfostringNoAdditional address information
postCodestringYesPostal code
countryCodestringYesCountry code in ISO 3166-1 alpha-2 format

Hardware Properties

PropertyTypeRequiredDescription
hardwareIdsarrayNoIDs of existing hardware on the source employee
newHardwaresarrayNoNew hardware to create and include (standard offboarding only)

New Hardware Properties

PropertyTypeRequiredDescription
serialNumberstringYesSerial number of the hardware
descriptionstringNoDescription of the hardware
dateBoughtstringYesPurchase date as ISO-8601 DateTime (e.g. 2024-01-15T00:00:00.000Z; date-only is rejected)
hardwareTypestringOne ofType of hardware (e.g. MONITOR, HEADPHONES)
commonModelIdstringOne ofCatalog model UUID (use instead of hardwareType when applicable)
newHardwarebooleanNoWhether the hardware is new
externalReferencestringNoExternal 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

PropertyTypeDescription
statusCodenumberHTTP status code of the response
messagestringDescription of the response status
enveloparrayArray containing the list of movement requests

Movement Request Properties

PropertyTypeDescription
idstringUnique identifier of the movement request
movementRequestNumbernumberRequest number
createdAtstringISO timestamp when the request was created
updatedAtstringISO timestamp when the request was last updated
typestringType of request (OFFBOARDING, OFF_ON)
statusstringStatus of the request (e.g., PROCESSING, DONE)
etastring | nullEstimated time of arrival (nullable)
sendTostringDestination type (STORAGE for offboarding, EMPLOYEE for OFF_ON)
handledBystringThe team or person handling the request
expectedDatestringExpected date for completion
factoryResetbooleanWhether a factory reset is required
trackingLinkstring | nullLink for tracking (nullable)
trackingCodestring | nullCode for tracking (nullable)
dateCompletedstring | nullDate when the request was completed (nullable)
apiClientRequesterNamestringName of the API client requester
requesterEmailstring | nullEmail of the user who created the request
toEmployeeIdstring | nullID of the employee who should receive the hardware
fromEmployeeIdstring | nullID of the employee returning the hardware
movementRequestStatusHistoricarrayStatus change history of the request
toEmployeeobject | nullDetails of the employee the request is for (nullable)
fromEmployeeobject | nullEmployee initiating the request
storageobjectStorage details (null for OFF_ON)
companyNamestringName of the company
hardwaresarrayList of hardware items related to the request

fromEmployee Properties

PropertyTypeDescription
idstringUnique identifier of the employee
firstNamestringFirst name of the employee
lastNamestringLast name of the employee
countryCodestringCountry code of the employee
emailstringEmail of the employee
addressstringFull address of the employee
addressExtraInfostringExtra address information (nullable)
postCodestringPostal code of the employee's address

storage Properties

PropertyTypeDescription
idstringUnique identifier of the storage
countryCodestringCountry code of the storage

hardwares Properties

PropertyTypeDescription
idstringUnique ID of the hardware
descriptionstringDescription or notes
serialNumberstringSerial number of the hardware
brandstringHardware brand (if applicable)
namestringName of the hardware (from model or hardwareType)
ramstringRAM configuration (if applicable)
diskSpacestringDisk size (if applicable)
displaySizestringDisplay size (if applicable)
processorstringProcessor (if applicable)
imagestringURL 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 omit newHardwares. Omitting the hardwareIds field does not trigger auto-include.
  • For OFF_ON, toEmployeeEmail must reference an existing employee; hardware is transferred to that employee instead of storage.
  • newHardwares applies to standard offboarding (employee → storage) only.
  • The movement request is created with PROCESSING status when handledBy is TECSPAL, or DONE immediately when handledBy is COMPANY.
  • When handledBy is TECSPAL, Tecspal's logistics team will manage the return or transfer.
  • When handledBy is COMPANY, the company is responsible for the hardware movement.
  • The factoryReset flag applies to offboarding to storage; it is ignored for OFF_ON transfers.