Cases
Overview
Cases endpoints provide read access to cases, tasks, managers, and expenses.
Endpoint Summary
| Method | Route | Purpose |
|---|---|---|
GET | /v1/cases | List cases |
GET | /v1/cases/{caseId} | Get case by ID |
GET | /v1/cases/tasks | List case tasks |
GET | /v1/cases/tasks/{taskId} | Get case task by ID |
GET | /v1/cases/tasks/{taskId}/managers | List task managers |
GET | /v1/cases/{caseId}/managers | List case managers |
GET | /v1/cases/{caseId}/expenses | List case expenses |
GET | /v1/cases/{caseId}/expenses/{expenseId} | Get case expense by ID |
GET /v1/cases
Return paginated cases.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number. |
per_page | number | No | Items per page. |
search_text | string | No | Search value. |
order | string | No | Sort field. |
order_direction | string | No | asc or desc. |
status | array | No | Case status filter. |
client_id | number | No | Filter by client. |
provider_id | number | No | Filter by provider. |
expat_id | number | No | Filter by expat. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases?page=1&per_page=20" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"currentPage": 1,
"perPage": 20,
"lastPage": 1,
"total": 1,
"items": [
{
"id": 590,
"type": "relocation",
"provider_id": 23,
"provider_name": "Provider Group",
"client_id": 77,
"client_name": "Example Client Ltd",
"expat_id": 101,
"expat_name": "Jane Doe",
"case_manager_id": 501,
"case_manager_name": "John Manager",
"case_manager_profile_image": "",
"start_date": "2026-05-02T00:00:00.000000Z",
"end_date": "2026-09-01T00:00:00.000000Z",
"forecast_end_date": "2026-08-25T00:00:00.000000Z",
"order_id": 3001,
"order_number": "ORD-3001",
"order_legal_entity_id": 9901,
"order_legal_entity_name": "XPath Germany GmbH",
"status": "in_progress",
"status_label": "In progress",
"archived_at": null,
"archived": false,
"deadline": null,
"completion_rate": 42,
"assignment": {
"id": 378,
"author_id": 501,
"client_id": 77,
"expat_id": 101,
"expat_name": "Jane Doe",
"requested_by_name": "John Manager",
"home_country": "DE",
"home_city": "Berlin",
"home_manager_id": 0,
"home_manager_name": null,
"home_manager_email": null,
"home_segment_id": null,
"home_segment_name": null,
"home_department_id": null,
"home_department_name": null,
"home_company_id": null,
"home_company_name": null,
"home_office_id": 0,
"home_office_name": null,
"home_cost_center": null,
"home_business_unit": null,
"home_address": null,
"host_country": "ES",
"host_city": "Madrid",
"host_manager_id": 0,
"host_manager_name": null,
"host_manager_email": null,
"host_segment_id": null,
"host_segment_name": null,
"host_department_id": null,
"host_department_name": null,
"host_company_id": null,
"host_company_name": null,
"host_cost_center": null,
"host_office_id": 0,
"host_office_name": null,
"host_business_unit": null,
"host_address": null,
"payroll": null,
"number_adults": 0,
"number_children": 0,
"type": "relocation",
"type_label": "Relocation",
"status": "preparing",
"status_id": "preparing",
"review_approved_count": 0,
"review_rejected_count": 0,
"review_total_count": 0,
"start_date": "2026-05-02",
"end_date": "2026-09-01",
"notes": null,
"cancelled_by": null,
"is_confidential": false,
"sponsor": null,
"created_at": "2026-04-28T08:12:00+00:00",
"archived_at": null,
"archived": false
},
"assignment_id": 378,
"assignment_flow_id": 21,
"services": [
{
"id": 434,
"service_name": "Immigration",
"service_id": 4702,
"expat_case_id": 590,
"processed_at": "2026-05-02",
"tags": [],
"percent_invoiced": "0.00",
"status": "in_progress",
"forecast_start_date": "2026-05-02",
"forecast_end_date": "2026-08-25"
}
],
"tags": [],
"subject": {
"id": 90,
"name": "Jane Doe",
"reference_type": "expat",
"reference_id": 101
},
"label": "Case #590 for Jane Doe",
"name": "Relocation Case",
"percent_invoiced": "0.00",
"hr_manager": {
"id": 588,
"name": "Jane HR"
},
"processed_at": "2026-05-20T10:00:00.000000Z",
"created_at": "2026-04-28T10:34:11.000000Z"
}
],
"filters": [],
"resource_columns": []
}
}
GET /v1/cases/{caseId}
Return case details by ID.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
caseId | number | Yes | Case identifier. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/{{CASE_ID}}" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"case": {
"id": 590,
"type": "relocation",
"provider_id": 23,
"provider_name": "Provider Group",
"client_id": 77,
"client_name": "Example Client Ltd",
"expat_id": 101,
"expat_name": "Jane Doe",
"case_manager_id": 501,
"case_manager_name": "John Manager",
"case_manager_profile_image": "",
"start_date": "2026-05-02T00:00:00.000000Z",
"end_date": "2026-09-01T00:00:00.000000Z",
"forecast_end_date": "2026-08-25T00:00:00.000000Z",
"order_id": 3001,
"order_number": "ORD-3001",
"order_legal_entity_id": 9901,
"order_legal_entity_name": "XPath Germany GmbH",
"status": "in_progress",
"status_label": "In progress",
"archived_at": null,
"archived": false,
"deadline": null,
"completion_rate": 42,
"assignment": {
"id": 378,
"author_id": 501,
"client_id": 77,
"expat_id": 101,
"expat_name": "Jane Doe",
"requested_by_name": "John Manager",
"home_country": "DE",
"home_city": "Berlin",
"home_manager_id": 0,
"home_manager_name": null,
"home_manager_email": null,
"home_segment_id": null,
"home_segment_name": null,
"home_department_id": null,
"home_department_name": null,
"home_company_id": null,
"home_company_name": null,
"home_office_id": 0,
"home_office_name": null,
"home_cost_center": null,
"home_business_unit": null,
"home_address": null,
"host_country": "ES",
"host_city": "Madrid",
"host_manager_id": 0,
"host_manager_name": null,
"host_manager_email": null,
"host_segment_id": null,
"host_segment_name": null,
"host_department_id": null,
"host_department_name": null,
"host_company_id": null,
"host_company_name": null,
"host_cost_center": null,
"host_office_id": 0,
"host_office_name": null,
"host_business_unit": null,
"host_address": null,
"payroll": null,
"number_adults": 0,
"number_children": 0,
"type": "relocation",
"type_label": "Relocation",
"status": "preparing",
"status_id": "preparing",
"review_approved_count": 0,
"review_rejected_count": 0,
"review_total_count": 0,
"start_date": "2026-05-02",
"end_date": "2026-09-01",
"notes": null,
"cancelled_by": null,
"is_confidential": false,
"sponsor": null,
"created_at": "2026-04-28T08:12:00+00:00",
"archived_at": null,
"archived": false
},
"assignment_id": 378,
"assignment_flow_id": 21,
"services": [
{
"id": 434,
"service_name": "Immigration",
"service_id": 4702,
"expat_case_id": 590,
"processed_at": "2026-05-02",
"tags": [],
"percent_invoiced": "0.00",
"status": "in_progress",
"forecast_start_date": "2026-05-02",
"forecast_end_date": "2026-08-25",
"total_tasks": 12,
"total_subtasks": 3,
"completed_tasks": 5,
"completed_subtasks": 1,
"completion_rate": 42
}
],
"tags": [],
"subject": {
"id": 90,
"name": "Jane Doe",
"reference_type": "expat",
"reference_id": 101
},
"label": "Case #590 for Jane Doe",
"name": "Relocation Case",
"percent_invoiced": "0.00",
"hr_manager": {
"id": 588,
"name": "Jane HR"
},
"processed_at": "2026-05-20T10:00:00.000000Z",
"created_at": "2026-04-28T10:34:11.000000Z",
"permissions": [
"create case",
"view case",
"update case",
"update service start date"
],
"allowed_actions": {
"create_follower": true,
"can_add_task": true,
"update": true
},
"order": {
"id": 3001,
"entity_id": 77,
"entity_type": "client"
}
}
}
}
GET /v1/cases/tasks
Return paginated case tasks.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number. |
per_page | number | No | Items per page. |
search_text | string | No | Search value. |
status | array | No | Task status filter. |
case_id | number | No | Filter by case. |
expat_id | number | No | Filter by expat. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/tasks?page=1&per_page=20" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"currentPage": 1,
"perPage": 20,
"lastPage": 1,
"total": 1,
"items": [
{
"id": 910,
"case_service_id": 211,
"expat_case_id": 590,
"name": "Collect Immigration Documents",
"description": "Collect passport and supporting documents.",
"assignee_id": 601,
"assignee_name": "Task Owner",
"assignee": {
"id": 601,
"name": "Task Owner",
},
"status": "in_progress",
"parent_id": null,
"dependent_task_id": null,
"start_date": "2026-05-03",
"end_date": "2026-05-20",
"forecast_duration": 15,
"forecast_start_date": "2026-05-03",
"forecast_end_date": "2026-05-18",
"custom_start_date": null,
"custom_end_date": null,
"duration": 17,
"initial_duration": 17,
"initial_start_date": "2026-05-03",
"initial_end_date": "2026-05-20",
"team_id": null,
"computed_start_date": "2026-05-03",
"computed_end_date": "2026-05-18",
"computed_duration": 17,
"tags": [],
"subtask_total": 0,
"is_parent": false,
"expat_name": "Jane Doe",
"client_name": "Example Client Ltd",
"label": "Collect Immigration Documents",
"allowed_actions": ["update", "update_assignee", "update_status"],
"status_label": "In progress",
"milestone_name": null,
"milestone_id": null,
"workflow_id": null
}
],
"filters": [],
"resource_columns": []
}
}
GET /v1/cases/tasks/{taskId}
Return one case task by ID.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | number | Yes | Task identifier. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/tasks/{{TASK_ID}}" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"task": {
"id": 910,
"case_service_id": 211,
"expat_case_id": 590,
"name": "Collect Immigration Documents",
"description": "Collect passport and supporting documents.",
"assignee_id": 601,
"assignee_name": "Task Owner",
"assignee": {
"id": 601,
"name": "Task Owner",
},
"status": "in_progress",
"parent_id": null,
"dependent_task_id": null,
"status_label": "In progress",
"start_date": "2026-05-03",
"end_date": "2026-05-20",
"forecast_duration": 15,
"forecast_start_date": "2026-05-03",
"forecast_end_date": "2026-05-18",
"custom_start_date": null,
"custom_end_date": null,
"duration": 17,
"initial_duration": 17,
"initial_start_date": "2026-05-03",
"initial_end_date": "2026-05-20",
"team_id": null,
"computed_start_date": "2026-05-03",
"computed_end_date": "2026-05-18",
"computed_duration": 17,
"tags": [],
"subtask_total": 0,
"is_parent": false,
"expat_name": "Jane Doe",
"client_name": "Example Client Ltd",
"label": "Collect Immigration Documents",
"allowed_actions": ["update", "update_assignee", "update_status"],
"milestone_name": null,
"milestone_id": null,
"workflow_id": null
}
}
}
GET /v1/cases/tasks/{taskId}/managers
Return assigned users for a task.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
taskId | number | Yes | Task identifier. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/tasks/{{TASK_ID}}/managers" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"601": {
"user_id": 601,
"user_name": "Task Owner",
"user_image": "https://cdn.example.com/users/601.jpg",
"allowed_actions": {
"delete": false
},
"models": [
{
"model_type": "task",
"model_id": 910,
"roles": ["manager"],
"permissions": ["update task details", "view task details"]
}
]
}
}
}
GET /v1/cases/{caseId}/managers
Return assigned users for a case.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
caseId | number | Yes | Case identifier. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/{{CASE_ID}}/managers" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"result": [
{
"user_id": 501,
"user_name": "John Manager",
"allowed_actions": {
"delete": false,
"update": true
},
"models": [
{
"model_type": "case",
"model_id": 590,
"roles": ["manager"],
"permissions": ["view case details", "update case details"]
}
]
},
{
"user_id": 588,
"user_name": "Jane HR",
"allowed_actions": {
"delete": true,
"update": true
},
"models": [
{
"model_type": "case",
"model_id": 590,
"roles": ["follower"],
"permissions": ["view case details"]
}
]
}
],
"allowed_actions": {
"create": true
},
"total": 2
}
GET /v1/cases/{caseId}/expenses
Return paginated case expenses.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
caseId | number | Yes | Case identifier. |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number. |
per_page | number | No | Items per page. |
search_text | string | No | Search value. |
status | array | No | Expense status filter. |
task_id | number | No | Filter by task. |
cost_category_id | number | No | Filter by cost category. |
covered_by_id | number | No | Filter by expense cover. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/{{CASE_ID}}/expenses?page=1&per_page=20" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"currentPage": 1,
"perPage": 20,
"lastPage": 1,
"total": 1,
"items": [
{
"id": 1502,
"expat_case_id": 590,
"task_id": 910,
"title": "Visa Fees",
"amount": "250.00",
"currency_code": "EUR",
"converted_amount": "250.00",
"converted_amount_currency_code": "EUR",
"cost_category_id": 3,
"cost_category_name": "Immigration",
"incurred_at": "2026-05-10",
"covered_by_id": 2,
"covered_by_name": "Client",
"entity_id": 77,
"status": "pending",
"invoice_id": null,
"invoice_date": null,
"order_number": "ORD-3001",
"expat_name": "Jane Doe",
"client_name": "Example Client Ltd",
"legal_entity_name": "XPath Germany GmbH",
"service_name": "Immigration",
"task_name": "Collect Immigration Documents",
"created_at": "2026-05-10T10:17:00+00:00",
"file": {}
}
],
"filters": [],
"resource_columns": []
}
}
GET /v1/cases/{caseId}/expenses/{expenseId}
Return one case expense by ID.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer {{ACCESS_TOKEN}} |
Accept | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
caseId | number | Yes | Case identifier. |
expenseId | number | Yes | Expense identifier. |
Example Request
curl -X GET "{{BASE_URL}}/v1/cases/{{CASE_ID}}/expenses/{{EXPENSE_ID}}" \
-H "Authorization: Bearer {{ACCESS_TOKEN}}" \
-H "Accept: application/json"
Success Response (200)
{
"success": true,
"result": {
"expense": {
"id": 1502,
"expat_case_id": 590,
"task_id": 910,
"title": "Visa Fees",
"amount": "250.00",
"currency_code": "EUR",
"converted_amount": "250.00",
"converted_amount_currency_code": "EUR",
"cost_category_id": 3,
"cost_category_name": "Immigration",
"incurred_at": "2026-05-10",
"covered_by_id": 2,
"covered_by_name": "Client",
"entity_id": 77,
"status": "pending",
"invoice_id": null,
"invoice_date": null,
"order_number": "ORD-3001",
"expat_name": "Jane Doe",
"client_name": "Example Client Ltd",
"legal_entity_name": "XPath Germany GmbH",
"service_name": "Immigration",
"task_name": "Collect Immigration Documents",
"created_at": "2026-05-10T10:17:00+00:00",
"file": {}
}
}
}