Create Onboarding Movement
Creates a new onboarding movement request to assign hardware from storage to an employee.
For employee-to-employee transfers (OFF_ON), use Create Offboarding Movement with toEmployeeEmail.
Prerequisites
Query the hardware in storage endpoint to obtain hardwareIds and confirm items are in storage.
Authentication
This endpoint requires authentication. See Authentication for details.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| companyCode | string | Yes | Company code for an existing managed company (inline company object is not supported) |
| hardwareIds | array | Yes | Array of hardware IDs to assign (at least one) |
| expectedDate | string | No | Expected date for the movement (YYYY-MM-DD) |
| employeeEmail | string | One of | Email of an existing destination employee |
| employee | object | One of | Employee details for inline create/update (see Employee Properties) |
handledBy is always TECSPAL for onboarding requests (not accepted in the request body).
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 |
| postCode | string | Yes | Postal code |
| countryCode | string | Yes | Destination country in ISO 3166-1 alpha-2 format |
| addressExtraInfo | string | No | Additional address information |
Request
Production URL: https://orchestrator.tecspal.com/
Sandbox URL: https://orchestrator-dev.tecspal.com/
Endpoint: POST /movement_requests/onboarding
Example Request
{
"data": {
"companyCode": "DM1",
"hardwareIds": ["2069ab49-bce8-4e9d-a7a6-fb4805b33ba4"],
"expectedDate": "2024-04-10",
// "employeeEmail": "john_doe@email.com", // For existing employee
"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/onboarding",
"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 (ONBOARDING) |
| status | string | Status of the request (e.g., PROCESSING) |
| eta | string | null | Estimated time of arrival (nullable) |
| sendTo | string | Destination type (EMPLOYEE) |
| 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 | Always null for onboarding |
| movementRequestStatusHistoric | array | Status change history of the request |
| toEmployee | object | null | Details of the employee the request is for (nullable) |
| fromEmployee | object | null | Always null for onboarding |
| storage | object | Storage details |
| companyName | string | Name of the company |
| hardwares | array | List of hardware items related to the request |
toEmployee 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": "f133e0cc-45b7-4059-9305-8caa671c8e96",
"movementRequestNumber": 50001002,
"createdAt": "2025-04-14T15:57:21.361Z",
"updatedAt": "2025-04-14T15:57:21.361Z",
"type": "ONBOARDING",
"status": "PROCESSING",
"eta": null,
"sendTo": "EMPLOYEE",
"handledBy": "TECSPAL",
"expectedDate": "2025-12-10",
"factoryReset": false,
"trackingLink": null,
"trackingCode": null,
"dateCompleted": null,
"apiClientRequesterName": "EXAMPLE API CLIENT",
"toEmployee": {
"id": "36338fd7-dc0a-497d-a957-e80b4c9a25eb",
"firstName": "john",
"lastName": "Doe",
"countryCode": "UY",
"email": "john_doe99@email.com",
"address": "Plaza Independencia 848, Montevidéu, Uruguai",
"addressExtraInfo": "",
"postCode": "11100"
},
"fromEmployee": null,
"storage": {
"id": "f5d253a3-e494-4614-9c8e-001789def712",
"countryCode": "UY"
},
"companyName": "Larian Studios",
"hardwares": [
{
"id": "2069ab49-bce8-4e9d-a7a6-fb4805b33ba4",
"description": "New",
"serialNumber": "SN123456",
"brand": "Apple",
"name": "MacBook Pro",
"ram": "16GB",
"diskSpace": "512GB",
"displaySize": "16 inch",
"processor": "M1 Pro",
"image": "https://a-us.storyblok.com/f/1001855/789x500/82ee51ba4d/macbook-pro-16.png"
}
]
}
],
"message": "Request successful",
"statusCode": 201
}
Error Responses
Bad Request (400)
{
"details": [
{
"field": "hardwareIds",
"message": "hardwares should not be empty"
}
],
"error": "Bad Request",
"message": "Invalid request data",
"statusCode": 400
}
Notes
- Provide either
employeeEmail(existing employee) or anemployeeobject (create or update inline) - Sending an
employeeobject when the email already exists updates the employee; it does not return a conflict error - The destination employee country must match the hardware country, or both must be within the EU
- Hardware in European storage has
countryCodeEUand can be onboarded to any EU member country - All hardware items must be in storage and not already in movement
- The movement request is created with
PROCESSINGstatus (handledByis alwaysTECSPAL)