Atomicwork requests API

The requests API from Atomicwork — 19 operation(s) for requests.

OpenAPI Specification

atomicwork-requests-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Atomicwork Public accessManagement requests API
  version: 1.0.0
servers:
- url: https://{tenant}.atomicwork.com
  description: Your Atomicwork tenant
tags:
- name: requests
paths:
  /api/v1/requests:
    post:
      operationId: postapi-v-1-requests
      summary: Create request
      tags:
      - requests
      parameters:
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_requests_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                request_type:
                  type: string
                request_source:
                  $ref: '#/components/schemas/ApiV1RequestsPostRequestBodyContentApplicationJsonSchemaRequestSource'
                description:
                  type: string
                email_content:
                  type: string
                plain_text_description_override:
                  type: string
                  description: 'Internal-only override for the persisted plain-text rendering of the description. When non-empty, AbstractRequestService persists it as RequestDetail.description instead of running HTMLSanitizerUtil.getPlainText() on the HTML description.

                    Set ONLY by the email ingestion path (EmailIntentBasedRequestCreationService), which derives it from reqDescription via normalizeHtmlToPlainText(getPlainTextForRichHtml(...)) so system-generated HTML emails (BlackLine offboarding, etc.) avoid mashed table cells and blank-line storms.

                    Annotated @JsonIgnore so external HTTP clients cannot set it via the request body — without that annotation, any caller of POST /requests, /service-requests, /incidents could write arbitrary unsanitized text into RequestDetail.description, bypassing the getPlainText() pipeline. The Lombok @SuperBuilder still exposes a setter for in-process Java callers (the email path), since builder access does not go through Jackson.

                    '
                status:
                  type: string
                priority:
                  type: string
                parent_request_id:
                  type: integer
                  format: int64
                agent_group:
                  type: integer
                  format: int64
                assignee:
                  type: integer
                  format: int64
                subject:
                  type: string
                notes:
                  type: array
                  items:
                    $ref: '#/components/schemas/ApiV1RequestsPostRequestBodyContentApplicationJsonSchemaNotesItems'
                workspace_id:
                  type: integer
                  format: int64
                conversation_info:
                  $ref: '#/components/schemas/ApiV1RequestsPostRequestBodyContentApplicationJsonSchemaConversationInfo'
                tags:
                  type: array
                  items:
                    type: integer
                    format: int64
                cc_emails:
                  type: array
                  items:
                    type: string
                bcc_emails:
                  type: array
                  items:
                    type: string
                attachments:
                  type: array
                  items:
                    type: integer
                    format: int64
                requester:
                  type: integer
                  format: int64
                to_email:
                  type: string
                request_created_from:
                  $ref: '#/components/schemas/ApiV1RequestsPostRequestBodyContentApplicationJsonSchemaRequestCreatedFrom'
                custom_fields:
                  $ref: '#/components/schemas/ApiV1RequestsPostRequestBodyContentApplicationJsonSchemaCustomFields'
                created_at:
                  type: string
                  format: date-time
                updated_at:
                  type: string
                  format: date-time
                external_id:
                  type: string
                external_source:
                  $ref: '#/components/schemas/ApiV1RequestsPostRequestBodyContentApplicationJsonSchemaExternalSource'
                resolution_time:
                  type: string
                  format: date-time
                  description: 'When the ticket was resolved in the source system. Only accepted during migration (requires external_id or external_source).

                    '
                first_response_time:
                  type: string
                  format: date-time
                  description: 'When the first agent response occurred in the source system. Only accepted during migration (requires external_id or external_source).

                    '
                first_response_due_time:
                  type: string
                  format: date-time
                  description: 'SLA due time for first response from the source system. Only accepted during migration (requires external_id or external_source).

                    '
                resolution_due_time:
                  type: string
                  format: date-time
                  description: 'SLA due time for resolution from the source system. Only accepted during migration (requires external_id or external_source).

                    '
                closed_status_at:
                  type: string
                  format: date-time
                  description: 'When the ticket was moved to closed status in the source system. Only accepted during migration (requires external_id or external_source). When provided with a closed status, also sets resolution_time if not explicitly provided.

                    '
  /api/v1/requests/bulk-actions/{bulk_action_type}:
    post:
      operationId: postapi-v-1-requests-bulk-actions-bulk-action-type
      summary: Bulk action on requests
      tags:
      - requests
      parameters:
      - name: bulk_action_type
        in: path
        description: The bulk action type
        required: true
        schema:
          $ref: '#/components/schemas/ApiV1RequestsBulkActionsBulkActionTypePostParametersBulkActionType'
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_requests_bulk_actions__bulk_action_type_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                display_ids:
                  type: array
                  items:
                    type: string
                assignee:
                  type: string
                tags:
                  type: array
                  items:
                    type: integer
                    format: int64
                option_label:
                  type: string
                sub_option_label:
                  type: string
                all_children:
                  type: boolean
                major_incident_display_id:
                  type: string
  /api/v1/requests/list:
    post:
      operationId: postapi-v-1-requests-list
      summary: Get requests by filter
      description: "\n### Filtering\n\nThe request body is an **array of filter objects**. Send an empty array (`[]`) to retrieve all records.\n\nEach filter object has the following fields:\n\n| Field | Type | Description |\n|---|---|---|\n| `attribute` | string | The field to filter on (see Supported attributes below) |\n| `operator` | string | Comparison operator (see Available operators below) |\n| `values` | array | One or more `{ \"value\": <scalar> }` objects |\n\n**Supported attributes**\n\n| Attribute | Typical operator | Description |\n|---|---|---|\n| `status` | `IS_ANY_OF` | Ticket status (e.g. `OPEN`, `IN_PROGRESS`, `RESOLVED`, `CLOSED`). |\n| `type` | `IS_ANY_OF` | Request type (e.g. `INCIDENT`, `SERVICE_REQUEST`, `GENERAL_REQUEST`). |\n| `assignee_id` | `IS_ANY_OF` | Assigned agent user ID. |\n| `requester_id` | `IS_ANY_OF` | Requester user ID. |\n| `created_at` | `IS_BETWEEN` | Creation timestamp (ISO 8601). Use for date range filtering. |\n| `updated_at` | `IS_BETWEEN` | Last-updated timestamp (ISO 8601). |\n\n**Available operators**\n\n| Operator | Meaning |\n|---|---|\n| `EQUALS` | Exact match |\n| `NOT_EQUALS` | Exclude exact match |\n| `IN` / `IS_ANY_OF` | Match any value in the list |\n| `IS_NOT_ANY_OF` | Exclude all listed values |\n| `IS_BETWEEN` | Inclusive range — pass exactly two values: `[start, end]` |\n| `IS_ON_OR_BEFORE` / `IS_ON_OR_AFTER` | Date/time boundary comparisons |\n| `CONTAINS` / `TEXT_CONTAINS` | Substring or set membership |\n| `IS_NULL` / `IS_NOT_NULL` | Null checks — `values` array can be empty |\n| `STARTS_WITH` / `ENDS_WITH` | String prefix/suffix match |\n\n**Example**\n\n```json\n[\n  {\n    \"attribute\": \"status\",\n    \"operator\": \"IS_ANY_OF\",\n    \"values\": [\n      {\n        \"value\": \"OPEN\"\n      },\n      {\n        \"value\": \"IN_PROGRESS\"\n      }\n    ]\n  },\n  {\n    \"attribute\": \"created_at\",\n    \"operator\": \"IS_BETWEEN\",\n    \"values\": [\n      {\n        \"value\": \"2024-01-01T00:00:00Z\"\n      },\n      {\n        \"value\": \"2024-12-31T23:59:59Z\"\n      }\n    ]\n  }\n]\n```\n"
      tags:
      - requests
      parameters:
      - name: filter_name
        in: query
        description: ''
        required: true
        schema:
          type: string
      - name: sort_order
        in: query
        description: ''
        required: false
        schema:
          $ref: '#/components/schemas/ApiV1RequestsListPostParametersSortOrder'
      - name: sort
        in: query
        description: Generic ordered sort as a compact string, e.g. `created_at:ASC,subject:DESC`. Field keys are validated server-side against the view-column allowlist. When present, takes precedence over the legacy `sort_order` enum.
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: ''
        required: true
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        description: ''
        required: false
        schema:
          type: integer
          default: 25
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_requests_list_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ApiV1RequestsListPostRequestBodyContentApplicationJsonSchemaItems'
  /api/v1/workspaces/{workspace_id}/requests/list:
    post:
      operationId: postapi-v-1-workspaces-workspace-id-requests-list
      summary: Get requests by filter
      description: "\n### Filtering\n\nThe request body is an **array of filter objects**. Send an empty array (`[]`) to retrieve all records.\n\nEach filter object has the following fields:\n\n| Field | Type | Description |\n|---|---|---|\n| `attribute` | string | The field to filter on (see Supported attributes below) |\n| `operator` | string | Comparison operator (see Available operators below) |\n| `values` | array | One or more `{ \"value\": <scalar> }` objects |\n\n**Supported attributes**\n\n| Attribute | Typical operator | Description |\n|---|---|---|\n| `status` | `IS_ANY_OF` | Ticket status (e.g. `OPEN`, `IN_PROGRESS`, `RESOLVED`, `CLOSED`). |\n| `type` | `IS_ANY_OF` | Request type (e.g. `INCIDENT`, `SERVICE_REQUEST`, `GENERAL_REQUEST`). |\n| `assignee_id` | `IS_ANY_OF` | Assigned agent user ID. |\n| `requester_id` | `IS_ANY_OF` | Requester user ID. |\n| `created_at` | `IS_BETWEEN` | Creation timestamp (ISO 8601). Use for date range filtering. |\n| `updated_at` | `IS_BETWEEN` | Last-updated timestamp (ISO 8601). |\n\n**Available operators**\n\n| Operator | Meaning |\n|---|---|\n| `EQUALS` | Exact match |\n| `NOT_EQUALS` | Exclude exact match |\n| `IN` / `IS_ANY_OF` | Match any value in the list |\n| `IS_NOT_ANY_OF` | Exclude all listed values |\n| `IS_BETWEEN` | Inclusive range — pass exactly two values: `[start, end]` |\n| `IS_ON_OR_BEFORE` / `IS_ON_OR_AFTER` | Date/time boundary comparisons |\n| `CONTAINS` / `TEXT_CONTAINS` | Substring or set membership |\n| `IS_NULL` / `IS_NOT_NULL` | Null checks — `values` array can be empty |\n| `STARTS_WITH` / `ENDS_WITH` | String prefix/suffix match |\n\n**Example**\n\n```json\n[\n  {\n    \"attribute\": \"status\",\n    \"operator\": \"IS_ANY_OF\",\n    \"values\": [\n      {\n        \"value\": \"OPEN\"\n      },\n      {\n        \"value\": \"IN_PROGRESS\"\n      }\n    ]\n  },\n  {\n    \"attribute\": \"created_at\",\n    \"operator\": \"IS_BETWEEN\",\n    \"values\": [\n      {\n        \"value\": \"2024-01-01T00:00:00Z\"\n      },\n      {\n        \"value\": \"2024-12-31T23:59:59Z\"\n      }\n    ]\n  }\n]\n```\n"
      tags:
      - requests
      parameters:
      - name: workspace_id
        in: path
        description: Workspace ID (numeric). Find yours under Settings → Workspace.
        required: true
        schema:
          type: integer
          format: int64
      - name: filter_name
        in: query
        description: ''
        required: true
        schema:
          type: string
      - name: is_problem
        in: query
        description: ''
        required: false
        schema:
          type: boolean
      - name: sort_order
        in: query
        description: ''
        required: false
        schema:
          $ref: '#/components/schemas/ApiV1WorkspacesWorkspaceIdRequestsListPostParametersSortOrder'
      - name: sort
        in: query
        description: Generic ordered sort as a compact string, e.g. `priority:DESC,created_at:ASC`. Field keys are validated server-side against the view-column allowlist. When present, takes precedence over the legacy `sort_order` enum.
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: ''
        required: true
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        description: ''
        required: false
        schema:
          type: integer
          default: 25
      - name: request_type_filter
        in: query
        description: ''
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ApiV1WorkspacesWorkspaceIdRequestsListPostParametersRequestTypeFilterSchemaItems'
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_workspaces__workspace_id__requests_list_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ApiV1WorkspacesWorkspaceIdRequestsListPostRequestBodyContentApplicationJsonSchemaItems'
  /api/v1/requests/{requestId}:
    get:
      operationId: getapi-v-1-requests-request-id
      summary: Get Request
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_getapi_v1_requests__requestId_Response_200'
    patch:
      operationId: patchapi-v-1-requests-request-id
      summary: Patch request
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_patchapi_v1_requests__requestId_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties: {}
  /api/v1/requests/{requestId}/move:
    post:
      operationId: postapi-v-1-requests-request-id-move
      summary: Move Request
      description: '**DEPRECATED**: Use `/requests/{requestId}/move/result` instead.


        This endpoint does not handle permission-based responses correctly when the user

        lacks view access to the destination workspace.

        '
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_requests__requestId__move_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                destination_workspace_id:
                  type: integer
                  format: int64
                request_note:
                  $ref: '#/components/schemas/ApiV1RequestsRequestIdMovePostRequestBodyContentApplicationJsonSchemaRequestNote'
                workflow_request_note:
                  $ref: '#/components/schemas/ApiV1RequestsRequestIdMovePostRequestBodyContentApplicationJsonSchemaWorkflowRequestNote'
                data:
                  $ref: '#/components/schemas/ApiV1RequestsRequestIdMovePostRequestBodyContentApplicationJsonSchemaData'
  /api/v1/requests/{requestId}/modify-followers:
    put:
      operationId: putapi-v-1-requests-request-id-modify-followers
      summary: Add or Remove Followers
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_putapi_v1_requests__requestId__modify_followers_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                follower_ids:
                  type: array
                  items:
                    type: integer
                    format: int64
  /api/v1/requests/{requestId}/followers:
    get:
      operationId: getapi-v-1-requests-request-id-followers
      summary: Get Followers of a Request
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_getapi_v1_requests__requestId__followers_Response_200'
  /api/v1/requests/{requestId}/add-followers:
    patch:
      operationId: patchapi-v-1-requests-request-id-add-followers
      summary: Add Followers to a Request
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_patchapi_v1_requests__requestId__add_followers_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                follower_ids:
                  type: array
                  items:
                    type: integer
                    format: int64
  /api/v1/requests/{requestId}/trash:
    put:
      operationId: putapi-v-1-requests-request-id-trash
      summary: Trash Request
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_putapi_v1_requests__requestId__trash_Response_200'
  /api/v1/requests/{requestId}/notes:
    get:
      operationId: getapi-v-1-requests-request-id-notes
      summary: Get Request Notes
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: search_key
        in: query
        description: ''
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: ''
        required: true
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        description: ''
        required: false
        schema:
          type: integer
          default: 25
      - name: next_page_token
        in: query
        description: ''
        required: false
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_getapi_v1_requests__requestId__notes_Response_200'
    post:
      operationId: postapi-v-1-requests-request-id-notes
      summary: Create request notes
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_requests__requestId__notes_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: integer
                  format: int64
                conversation_id:
                  type: integer
                  format: int64
                  description: When set, the reply is mirrored into this conversation's thread (UAG).
                description:
                  type: string
                mentions:
                  type: array
                  items:
                    type: integer
                    format: int64
                is_private:
                  type: boolean
                  default: false
                source:
                  $ref: '#/components/schemas/ApiV1RequestsRequestIdNotesPostRequestBodyContentApplicationJsonSchemaSource'
                type:
                  $ref: '#/components/schemas/ApiV1RequestsRequestIdNotesPostRequestBodyContentApplicationJsonSchemaType'
                attachments:
                  type: array
                  items:
                    type: integer
                    format: int64
                cc_emails:
                  type: array
                  items:
                    type: string
                bcc_emails:
                  type: array
                  items:
                    type: string
                is_broadcast:
                  type: boolean
                  default: false
                external_id:
                  type: string
                external_source_type:
                  $ref: '#/components/schemas/ApiV1RequestsRequestIdNotesPostRequestBodyContentApplicationJsonSchemaExternalSourceType'
                email_content:
                  type: string
                event_created_at:
                  type: string
                  format: date-time
                  description: Event creation timestamp. When provided via public API, also backdates the note's created time, SLA metrics, and activity timestamps. Must not be in the future or before the request's creation time.
  /api/v1/requests/{requestId}/activity-notes:
    get:
      operationId: getapi-v-1-requests-request-id-activity-notes
      summary: Get Request Notes and activities
      tags:
      - requests
      parameters:
      - name: requestId
        in: path
        description: ''
        required: true
        schema:
          type: string
      - name: search_key
        in: query
        description: ''
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: ''
        required: true
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        description: ''
        required: false
        schema:
          type: integer
          default: 25
      - name: next_page_token
        in: query
        description: ''
        required: false
        schema:
          type: string
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_getapi_v1_requests__requestId__activity_notes_Response_200'
  /api/v1/requests/items/{item_id}:
    post:
      operationId: postapi-v-1-requests-items-item-id
      summary: Create service request for item
      tags:
      - requests
      parameters:
      - name: item_id
        in: path
        description: The item ID
        required: true
        schema:
          type: integer
          format: int64
      - name: X-Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: X-Workspace-Id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Requests_postapi_v1_requests_items__item_id_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                request_type:
                  type: string
                request_source:
                  $ref: '#/components/schemas/ApiV1RequestsItemsItemIdPostRequestBodyContentApplicationJsonSchemaRequestSource'
                description:
                  type: string
                email_content:
                  type: string
                plain_text_description_override:
                  type: string
                  description: 'Internal-only override for the persisted plain-text rendering of the description. When non-empty, AbstractRequestService persists it as RequestDetail.description instead of running HTMLSanitizerUtil.getPlainText() on the HTML description.

                    Set ONLY by the email ingestion path (EmailIntentBasedRequestCreationService), which derives it from reqDescription via normalizeHtmlToPlainText(getPlainTextForRichHtml(...)) so system-generated HTML emails (BlackLine offboarding, etc.) avoid mashed table cells and blank-line storms.

                    Annotated @JsonIgnore so external HTTP clients cannot set it via the request body — without that annotation, any caller of POST /requests, /service-requests, /incidents could write arbitrary unsanitized text into RequestDetail.description, bypassing the getPlainText() pipeline. The Lombok @SuperBuilder still exposes a setter for in-process Java callers (the email path), since builder access does not go through Jackson.

                    '
                status:
                  type: string
                priority:
                  type: string
                parent_request_id:
                  type: integer
                  format: int64
                agent_group:
                  type: integer
                  format: int64
                assignee:
                  type: integer
                  format: int64
                subject:
                  type: string
                notes:
                  type: array
                  items:
                    $ref: '#/components/schemas/ApiV1RequestsItemsItemIdPostRequestBodyContentApplicationJsonSchemaNotesItems'
                workspace_id:
                  type: integer
                  format: int64
                conversation_info:
                  $ref: '#/components/schemas/ApiV1RequestsItemsItemIdPostRequestBodyContentApplicationJsonSchemaConversationInfo'
                tags:
                  type: array
                  items:
                    type: integer
                    format: int64
                cc_emails:
                  type: array
                  items:
                    type: strin

# --- truncated at 32 KB (103 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/atomicwork/refs/heads/main/openapi/atomicwork-requests-api-openapi.yml