Added personalEmail property to the parameters in order to allow differentiating between work email (email property) and personal email (personalEmail new property)
Added support for filtering the seniorities list by EOR contracts
is_eor_contract (boolean, optional)
New public API query parameter to include only levels valid for EOR contracts
🚀 New Endpoint: Create Child Organization
This process creates a new organization that includes the following elements:
An API token specific to the new organization, which can be used to perform API operations on its behalf.
A default group associated with the organization.
A hierarchical structure that connects the authenticated organization (the Parent Organization) to the new organization (the Child Organization). This hierarchy allows the Child Organization to inherit white-label settings from its Parent Organization.
A user from the Parent Organization who will be assigned to the Child Organization.
This endpoint establishes the minimum requirements necessary for the new organization to be fully operational immediately after its creation. Prerequisites: Requires an organization token with the organizations: write scope. The organization associated with the token must have the partner portal feature enabled, and it must be a parent organization (i.e., it should not be a child of another organization in the hierarchy). Endpoint: POST /rest/v2/organizations/children Token scopes: organizations:write API Reference: Create Child Organization Request Example:
Added rejection_reason and rejection_note to process object
Renamed case_created_at to created_at
Renamed last_updated_at to updated_at
{
"data": {
...
"process": {
...
"rejection_reason": "Poor image quality", // available when process has been rejected
"rejection_note": "This is the reason why the case was rejected.", // available when process has been rejected
"created_at": "2025-07-21T18:04:55.771Z",
"updated_at": "2025-07-21T18:04:55.771Z"
}
}
}
🚀 Enhancements and Endpoint renamed: Retrieve a required document for a case
Renamed previous_document_request to previous_rejected_document
Renamed expiry_date to expiration_date
Added created_at and updated_at
{
"data": {
"id": "f1a44946-6418-4295-b231-f4ae240e7663",
"immigration_document_requirement_id": "ed1f24a0-3d59-4668-9c93-417b677e3e84", // static id
"name": "Proof of employment",
"description": "A government-issued document that proves your right to work in India. \n",
"document": {
"status": "PENDING",
},
"previous_rejected_document": {
"id": "4ec1006d-df21-469a-b6fc-55eba5840940",
"status": "REJECTED",
"rejection_reason": "Incomplete information",
"rejection_note": "The submitted document is missing some necessary details."
},
"created_at": "2025-07-21T18:04:55.771Z",
"updated_at": "2025-07-21T18:04:55.771Z"
}
}
🚀 Enhancements and Endpoint renamed: Upload a required immigration document
Added scope_of_work which represents the content sent on scope field in request body.
These changes align the update endpoint with the EOR contract creation endpoint, which has supported this flexible scope of work format. It ensures consistency across contract flows and provides a unified experience for clients integrating with both endpoints.
Employee Agreement and Onboarding Tracking endpoints update
Improves Employee Agreement and Onboarding Tracking endpoints to allow for version validation during signature collection to avoid inconsistencies that could be caused by race condition.
Updated: POST /v2/eor/workers/contracts/:contract_id/signatures
Add an optional version property to the payload in order to allow the client to specify the version of the Employment Agreement to be signed. In case of a mismatch, the API will return a 409 Conflict error. If the version either matches the internal version or is not provided, the endpoint will behave as before.
Add a 409 Conflict error response to the response schema.
Updated: GET /v2/eor/workers/contracts/:contract_id/employee-agreement/download
Add an optional version query param to the endpoint in order to allow the client to specify the version of the Employment Agreement to be downloaded. We don't keep multiple Employment Agreements saved, so this version is for checking if the client has the correct version of the EA. In case of a mismatch, the API will return a 409 Conflict error. If the version either matches the internal version or is not provided, the endpoint will behave as before.
Add a 409 Conflict error response to the response schema.
Updated: GET /v2/onboarding/tracker/hris_profile/:hris_profile_id
Add a employee_agreement object to the response schema, with the following properties:
version_hash: Version of the Employment Agreement. Can be null if the EA has not yet been generated.
status: Status of the Employment Agreement. Can be null if the EA has not yet been generated.
The version_hash can be used to check if the client has the correct version of the EA when downloading or signing it as mentioned in the previous endpoints.
Updated: Cost centers are now retrieved by legal_entity_id parameter, and the request and response format has been adjusted to cost_center_number and cost_center_name instead of number and name.
Generate secure, time-limited magic links that enable password-free, seamless worker authentication for quick and safe access. Ideal for temporary sessions or low-friction login flows.
Prerequisites: Requires a worker session token created via the existing POST /rest/v2/workers/session endpoint using an organization token with admin:worker scope.
Provides a list of Actionable Journeys for Workers
Returns a paginated list of actionable journeys assigned to the authenticated worker. Actionable journeys are learning paths or training programs that require active participation from the worker, such as completing courses, assessments, or other learning activities. The response includes journey details, completion status, and pagination metadata to support efficient data retrieval.
These journeys are personalised for the specific worker based on their role, department, and organisational requirements
Returns a list of all documents that are available for the given EOR contract, expecting client signature. The response will contain the document types and additional signature details when available.
These documents are intended for the client to review and sign, but not the employee, and are available only for certain countries, such as Framework Agreement for Belgium.
Signs a document with the provided signature and title. Can be used after the client has reviewed the document and is ready to sign. A document can only be signed once - otherwise the signature will be rejected and the endpoint will return an error.
After signature, the responses for both this endpoint and for fetching all documents will contain the signature details.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Passport Requirement",
"description": "Passport document required for verification",
"status": "COMPLETED", // 'PENDING', 'IN_REVIEW', 'REJECTED', 'COMPLETED', 'FAILED', 'PROCESSING'
"document": { // can be null if no document has been uploaded
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Proof of employment document",
"status": "EXPIRING", // "EXPIRED" or "EXPIRING" or "ACTIVE" or "IN_REVIEW"
"expiry_date": "2025-09-31"
},
"previous_document_request": { // only available if the current document request does not have a document and the current uploaded document was rejected
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "REJECTED", // 'REJECTED' only
"rejection_reason": "File / photo poor quality",
"rejection_note": "Please provide a clear scan"
}
}
POST /v2/immigration/workers/documents
Change: Request body requirements have been updated. Before: