Update recently opened navigation tabs in the user session
POST /mywork/v1/recent-tabs/update
Operation id: updateRecentTabs
Description
Adds a tab to the user's recent tabs list and returns the full updated list. Corresponds to legacy: POST /service/users/updateRecentTabs.
Behaviour:
- Maintains a maximum of 3 recent tabs per product — when the limit is exceeded, the oldest tab for that product is dropped.
- Removes duplicate
tab_identries before inserting the new tab at the top. - Tabs are filtered by
unit_org_level— only tabs matching the current org level are retained. - When user-switching is active (
switchFlag="Y"), tabs are stored undercurrentRecentTabs; otherwise stored underhomeRecentTabs. tab_nameis URL-encoded by the service (spaces become+, not%20).
Session-sourced (not accepted via form body): profile_id and unit_org_level are always resolved from the authenticated session.
product_id derivation: If omitted, derived from tab_id by extracting the prefix before the first underscore (e.g. RTM20_MSGSETUP1 → RTM20).
Form Parameters Reference
| Parameter | Type | Required | Description |
|---|---|---|---|
tab_id | String | Yes (→ E140) | Unique tab identifier (e.g. RTM20_MSGSETUP1) |
product_id | String | No | Product identifier (e.g. RTM20). Derived from tab_id if omitted. |
module_name | String | Yes (→ E142) | Display name of the module (e.g. Task Manager) |
tab_name | String | Yes (→ E144) | Display name of the tab (e.g. Messaging Setup) |
Response Fields
| Field | Type | Description |
|---|---|---|
status | String | OK for success |
recent_tabs | Object | Full updated recent tabs object keyed by language code |
recent_tabs.<lang_code>[] | Array | List of recent tab objects for the language |
recent_tabs.<lang_code>[*].product_id | String | Product identifier |
recent_tabs.<lang_code>[*].tab_id | String | Unique tab identifier |
recent_tabs.<lang_code>[*].unit_org_level | String | Organizational level of the unit |
recent_tabs.<lang_code>[*].profile_id | String | Comma-separated profile IDs (from session) |
recent_tabs.<lang_code>[*].module_name | String | Display name of the module |
recent_tabs.<lang_code>[*].tab_name | String | URL-encoded tab name (spaces as +) |
Error Scenarios
| Scenario | HTTP | Error Code | Message |
|---|---|---|---|
Missing / blank X-reflexis-csrf-token-X | 400 | E101 | MANDATORY_DOMAIN_ID: Missing or blank auth token |
Invalid (expired) X-reflexis-csrf-token-X | 401 | E202 | User session is invalid |
tab_id missing or blank | 400 | E140 | tab_id is mandatory |
module_name missing or blank | 400 | E142 | module_name is mandatory |
tab_name missing or blank | 400 | E144 | tab_name is mandatory |
| Service returned null/empty | 500 | E340 | Error while updating recently opened tabs |
| Unexpected server-side error | 500 | E302 | Internal server error |
Note: Missing/blank token returns E101 (400), not E202 (401).
Error Codes Reference
| Code | Description |
|---|---|
E101 | Missing or blank auth token (domain ID mandatory) |
E140 | tab_id is mandatory |
E142 | module_name is mandatory |
E144 | tab_name is mandatory |
E202 | User session is invalid |
E302 | Internal server error |
E340 | Error while updating recently opened tabs |
Tags: MyWorkRecentTabs
Security
- AuthTokenHeader (apiKey)
- Session authentication token validated server-side against the user session store.
Responses
200 — Success — {status: OK, recent_tabs: {<lang_code>: [{product_id, tab_id, unit_org_level, profile_id, module_name, tab_name}]}}.
Note: tab_name is URL-encoded by the service layer (spaces become +).
Content type: application/json
400 — E140 tab_id mandatory / E142 module_name mandatory / E144 tab_name mandatory
Content type: application/json
401 — Missing or invalid X-reflexis-csrf-token-X session token
Content type: application/json
500 — Unexpected server-side error
Content type: application/json
Request body
Required: Yes
application/x-www-form-urlencoded
Schema
| Property | Type | Required | Description |
|---|---|---|---|
tab_id | string | Yes | Unique tab identifier (e.g. RTM20_MSGSETUP1) — mandatory (E140) |
product_id | string | No | Product identifier (e.g. RTM20). If omitted, derived from tab_id prefix. |
module_name | string | Yes | Display name of the module (e.g. Task Manager) — mandatory (E142) |
tab_name | string | Yes | Display name of the tab (e.g. Messaging Setup) — mandatory (E144) |
{
"type": "object",
"required": [
"tab_id",
"module_name",
"tab_name"
],
"properties": {
"tab_id": {
"type": "string",
"description": "Unique tab identifier (e.g. RTM20_MSGSETUP1) — mandatory (E140)"
},
"product_id": {
"type": "string",
"description": "Product identifier (e.g. RTM20). If omitted, derived from tab_id prefix."
},
"module_name": {
"type": "string",
"description": "Display name of the module (e.g. Task Manager) — mandatory (E142)"
},
"tab_name": {
"type": "string",
"description": "Display name of the tab (e.g. Messaging Setup) — mandatory (E144)"
}
}
}
Response models
200 — Success — {status: OK, recent_tabs: {<lang_code>: [{product_id, tab_id, unit_org_level, profile_id, module_name, tab_name}]}}.
Note: tab_name is URL-encoded by the service layer (spaces become +).
Content type: application/json
Schema
JSON object (structure varies by endpoint).
{
"type": "object",
"description": "JSON object (structure varies by endpoint)."
}
Example:
{
"status": "OK",
"recent_tabs": {
"en_US": [
{
"product_id": "RTM20",
"tab_id": "RTM20_MSGSETUP1",
"unit_org_level": "1",
"profile_id": "SYSADMIN,MOD",
"module_name": "Task Manager",
"tab_name": "Messaging+Setup"
}
]
}
}
400 — E140 tab_id mandatory / E142 module_name mandatory / E144 tab_name mandatory
Content type: application/json
Schema
| Property | Type | Required | Description |
|---|---|---|---|
status | string | Yes | Always "ER" for error responses |
errorCode | string | Yes | Application-level error code (e.g. E202, E105, E404) |
response | string | Yes | Human-readable error message |
{
"type": "object",
"example": {
"status": "ER",
"errorCode": "E202",
"response": "User session is invalid"
},
"required": [
"status",
"errorCode",
"response"
],
"properties": {
"status": {
"type": "string",
"description": "Always \"ER\" for error responses",
"enum": [
"ER"
]
},
"errorCode": {
"type": "string",
"description": "Application-level error code (e.g. E202, E105, E404)"
},
"response": {
"type": "string",
"description": "Human-readable error message"
}
}
}
401 — Missing or invalid X-reflexis-csrf-token-X session token
Content type: application/json
Schema
| Property | Type | Required | Description |
|---|---|---|---|
status | string | Yes | Always "ER" for error responses |
errorCode | string | Yes | Application-level error code (e.g. E202, E105, E404) |
response | string | Yes | Human-readable error message |
{
"type": "object",
"example": {
"status": "ER",
"errorCode": "E202",
"response": "User session is invalid"
},
"required": [
"status",
"errorCode",
"response"
],
"properties": {
"status": {
"type": "string",
"description": "Always \"ER\" for error responses",
"enum": [
"ER"
]
},
"errorCode": {
"type": "string",
"description": "Application-level error code (e.g. E202, E105, E404)"
},
"response": {
"type": "string",
"description": "Human-readable error message"
}
}
}
Example:
{
"status": "ER",
"errorCode": "E202",
"response": "User session is invalid"
}
500 — Unexpected server-side error
Content type: application/json
Schema
| Property | Type | Required | Description |
|---|---|---|---|
status | string | Yes | Always "ER" for error responses |
errorCode | string | Yes | Application-level error code (e.g. E202, E105, E404) |
response | string | Yes | Human-readable error message |
{
"type": "object",
"example": {
"status": "ER",
"errorCode": "E202",
"response": "User session is invalid"
},
"required": [
"status",
"errorCode",
"response"
],
"properties": {
"status": {
"type": "string",
"description": "Always \"ER\" for error responses",
"enum": [
"ER"
]
},
"errorCode": {
"type": "string",
"description": "Application-level error code (e.g. E202, E105, E404)"
},
"response": {
"type": "string",
"description": "Human-readable error message"
}
}
}
Example:
{
"status": "ER",
"errorCode": "E302",
"response": "Internal server error"
}