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_id entries 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 under currentRecentTabs; otherwise stored under homeRecentTabs.
  • tab_name is 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_MSGSETUP1RTM20).


Form Parameters Reference

ParameterTypeRequiredDescription
tab_idStringYes (→ E140)Unique tab identifier (e.g. RTM20_MSGSETUP1)
product_idStringNoProduct identifier (e.g. RTM20). Derived from tab_id if omitted.
module_nameStringYes (→ E142)Display name of the module (e.g. Task Manager)
tab_nameStringYes (→ E144)Display name of the tab (e.g. Messaging Setup)

Response Fields

FieldTypeDescription
statusStringOK for success
recent_tabsObjectFull updated recent tabs object keyed by language code
recent_tabs.<lang_code>[]ArrayList of recent tab objects for the language
recent_tabs.<lang_code>[*].product_idStringProduct identifier
recent_tabs.<lang_code>[*].tab_idStringUnique tab identifier
recent_tabs.<lang_code>[*].unit_org_levelStringOrganizational level of the unit
recent_tabs.<lang_code>[*].profile_idStringComma-separated profile IDs (from session)
recent_tabs.<lang_code>[*].module_nameStringDisplay name of the module
recent_tabs.<lang_code>[*].tab_nameStringURL-encoded tab name (spaces as +)

Error Scenarios

ScenarioHTTPError CodeMessage
Missing / blank X-reflexis-csrf-token-X400E101MANDATORY_DOMAIN_ID: Missing or blank auth token
Invalid (expired) X-reflexis-csrf-token-X401E202User session is invalid
tab_id missing or blank400E140tab_id is mandatory
module_name missing or blank400E142module_name is mandatory
tab_name missing or blank400E144tab_name is mandatory
Service returned null/empty500E340Error while updating recently opened tabs
Unexpected server-side error500E302Internal server error

Note: Missing/blank token returns E101 (400), not E202 (401).

Error Codes Reference

CodeDescription
E101Missing or blank auth token (domain ID mandatory)
E140tab_id is mandatory
E142module_name is mandatory
E144tab_name is mandatory
E202User session is invalid
E302Internal server error
E340Error 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

PropertyTypeRequiredDescription
tab_idstringYesUnique tab identifier (e.g. RTM20_MSGSETUP1) — mandatory (E140)
product_idstringNoProduct identifier (e.g. RTM20). If omitted, derived from tab_id prefix.
module_namestringYesDisplay name of the module (e.g. Task Manager) — mandatory (E142)
tab_namestringYesDisplay 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

PropertyTypeRequiredDescription
statusstringYesAlways "ER" for error responses
errorCodestringYesApplication-level error code (e.g. E202, E105, E404)
responsestringYesHuman-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

PropertyTypeRequiredDescription
statusstringYesAlways "ER" for error responses
errorCodestringYesApplication-level error code (e.g. E202, E105, E404)
responsestringYesHuman-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

PropertyTypeRequiredDescription
statusstringYesAlways "ER" for error responses
errorCodestringYesApplication-level error code (e.g. E202, E105, E404)
responsestringYesHuman-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"
}