Synack mobileapps API

Mobile application assets.

OpenAPI Specification

synack-mobileapps-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Assessment Service Assessment Groups mobileapps API
  version: 1.0.0
  description: 'APIs for managing Assessment and related operations on the Synack.

    '
  contact:
    name: Synack Engineering
    email: engineering@synack.com
servers:
- url: https://client.synack.com/api/assessment
  description: Commercial
- url: https://client.synack.us/api/assessment
  description: FedRAMP (Medium)
security:
- bearerAuth: []
tags:
- name: mobileapps
  description: Mobile application assets.
paths:
  /v2/bulk/assets:
    post:
      operationId: postAssetBulk
      tags:
      - mobileapps
      description: 'Creates Assets in my Synack org. Note: In the Body, choose the Object pull down that corresponds to the asset type you want to add; Object 1 for Cloud, Object 2 for Hosts, Object 3 for Mobile, Object 4 for Networks, Object 5 for Web. For example; to add more than 1 Host IP address, choose Option 2, then specify multiple IP ranges with /32 CIDRs (adding a new Item for each).

        '
      x-mint:
        metadata:
          title: Bulk Create Assets
      requestBody:
        description: Supply Asset UID for the asset to upsert
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SingleOrMultiAsset'
      responses:
        '201':
          $ref: '#/components/responses/SingleOrMultiAssetResponse'
        '202':
          $ref: '#/components/responses/202StatusAccepted'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '409':
          $ref: '#/components/responses/409Conflict'
        '413':
          $ref: '#/components/responses/413RequestEntityTooLarge'
        '422':
          $ref: '#/components/responses/422EntityNotProcessable'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/bulk/assets/lifecycle-state:update:
    post:
      operationId: bulkUpdateAssetLifecycleState
      tags:
      - mobileapps
      description: 'Bulk updates the asset life cycle property. Checks the validity of assets and returns 409 Conflict if rules are violated.

        '
      x-mint:
        metadata:
          title: Bulk Update Asset Lifecycle State
      requestBody:
        description: Supply Organization UID, Asset UIDs for the assets to update, and the lifecycle state to update to.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetBulkLifecycleStateUpdate'
      responses:
        '200':
          $ref: '#/components/responses/AssetBulkLifecycleStateUpdateResponse'
        '202':
          $ref: '#/components/responses/202StatusAccepted'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '409':
          $ref: '#/components/responses/409Conflict'
        '413':
          $ref: '#/components/responses/413RequestEntityTooLarge'
        '422':
          $ref: '#/components/responses/422EntityNotProcessable'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/bulk/assets/criticality:update:
    post:
      operationId: bulkUpdateAssetCriticality
      tags:
      - mobileapps
      description: 'Bulk update the criticality of multiple assets.

        '
      x-mint:
        metadata:
          title: Bulk Update Asset Criticality
      requestBody:
        description: The Organization UID, Asset UIDs to be updated, and the criticality value to be set on the assets.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetBulkCriticalityUpdate'
      responses:
        '200':
          $ref: '#/components/responses/AssetBulkCriticalityUpdateResponse'
        '202':
          $ref: '#/components/responses/202StatusAccepted'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '409':
          $ref: '#/components/responses/409Conflict'
        '413':
          $ref: '#/components/responses/413RequestEntityTooLarge'
        '422':
          $ref: '#/components/responses/422EntityNotProcessable'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/assets:
    get:
      operationId: getAssets
      tags:
      - mobileapps
      description: 'Retrieve the list of assets for one or more organizations, considering filtering and pagination query parameters. When an organization-level OAuth2 scope is provided, the results will be restricted to those organizations the user is authorized for. Similarly, if a listing- level OAuth2 scope is provided, the results will be restricted to those listings the user is authorized for.

        Additional query parameters generally restrict the resulting set of assets according to AND semantics.

        Use of organizationUid and listingUid query parameters will further restrict the results.

        If neither are specified, the returned assets are the set of assets the user is allowed to access with organization OR listing specific privileges.

        If listing UIDs are supplied without organization UIDs, then only the assets assigned to those listings (which the user is authorized for) will be returned. Conversely, if organization UIDs are supplied without listing UIDs, then only the assets owned by those organizations (which the the user is authorized for) will be returned.

        Should both organization UIDs and listing UIDs be supplied, then the set of assets returned is restricted to assets assigned to any of the supplied listings, AND owned by any of the supplied organizations, further restricted to only those the user is authorized to access.

        Researcher users are restricted to only viewing credentials of in scope assets for listings to which they have been assigned.

        '
      x-mint:
        metadata:
          title: Get Assets
      parameters:
      - $ref: '#/components/parameters/OrganizationUIDQuery'
      - $ref: '#/components/parameters/ListingUIDQuery'
      - $ref: '#/components/parameters/AssetTypeQuery'
      - $ref: '#/components/parameters/HostTypeQuery'
      - in: query
        name: search
        schema:
          type: string
        required: false
        description: 'Optional query parameter for a search string that will be used to match within the label or location properties of assets. If this query parameter is provided, any location query parameter will be ignored.

          '
      - in: query
        name: active
        schema:
          type: boolean
        required: false
        description: 'Optional parameter that determines whether the response includes assets regardless of active state (the default, if this query parameter is not provided); active assets only if true; or inactive assets only if false.

          '
      - in: query
        name: inProduction
        schema:
          type: boolean
        required: false
        description: 'Optional query parameter that determines whether production or non-production assets will be included in the response.

          '
      - in: query
        name: maxHostDiscoveryAgeMins
        schema:
          type: integer
          default: 0
        required: false
        description: 'Optional query parameter to get host assets which are discovered by cloudEnumeration scanner shifted by maxHostDiscoveryAgeMins. Assets which are added via boss or discovered by other type of scanners will be included in response. E.g. CloudEnumeration hosts are valid for 1 hour from each time they are discovered, maxHostDiscoveryAgeMins=0 means that if the end time of the relationship has passed, the asset will not be returned - maxHostDiscoveryAgeMins=60 however, would return assets that were still valid 60 minutes ago

          '
      - in: query
        name: scope[]
        schema:
          type: array
          items:
            $ref: '#/components/schemas/Scope'
        required: false
        explode: true
        description: Restrict the returned assets to only assets associated to listings by the specified scopes.
      - in: query
        name: cloudPlatform[]
        schema:
          type: array
          items:
            $ref: '#/components/schemas/CloudPlatform'
        required: false
        explode: true
        description: Restrict the returned assets to only assets enumerated from a particular cloud platform.
      - in: query
        name: location
        schema:
          type: string
        required: false
        description: 'Prefix search of the derived location property.

          '
      - in: query
        name: errorCode[]
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ErrorCode'
        required: false
        explode: true
        description: Filter assets to only include assets with matching error codes.
      - in: query
        name: portNumber[]
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PortNumber'
        required: false
        explode: true
        description: Filter assets to only include hosts with open ports matching the port number.
      - in: query
        name: maxOpenPorts
        schema:
          type: integer
          format: int32
          minimum: 0
          maximum: 65535
        required: false
        description: Max open ports from a single IP address.
      - in: query
        name: hasNetwork
        schema:
          type: boolean
        required: false
        description: 'Filter assets to include/exclude those with networks.

          Deprecating.

          '
      - in: query
        name: networkUid[]
        schema:
          type: array
          items:
            $ref: '#/components/schemas/UID'
        required: false
        explode: true
        description: 'Unique identifier for a network.

          If not supplied the request will apply to all networks the user is authorized to access.

          Deprecating.

          '
      - in: query
        name: gatewayId[]
        schema:
          type: array
          items:
            $ref: '#/components/schemas/GatewayID'
        required: false
        explode: true
        description: 'Unique gateway id.

          If not supplied the request will apply to all gateways.

          '
      - in: query
        name: earliestCreatedAt
        schema:
          type: string
          format: date-time
        required: false
        description: Filter assets with a createdAt date greater or equal to this value
      - in: query
        name: latestCreatedAt
        schema:
          type: string
          format: date-time
        required: false
        description: Filter assets with a createdAt date less than or equal to this value
      - in: query
        name: userUid
        schema:
          $ref: '#/components/schemas/UserUID'
        required: false
        description: Restricts the credentials to only those available to the user. This query parameter is ignored if the user is a researcher.
      - in: query
        name: relationshipTargetAssetUid
        schema:
          $ref: '#/components/schemas/AssetUID'
        required: false
        description: 'Filter assets which have a relationship with targetAssetUid equal to this value.

          '
      - in: query
        name: relationshipType
        schema:
          $ref: '#/components/schemas/AssetRelationshipType'
        required: false
        description: 'Filter assets which have a relationship of this type.

          '
      - $ref: '#/components/parameters/PerPageQuery'
      - $ref: '#/components/parameters/PageQuery'
      - in: query
        name: sort
        schema:
          type: string
          enum:
          - location
          - label
          - createdAt
          - updatedAt
          - lastReachableAt
          - lastScan
        description: Optional property to sort results by.
        required: false
      - $ref: '#/components/parameters/SortDirQuery'
      - in: query
        name: origin
        schema:
          type: string
          enum:
          - provided
          - discovered
        description: Optional property to filter results by human created or system discovered assets.
        required: false
      - name: lifecycleState[]
        required: false
        in: query
        schema:
          type: array
          items:
            type: string
            enum:
            - confirmed
            - unconfirmed
            - archived
            - ignored
        description: Optional property to filter results by asset lifecycle state. When not supplied, all assets except `archived` will be returned.
      - in: query
        name: omitFields
        description: Fields to omit from response.
        schema:
          type: array
          items:
            type: string
            enum:
            - ALL
            - relationships
            - externalRelationships
            - ports
            - networks
            - scopeRules
            - binaries
            - userRoles
      - $ref: '#/components/parameters/IpRanges'
      responses:
        '200':
          $ref: '#/components/responses/PaginatedArrayOfAssets'
        '400':
          $ref: '#/components/responses/400BadRequest'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_or
        - asset_lr
        - asset_srt_lr
        - asset_scan_gr
    post:
      operationId: postAsset
      tags:
      - mobileapps
      description: 'Creates an asset in my Synack org. In the Body, choose the Object pull down that corresponds to the asset type you want to add; Object 1 for Cloud, Object 2 for Host, Object 3 for Mobile, Object 4 for Network, Object 5 for Web

        '
      x-mint:
        metadata:
          title: Create Asset
      requestBody:
        description: Asset to create. If the asset is of cloud account type, only its metadata returned in the response as credential data is restricted to asset_scan_gr scope. If the asset is of webapp type, corresponding FQDN or IP host asset will also be created.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SingleOrMultiAsset'
      responses:
        '201':
          $ref: '#/components/responses/SingleOrMultiAssetResponse'
        '202':
          $ref: '#/components/responses/202StatusAccepted'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '409':
          $ref: '#/components/responses/409Conflict'
        '413':
          $ref: '#/components/responses/413RequestEntityTooLarge'
        '422':
          $ref: '#/components/responses/422EntityNotProcessable'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/assets/{assetUid}:
    parameters:
    - $ref: '#/components/parameters/AssetUIDPath'
    get:
      operationId: getAsset
      tags:
      - mobileapps
      description: 'Retrieves a single asset. If the user is a researcher, only the credentials they are authorized to access will be returned. If the asset is of cloud account type, only a user with asset_scan_gr scope can access its credential data.

        '
      x-mint:
        metadata:
          title: Get Asset
      parameters:
      - in: query
        name: userUid
        schema:
          $ref: '#/components/schemas/UserUID'
        required: false
        description: Restricts the credentials to only those available to the user. This query parameter is ignored if the user is a researcher.
      responses:
        '200':
          $ref: '#/components/responses/SingleAssetResponse'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_scan_gr
        - asset_or
        - asset_lr
        - asset_srt_lr
    patch:
      operationId: patchAsset
      tags:
      - mobileapps
      description: 'Patches the properties of a single asset.

        '
      x-mint:
        metadata:
          title: Patch Asset
      requestBody:
        description: Asset properties to patch.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SingleAsset'
      responses:
        '200':
          $ref: '#/components/responses/SingleAssetResponse'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
    delete:
      x-excluded: true
      operationId: deleteAsset
      tags:
      - mobileapps
      description: 'Deletes an asset. This is intended to be a privileged operation. Regular use should be to mark the asset as inactive. Any relationships that involve the deleted asset will be also be deleted, as will any association to listings.

        '
      responses:
        '204':
          $ref: '#/components/responses/204NoContent'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/assets/{assetUid}/scripts:
    parameters:
    - $ref: '#/components/parameters/AssetUIDPath'
    get:
      x-excluded: true
      operationId: getAssetScripts
      tags:
      - mobileapps
      description: Gets all scripts owned by the mobile or web application asset. Returns 409 status if the asset is not of one of these types.
      parameters:
      - $ref: '#/components/parameters/PerPageQuery'
      - $ref: '#/components/parameters/PageQuery'
      - in: query
        name: sort
        schema:
          type: string
          enum:
          - name
          - scriptRole
          - createdAt
          - updatedAt
        description: Optional property to sort results by.
        required: false
      - $ref: '#/components/parameters/SortDirQuery'
      responses:
        '200':
          $ref: '#/components/responses/PaginatedArrayOfAssetScripts'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '409':
          $ref: '#/components/responses/409Conflict'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_or
    post:
      x-excluded: true
      operationId: postAssetScript
      tags:
      - mobileapps
      description: 'Adds a script to a mobile or web application asset. Returns 409 status if the asset is of any other type..

        '
      requestBody:
        description: Script to add.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetScript'
      responses:
        '201':
          $ref: '#/components/responses/SingleAssetScript'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '409':
          $ref: '#/components/responses/409Conflict'
        '412':
          $ref: '#/components/responses/412PreconditionFailed'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/assets/{assetUid}/credentials:
    parameters:
    - $ref: '#/components/parameters/AssetUIDPath'
    get:
      x-excluded: true
      operationId: getAssetCredentials
      tags:
      - mobileapps
      description: Gets all credentials owned by web application asset. Returns 409 status if the asset is not of this type.
      parameters:
      - $ref: '#/components/parameters/PerPageQuery'
      - $ref: '#/components/parameters/PageQuery'
      - in: query
        name: sort
        schema:
          type: string
          enum:
          - name
          - createdAt
          - updatedAt
        description: Optional property to sort results by.
        required: false
      - $ref: '#/components/parameters/SortDirQuery'
      responses:
        '200':
          $ref: '#/components/responses/PaginatedArrayOfAssetCredentials'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '409':
          $ref: '#/components/responses/409Conflict'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_scan_gr
        - asset_or
  /v2/scripts/{scriptUid}:
    parameters:
    - $ref: '#/components/parameters/ScriptUIDPath'
    get:
      x-excluded: true
      operationId: getAssetScript
      tags:
      - mobileapps
      description: Gets an asset script.
      responses:
        '200':
          $ref: '#/components/responses/SingleAssetScript'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_scan_gr
        - asset_or
        - asset_lr
    delete:
      x-excluded: true
      operationId: deleteAssetScript
      tags:
      - mobileapps
      description: 'Delete a script from a asset.

        '
      responses:
        '204':
          $ref: '#/components/responses/204NoContent'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
    patch:
      x-excluded: true
      operationId: patchAssetScript
      tags:
      - mobileapps
      description: 'Patch the properties of an asset script.

        '
      requestBody:
        description: Script properties to patch.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRoleScriptUpdate'
      responses:
        '200':
          $ref: '#/components/responses/SingleUserRoleScript'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '422':
          $ref: '#/components/responses/422EntityNotProcessable'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/scripts/{scriptUid}/script-data:
    parameters:
    - $ref: '#/components/parameters/ScriptUIDPath'
    get:
      x-excluded: true
      operationId: getAssetScriptData
      tags:
      - mobileapps
      description: Gets the script data for an asset script.
      responses:
        '200':
          description: JSON-representation of the asset script data
          content:
            application/json: {}
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_or
        - asset_lr
  /v2/assets/{assetUid}/binaries/{version}:
    parameters:
    - $ref: '#/components/parameters/AssetUIDPath'
    - $ref: '#/components/parameters/ApplicationVersionPath'
    put:
      x-excluded: true
      operationId: putApplicationBinary
      tags:
      - mobileapps
      description: 'Upsert an application binary file or the Url to the binary in the app store.

        '
      requestBody:
        description: Application binary properties to patch.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationBinary'
      parameters:
      - $ref: '#/components/parameters/IfMatch'
      responses:
        '204':
          $ref: '#/components/responses/204NoContent'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '412':
          $ref: '#/components/responses/412PreconditionFailed'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
    delete:
      x-excluded: true
      operationId: deleteApplicationBinary
      tags:
      - mobileapps
      description: 'Delete an application binary.

        '
      responses:
        '204':
          $ref: '#/components/responses/204NoContent'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/assets/{assetUid}/user-roles:
    parameters:
    - $ref: '#/components/parameters/AssetUIDPath'
    get:
      x-excluded: true
      operationId: getUserRoles
      tags:
      - mobileapps
      description: Gets a paginated list of all user roles for a mobile or web application. Returns a 409 status code if the asset is not one of these expected types.
      parameters:
      - $ref: '#/components/parameters/PerPageQuery'
      - $ref: '#/components/parameters/PageQuery'
      - in: query
        name: sort
        schema:
          type: string
          enum:
          - name
          - scannable
          - createdAt
          - updatedAt
        description: Optional property to sort results by.
        required: false
      - $ref: '#/components/parameters/SortDirQuery'
      - $ref: '#/components/parameters/ScannableQuery'
      responses:
        '200':
          $ref: '#/components/responses/PaginatedArrayOfUserRoles'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '409':
          $ref: '#/components/responses/409Conflict'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gr
        - asset_or
        - asset_lr
        - asset_srt_lr
    post:
      x-excluded: true
      operationId: postUserRole
      tags:
      - mobileapps
      description: Adds a user role to a mobile or web application asset. Returns a 409 status code if the asset is not one of these expected types.
      requestBody:
        description: Mobile or web application user role to create.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRole'
      responses:
        '201':
          $ref: '#/components/responses/SingleUserRole'
        '204':
          $ref: '#/components/responses/204NoContent'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '409':
          $ref: '#/components/responses/409Conflict'
        '422':
          $ref: '#/components/responses/422EntityNotProcessable'
        '500':
          $ref: '#/components/responses/500InternalServerError'
        '503':
          $ref: '#/components/responses/503ServiceUnavailable'
      security:
      - OAuth2:
        - asset_gw
        - asset_client_ow
        - asset_boss_ow
        - asset_client_lw
        - asset_boss_lw
  /v2/user-roles/{userRoleUid}:
    parameters:
    - $ref: '#/components/parameters/UserRoleUIDPath'
    get:
      x-excluded: true
      operationId: getUserRole
      tags:
      - mobileapps
      description: Retrieves the properties of the supplied user role.
      responses:
        '200':
          $ref: '#/components/responses/SingleUserRole'
        '401':
          $ref: '#/components/responses/401Unauthorized'
        '403':
          $ref: '#/components/responses/403Forbidden'
        '404':
          $ref: '#/components/responses/404NotFound'
        '500':
          $ref: '#/components/responses/500InternalServerError'
 

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