openapi: 3.0.0
info:
  description: This is the OAS 3.0 specification for the Partner API in Sophos Central.
  version: 1.12.0
  contact:
    name: Sophos Central APIs
    email: apis@sophos.com
    url: 'https://developer.sophos.com'
  title: Partner API
tags:
  - name: Partner Admins
    description: >-
      Create new administrators, update their profile information, enumerate
      them or view administrator details.
  - name: Partner Billing
    description: Get the monthly billing report API for a partner.
  - name: Partner role management
    description: Central role management API for partners.
  - name: Provisioning
    description: >-
      Get available products and manage default products to use when creating
      new tenants.
  - name: Tenants
    description: 'Create new tenants, enumerate them or view tenant details.'
servers:
  - url: 'https://api.central.sophos.com/partner/v1'
    description: Global service in the production environment.
security:
  - bearerAuth: []
paths:
  /tenants:
    post:
      tags:
        - Tenants
      summary: Create new tenant
      description: Create a new tenant.
      x-soph-permissions:
        - 'account_management:write'
        - 'license_management:write'
      operationId: createTenant
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      requestBody:
        description: New tenant request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Request to create a new tenant. Either dataGeography or
                dataRegion must be provided.
              required:
                - name
                - contact
                - billingType
              properties:
                name:
                  type: string
                  description: >-
                    Tenant name. This cannot be changed after the tenant has
                    been created.
                dataGeography:
                  type: string
                  description: Geographical location where the tenant data is stored.
                  enum:
                    - US
                    - IE
                    - DE
                    - CA
                    - AU
                    - JP
                    - IN
                    - BR
                    - AE
                dataRegion:
                  type: string
                  description: The data region where tenant data is stored.
                  enum:
                    - eu01
                    - eu02
                    - us01
                    - us02
                    - us03
                    - ca01
                    - au01
                    - jp01
                    - in01
                    - br01
                    - ae01
                billingType:
                  type: string
                  description: Billing type.
                  enum:
                    - trial
                    - usage
                    - ordered
                contact:
                  type: object
                  description: 'Contact information for a partner, organization or tenant.'
                  required:
                    - firstName
                    - lastName
                    - phone
                    - address
                  properties:
                    firstName:
                      type: string
                      description: First name.
                    lastName:
                      type: string
                      description: Last name.
                    email:
                      type: string
                      format: email
                      description: Email address.
                    phone:
                      type: string
                      description: Phone number.
                    mobile:
                      type: string
                      description: Mobile number.
                    fax:
                      type: string
                      description: Fax number.
                    address:
                      type: object
                      description: 'Address of a partner, organization or tenant.'
                      required:
                        - address1
                        - city
                        - countryCode
                        - postalCode
                      properties:
                        address1:
                          type: string
                          description: Line 1 of the address.
                        address2:
                          type: string
                          description: Line 2 of the address.
                        address3:
                          type: string
                          description: Line 3 of the address.
                        city:
                          type: string
                          description: City.
                        state:
                          type: string
                          description: State.
                        countryCode:
                          type: string
                          description: Country code.
                        postalCode:
                          type: string
                          description: Postal code.
                admin:
                  type: object
                  description: >-
                    Create an admin when creating a tenant. Email uniqueness is
                    checked and results in a conflict if it is already in the
                    system.
                  required:
                    - name
                    - email
                  properties:
                    name:
                      type: string
                      description: Name.
                    firstName:
                      description: Admin's first name or given name.
                      type: string
                    lastName:
                      description: Admins's last name or surname.
                      type: string
                    email:
                      type: string
                      format: email
                      description: Email address.
                products:
                  uniqueItems: true
                  type: array
                  description: Products list.
                  items:
                    description: Sophos product code with an optional quantity.
                    type: object
                    required:
                      - code
                    properties:
                      code:
                        type: string
                        description: Sophos product code.
                        pattern: >-
                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                      quantity:
                        description: Quantity for the number of seats.
                        type: integer
                acceptedSampleSubmission:
                  type: boolean
                  description: >-
                    Whether the tenant has accepted the sample submission
                    agreement.
            example:
              name: Usage Tenant with Recommended Products
              dataGeography: DE
              dataRegion: eu02
              billingType: usage
              contact:
                firstName: Roger
                lastName: Rabit
                email: mustbeunique@samplecomain.de
                phone: 111-111-1111
                mobile: '2222222222'
                fax: '3333333333'
                address:
                  address1: 123 Fake St
                  city: Berlin
                  countryCode: DE
                  postalCode: '10115'
              admin:
                name: Augustus Cesar
                firstName: Augustus
                lastName: Cesar
                email: tenant_admin@sampledomain.de
              products:
                - code: CIXA-MSP
                - code: CEMA-MSP
              acceptedSampleSubmission: true
      responses:
        '201':
          description: Created a new tenant.
          content:
            application/json:
              schema:
                type: object
                description: Tenant.
                required:
                  - id
                  - name
                  - dataGeography
                  - dataRegion
                  - billingType
                  - partner
                  - apiHost
                properties:
                  id:
                    type: string
                    description: Tenant ID.
                    format: uuid
                  name:
                    type: string
                    description: Name set when the tenant was created.
                  dataGeography:
                    type: string
                    description: Geographical location where the tenant data is stored.
                    enum:
                      - US
                      - IE
                      - DE
                      - CA
                      - AU
                      - JP
                      - IN
                      - BR
                      - AE
                  dataRegion:
                    type: string
                    description: The data region where tenant data is stored.
                    enum:
                      - eu01
                      - eu02
                      - us01
                      - us02
                      - us03
                      - ca01
                      - au01
                      - jp01
                      - in01
                      - br01
                      - ae01
                  billingType:
                    type: string
                    description: Billing type.
                    enum:
                      - term
                      - trial
                      - usage
                      - ordered
                  partner:
                    type: object
                    description: Represents a referenced object.
                    required:
                      - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The ID of the referenced object.
                  organization:
                    type: object
                    description: Represents a referenced object.
                    required:
                      - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The ID of the referenced object.
                  apiHost:
                    type: string
                    description: Tenant API host URL.
                    format: uri
                  products:
                    uniqueItems: true
                    type: array
                    description: Products list.
                    items:
                      description: Sophos product code with an optional quantity.
                      type: object
                      required:
                        - code
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        quantity:
                          description: Quantity for the number of seats.
                          type: integer
                  status:
                    type: string
                    description: Tenant account status.
                    enum:
                      - active
                      - suspended
                      - canceled
                  primary:
                    type: boolean
                    description: Indicates whether tenant is primary subestate or not.
                  managed:
                    type: boolean
                    description: >-
                      Indicates if tenant has enabled management by this
                      partner.
                  contact:
                    type: object
                    description: 'Contact information for a partner, organization or tenant.'
                    required:
                      - firstName
                      - lastName
                      - phone
                      - address
                    properties:
                      firstName:
                        type: string
                        description: First name.
                      lastName:
                        type: string
                        description: Last name.
                      email:
                        type: string
                        format: email
                        description: Email address.
                      phone:
                        type: string
                        description: Phone number.
                      mobile:
                        type: string
                        description: Mobile number.
                      fax:
                        type: string
                        description: Fax number.
                      address:
                        type: object
                        description: 'Address of a partner, organization or tenant.'
                        required:
                          - address1
                          - city
                          - countryCode
                          - postalCode
                        properties:
                          address1:
                            type: string
                            description: Line 1 of the address.
                          address2:
                            type: string
                            description: Line 2 of the address.
                          address3:
                            type: string
                            description: Line 3 of the address.
                          city:
                            type: string
                            description: City.
                          state:
                            type: string
                            description: State.
                          countryCode:
                            type: string
                            description: Country code.
                          postalCode:
                            type: string
                            description: Postal code.
        '409':
          description: Role name already in use or is a pre-defined role name.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    get:
      tags:
        - Tenants
      summary: Enumerate tenants
      description: List all the tenants for a partner.
      x-soph-permissions:
        - 'account_management:read'
        - 'partner:listMembers'
      operationId: listTenantsInPartner
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: billingType
          required: false
          description: Search for accounts by billing type.
          in: query
          style: form
          explode: false
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
              format: enum
              enum:
                - term
                - trial
                - usage
                - ordered
        - name: marketplaceIds
          required: false
          description: Search by External IDs this tenant has in other systems.
          in: query
          style: form
          explode: false
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
        - name: status
          required: false
          in: query
          description: Search for accounts by status.
          explode: false
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
              format: enum
              enum:
                - active
                - canceled
                - suspended
        - name: ids
          in: query
          description: Tenant IDs.
          required: false
          schema:
            type: array
            items:
              type: string
              format: uuid
            uniqueItems: true
            maxItems: 50
        - in: query
          name: page
          required: false
          schema:
            type: integer
            default: 1
          description: 'The page number to fetch, starting with 1.'
        - in: query
          name: pageSize
          required: false
          schema:
            type: integer
            default: 50
          description: The size of the page requested.
        - in: query
          name: pageTotal
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Whether the number of pages should be calculated and returned in the
            response.
        - name: managed
          description: >-
            Match tenants by whether they have enabled management by this
            partner.
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Page of tenants.
          content:
            application/json:
              schema:
                type: object
                description: Page of tenants.
                required:
                  - items
                  - pages
                properties:
                  items:
                    type: array
                    description: List of tenants.
                    items:
                      type: object
                      description: Tenant.
                      required:
                        - id
                        - name
                        - dataGeography
                        - dataRegion
                        - billingType
                        - partner
                        - apiHost
                      properties:
                        id:
                          type: string
                          description: Tenant ID.
                          format: uuid
                        name:
                          type: string
                          description: Name set when the tenant was created.
                        dataGeography:
                          type: string
                          description: >-
                            Geographical location where the tenant data is
                            stored.
                          enum:
                            - US
                            - IE
                            - DE
                            - CA
                            - AU
                            - JP
                            - IN
                            - BR
                            - AE
                        dataRegion:
                          type: string
                          description: The data region where tenant data is stored.
                          enum:
                            - eu01
                            - eu02
                            - us01
                            - us02
                            - us03
                            - ca01
                            - au01
                            - jp01
                            - in01
                            - br01
                            - ae01
                        billingType:
                          type: string
                          description: Billing type.
                          enum:
                            - term
                            - trial
                            - usage
                            - ordered
                        partner:
                          type: object
                          description: Represents a referenced object.
                          required:
                            - id
                          properties:
                            id:
                              type: string
                              format: uuid
                              description: The ID of the referenced object.
                        organization:
                          type: object
                          description: Represents a referenced object.
                          required:
                            - id
                          properties:
                            id:
                              type: string
                              format: uuid
                              description: The ID of the referenced object.
                        apiHost:
                          type: string
                          description: Tenant API host URL.
                          format: uri
                        products:
                          uniqueItems: true
                          type: array
                          description: Products list.
                          items:
                            description: Sophos product code with an optional quantity.
                            type: object
                            required:
                              - code
                            properties:
                              code:
                                type: string
                                description: Sophos product code.
                                pattern: >-
                                  ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                              quantity:
                                description: Quantity for the number of seats.
                                type: integer
                        status:
                          type: string
                          description: Tenant account status.
                          enum:
                            - active
                            - suspended
                            - canceled
                        primary:
                          type: boolean
                          description: >-
                            Indicates whether tenant is primary subestate or
                            not.
                        managed:
                          type: boolean
                          description: >-
                            Indicates if tenant has enabled management by this
                            partner.
                        contact:
                          type: object
                          description: >-
                            Contact information for a partner, organization or
                            tenant.
                          required:
                            - firstName
                            - lastName
                            - phone
                            - address
                          properties:
                            firstName:
                              type: string
                              description: First name.
                            lastName:
                              type: string
                              description: Last name.
                            email:
                              type: string
                              format: email
                              description: Email address.
                            phone:
                              type: string
                              description: Phone number.
                            mobile:
                              type: string
                              description: Mobile number.
                            fax:
                              type: string
                              description: Fax number.
                            address:
                              type: object
                              description: 'Address of a partner, organization or tenant.'
                              required:
                                - address1
                                - city
                                - countryCode
                                - postalCode
                              properties:
                                address1:
                                  type: string
                                  description: Line 1 of the address.
                                address2:
                                  type: string
                                  description: Line 2 of the address.
                                address3:
                                  type: string
                                  description: Line 3 of the address.
                                city:
                                  type: string
                                  description: City.
                                state:
                                  type: string
                                  description: State.
                                countryCode:
                                  type: string
                                  description: Country code.
                                postalCode:
                                  type: string
                                  description: Postal code.
                  pages:
                    type: object
                    required:
                      - current
                      - size
                      - maxSize
                    properties:
                      current:
                        type: integer
                        description: The 1-based page number being returned.
                      size:
                        type: integer
                        description: The size of the page being returned.
                      total:
                        type: integer
                        description: >-
                          (Optional) The total number of pages that exist, if
                          pageTotal=true in the request.
                      items:
                        type: integer
                        description: (Optional) The total number of items across all pages.
                      maxSize:
                        type: integer
                        description: The maximum page size that can be requested.
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/tenants/{tenantId}':
    get:
      tags:
        - Tenants
      summary: Get tenant details
      description: Get a tenant by ID.
      x-soph-permissions:
        - 'account_management:read'
        - 'partner:listMembers'
      operationId: getTenantById
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Existing tenant.
          content:
            application/json:
              schema:
                type: object
                description: Tenant.
                required:
                  - id
                  - name
                  - dataGeography
                  - dataRegion
                  - billingType
                  - partner
                  - apiHost
                properties:
                  id:
                    type: string
                    description: Tenant ID.
                    format: uuid
                  name:
                    type: string
                    description: Name set when the tenant was created.
                  dataGeography:
                    type: string
                    description: Geographical location where the tenant data is stored.
                    enum:
                      - US
                      - IE
                      - DE
                      - CA
                      - AU
                      - JP
                      - IN
                      - BR
                      - AE
                  dataRegion:
                    type: string
                    description: The data region where tenant data is stored.
                    enum:
                      - eu01
                      - eu02
                      - us01
                      - us02
                      - us03
                      - ca01
                      - au01
                      - jp01
                      - in01
                      - br01
                      - ae01
                  billingType:
                    type: string
                    description: Billing type.
                    enum:
                      - term
                      - trial
                      - usage
                      - ordered
                  partner:
                    type: object
                    description: Represents a referenced object.
                    required:
                      - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The ID of the referenced object.
                  organization:
                    type: object
                    description: Represents a referenced object.
                    required:
                      - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The ID of the referenced object.
                  apiHost:
                    type: string
                    description: Tenant API host URL.
                    format: uri
                  products:
                    uniqueItems: true
                    type: array
                    description: Products list.
                    items:
                      description: Sophos product code with an optional quantity.
                      type: object
                      required:
                        - code
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        quantity:
                          description: Quantity for the number of seats.
                          type: integer
                  status:
                    type: string
                    description: Tenant account status.
                    enum:
                      - active
                      - suspended
                      - canceled
                  primary:
                    type: boolean
                    description: Indicates whether tenant is primary subestate or not.
                  managed:
                    type: boolean
                    description: >-
                      Indicates if tenant has enabled management by this
                      partner.
                  contact:
                    type: object
                    description: 'Contact information for a partner, organization or tenant.'
                    required:
                      - firstName
                      - lastName
                      - phone
                      - address
                    properties:
                      firstName:
                        type: string
                        description: First name.
                      lastName:
                        type: string
                        description: Last name.
                      email:
                        type: string
                        format: email
                        description: Email address.
                      phone:
                        type: string
                        description: Phone number.
                      mobile:
                        type: string
                        description: Mobile number.
                      fax:
                        type: string
                        description: Fax number.
                      address:
                        type: object
                        description: 'Address of a partner, organization or tenant.'
                        required:
                          - address1
                          - city
                          - countryCode
                          - postalCode
                        properties:
                          address1:
                            type: string
                            description: Line 1 of the address.
                          address2:
                            type: string
                            description: Line 2 of the address.
                          address3:
                            type: string
                            description: Line 3 of the address.
                          city:
                            type: string
                            description: City.
                          state:
                            type: string
                            description: State.
                          countryCode:
                            type: string
                            description: Country code.
                          postalCode:
                            type: string
                            description: Postal code.
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    patch:
      tags:
        - Tenants
      summary: Patch tenant details
      description: Patch a tenant by ID.
      x-soph-permissions:
        - 'account_management:write'
      operationId: patchTenantById
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      requestBody:
        description: Json Merge Patch request.
        required: true
        content:
          application/json:
            schema:
              description: Patch request for tenant.
              type: object
              properties:
                showAs:
                  type: string
                  maxLength: 255
                  description: Show as field.
      responses:
        '200':
          description: Updated tenant.
          content:
            application/json:
              schema:
                type: object
                description: Tenant.
                required:
                  - id
                  - name
                  - dataGeography
                  - dataRegion
                  - billingType
                  - partner
                  - apiHost
                properties:
                  id:
                    type: string
                    description: Tenant ID.
                    format: uuid
                  name:
                    type: string
                    description: Name set when the tenant was created.
                  dataGeography:
                    type: string
                    description: Geographical location where the tenant data is stored.
                    enum:
                      - US
                      - IE
                      - DE
                      - CA
                      - AU
                      - JP
                      - IN
                      - BR
                      - AE
                  dataRegion:
                    type: string
                    description: The data region where tenant data is stored.
                    enum:
                      - eu01
                      - eu02
                      - us01
                      - us02
                      - us03
                      - ca01
                      - au01
                      - jp01
                      - in01
                      - br01
                      - ae01
                  billingType:
                    type: string
                    description: Billing type.
                    enum:
                      - term
                      - trial
                      - usage
                      - ordered
                  partner:
                    type: object
                    description: Represents a referenced object.
                    required:
                      - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The ID of the referenced object.
                  organization:
                    type: object
                    description: Represents a referenced object.
                    required:
                      - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The ID of the referenced object.
                  apiHost:
                    type: string
                    description: Tenant API host URL.
                    format: uri
                  products:
                    uniqueItems: true
                    type: array
                    description: Products list.
                    items:
                      description: Sophos product code with an optional quantity.
                      type: object
                      required:
                        - code
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        quantity:
                          description: Quantity for the number of seats.
                          type: integer
                  status:
                    type: string
                    description: Tenant account status.
                    enum:
                      - active
                      - suspended
                      - canceled
                  primary:
                    type: boolean
                    description: Indicates whether tenant is primary subestate or not.
                  managed:
                    type: boolean
                    description: >-
                      Indicates if tenant has enabled management by this
                      partner.
                  contact:
                    type: object
                    description: 'Contact information for a partner, organization or tenant.'
                    required:
                      - firstName
                      - lastName
                      - phone
                      - address
                    properties:
                      firstName:
                        type: string
                        description: First name.
                      lastName:
                        type: string
                        description: Last name.
                      email:
                        type: string
                        format: email
                        description: Email address.
                      phone:
                        type: string
                        description: Phone number.
                      mobile:
                        type: string
                        description: Mobile number.
                      fax:
                        type: string
                        description: Fax number.
                      address:
                        type: object
                        description: 'Address of a partner, organization or tenant.'
                        required:
                          - address1
                          - city
                          - countryCode
                          - postalCode
                        properties:
                          address1:
                            type: string
                            description: Line 1 of the address.
                          address2:
                            type: string
                            description: Line 2 of the address.
                          address3:
                            type: string
                            description: Line 3 of the address.
                          city:
                            type: string
                            description: City.
                          state:
                            type: string
                            description: State.
                          countryCode:
                            type: string
                            description: Country code.
                          postalCode:
                            type: string
                            description: Postal code.
        '404':
          description: No tenant found with this id.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/tenants/{tenantId}/account-amendments':
    get:
      tags:
        - Tenants
      summary: Enumerate amendments
      description: List all account amendments.
      x-soph-permissions:
        - 'account_management:read'
        - 'license_management:read'
      operationId: listAccountAmendments
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: status
          required: false
          in: query
          description: Search by account amendment status.
          explode: false
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
              format: enum
              description: Account amendment status.
              enum:
                - pending
                - applied
                - failed
                - canceled
        - in: query
          name: page
          required: false
          schema:
            type: integer
            default: 1
          description: 'The page number to fetch, starting with 1.'
        - in: query
          name: pageSize
          required: false
          schema:
            type: integer
            default: 50
          description: The size of the page requested.
        - in: query
          name: pageTotal
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Whether the number of pages should be calculated and returned in the
            response.
      responses:
        '200':
          description: Page of account amendments.
          content:
            application/json:
              schema:
                type: object
                description: Page of account amendments.
                required:
                  - items
                  - pages
                properties:
                  items:
                    type: array
                    description: List of account amendments.
                    items:
                      type: object
                      description: >-
                        Response from a request to create a new billing
                        amendment.
                      required:
                        - id
                        - type
                        - status
                        - createdAt
                        - changes
                      properties:
                        id:
                          type: string
                          description: Amendment ID.
                          format: uuid
                        status:
                          type: string
                          format: enum
                          description: Account amendment status.
                          enum:
                            - pending
                            - applied
                            - failed
                            - canceled
                        type:
                          type: string
                          description: Amendment request type.
                          enum:
                            - billingChange
                            - resumeAccount
                            - cancelAccount
                            - suspendAccount
                            - unlinkFromPartner
                        effectiveAt:
                          description: Date and time (UTC) when the amendment is effective.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        createdAt:
                          description: >-
                            Date and time (UTC) when the amendment request was
                            created.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        failedAt:
                          description: >-
                            Date and time (UTC) when the amendment request
                            failed.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        appliedAt:
                          description: >-
                            Date and time (UTC) when the amendment request was
                            applied.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        createdBy:
                          type: object
                          description: User or service principal that made the change.
                          required:
                            - id
                            - type
                          properties:
                            id:
                              description: Principal ID.
                              type: string
                            type:
                              type: string
                              enum:
                                - user
                                - service
                              description: Type of entity that made this change.
                            name:
                              description: Principal name.
                              type: string
                            accountType:
                              type: string
                              enum:
                                - partner
                                - tenant
                                - organization
                                - distributor
                              description: Account type for this principal.
                            accountId:
                              description: Account ID.
                              type: string
                              format: uuid
                        changes:
                          type: object
                          description: Change object from an amendment request.
                          properties:
                            billingType:
                              type: object
                              description: Billing type change object.
                              required:
                                - to
                                - from
                              properties:
                                to:
                                  description: Billing type that the tenant was changed to.
                                  type: string
                                  enum:
                                    - trial
                                    - ordered
                                    - usage
                                from:
                                  description: >-
                                    Billing type that the tenant was changed
                                    from.
                                  type: string
                                  enum:
                                    - trial
                                    - ordered
                                    - usage
                                    - term
                            products:
                              type: object
                              description: List of amended products.
                              properties:
                                usage:
                                  type: object
                                  properties:
                                    added:
                                      type: array
                                      items:
                                        type: string
                                        description: Sophos product code.
                                        pattern: >-
                                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                      uniqueItems: true
                                    removed:
                                      type: array
                                      items:
                                        type: string
                                        description: Sophos product code.
                                        pattern: >-
                                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                      uniqueItems: true
                                ordered:
                                  type: object
                                  properties:
                                    added:
                                      type: array
                                      items:
                                        description: >-
                                          Default products for ordered billing
                                          type.
                                        type: object
                                        required:
                                          - code
                                          - quantity
                                        properties:
                                          code:
                                            type: string
                                            description: Sophos product code.
                                            pattern: >-
                                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                          quantity:
                                            description: Quantity for the number of seats.
                                            type: integer
                                    removed:
                                      type: array
                                      items:
                                        description: >-
                                          Default products for ordered billing
                                          type.
                                        type: object
                                        required:
                                          - code
                                          - quantity
                                        properties:
                                          code:
                                            type: string
                                            description: Sophos product code.
                                            pattern: >-
                                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                          quantity:
                                            description: Quantity for the number of seats.
                                            type: integer
                                    modified:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          code:
                                            type: string
                                            description: Sophos product code.
                                            pattern: >-
                                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                          fromQuantity:
                                            type: integer
                                          toQuantity:
                                            type: integer
                            status:
                              type: object
                              description: Account status type change.
                              required:
                                - to
                                - from
                              properties:
                                to:
                                  description: Status this account was changed to.
                                  type: string
                                  enum:
                                    - active
                                    - suspended
                                    - canceled
                                from:
                                  description: Status this account was changed from.
                                  type: string
                                  enum:
                                    - active
                                    - suspended
                                    - canceled
                            partner:
                              type: object
                              description: Partner change.
                              required:
                                - from
                              properties:
                                from:
                                  description: >-
                                    Tenant should be unlinked from this partner
                                    account.
                                  type: string
                                  format: uuid
                                to:
                                  description: >-
                                    Tenant should be linked to this partner
                                    account.
                                  type: string
                                  format: uuid
                  pages:
                    type: object
                    required:
                      - current
                      - size
                      - maxSize
                    properties:
                      current:
                        type: integer
                        description: The 1-based page number being returned.
                      size:
                        type: integer
                        description: The size of the page being returned.
                      total:
                        type: integer
                        description: >-
                          (Optional) The total number of pages that exist, if
                          pageTotal=true in the request.
                      items:
                        type: integer
                        description: (Optional) The total number of items across all pages.
                      maxSize:
                        type: integer
                        description: The maximum page size that can be requested.
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    post:
      tags:
        - Tenants
      summary: Make account changes
      description: Make tenant account changes.
      x-soph-permissions:
        - 'account_management:write'
        - 'license_management:write'
      operationId: postAccountAmendment
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: New account amendment request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Request to create a new billing amendment.
              required:
                - type
              properties:
                type:
                  type: string
                  description: Account change request type.
                  enum:
                    - billingChange
                    - resumeAccount
                    - cancelAccount
                    - suspendAccount
                    - unlinkFromPartner
                billingType:
                  type: string
                  description: Billing type.
                  enum:
                    - usage
                    - ordered
                    - trial
                products:
                  uniqueItems: true
                  type: array
                  description: Products list.
                  items:
                    description: Sophos product code with an optional quantity.
                    type: object
                    required:
                      - code
                    properties:
                      code:
                        type: string
                        description: Sophos product code.
                        pattern: >-
                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                      quantity:
                        description: Quantity for the number of seats.
                        type: integer
            example:
              type: billingChange
              billingType: usage
              products:
                - code: CIXA-MSP
                  quantity: 10
                - code: CEMA-MSP
                  quantity: 10
      responses:
        '200':
          description: Amendment object.
          content:
            application/json:
              schema:
                type: object
                description: A list of account amendments.
                required:
                  - items
                properties:
                  items:
                    type: array
                    description: List of account amendments.
                    items:
                      type: object
                      description: >-
                        Response from a request to create a new billing
                        amendment.
                      required:
                        - id
                        - type
                        - status
                        - createdAt
                        - changes
                      properties:
                        id:
                          type: string
                          description: Amendment ID.
                          format: uuid
                        status:
                          type: string
                          format: enum
                          description: Account amendment status.
                          enum:
                            - pending
                            - applied
                            - failed
                            - canceled
                        type:
                          type: string
                          description: Amendment request type.
                          enum:
                            - billingChange
                            - resumeAccount
                            - cancelAccount
                            - suspendAccount
                            - unlinkFromPartner
                        effectiveAt:
                          description: Date and time (UTC) when the amendment is effective.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        createdAt:
                          description: >-
                            Date and time (UTC) when the amendment request was
                            created.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        failedAt:
                          description: >-
                            Date and time (UTC) when the amendment request
                            failed.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        appliedAt:
                          description: >-
                            Date and time (UTC) when the amendment request was
                            applied.
                          example: '2019-09-23T12:02:01.700Z'
                          type: string
                          format: datetime
                        createdBy:
                          type: object
                          description: User or service principal that made the change.
                          required:
                            - id
                            - type
                          properties:
                            id:
                              description: Principal ID.
                              type: string
                            type:
                              type: string
                              enum:
                                - user
                                - service
                              description: Type of entity that made this change.
                            name:
                              description: Principal name.
                              type: string
                            accountType:
                              type: string
                              enum:
                                - partner
                                - tenant
                                - organization
                                - distributor
                              description: Account type for this principal.
                            accountId:
                              description: Account ID.
                              type: string
                              format: uuid
                        changes:
                          type: object
                          description: Change object from an amendment request.
                          properties:
                            billingType:
                              type: object
                              description: Billing type change object.
                              required:
                                - to
                                - from
                              properties:
                                to:
                                  description: Billing type that the tenant was changed to.
                                  type: string
                                  enum:
                                    - trial
                                    - ordered
                                    - usage
                                from:
                                  description: >-
                                    Billing type that the tenant was changed
                                    from.
                                  type: string
                                  enum:
                                    - trial
                                    - ordered
                                    - usage
                                    - term
                            products:
                              type: object
                              description: List of amended products.
                              properties:
                                usage:
                                  type: object
                                  properties:
                                    added:
                                      type: array
                                      items:
                                        type: string
                                        description: Sophos product code.
                                        pattern: >-
                                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                      uniqueItems: true
                                    removed:
                                      type: array
                                      items:
                                        type: string
                                        description: Sophos product code.
                                        pattern: >-
                                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                      uniqueItems: true
                                ordered:
                                  type: object
                                  properties:
                                    added:
                                      type: array
                                      items:
                                        description: >-
                                          Default products for ordered billing
                                          type.
                                        type: object
                                        required:
                                          - code
                                          - quantity
                                        properties:
                                          code:
                                            type: string
                                            description: Sophos product code.
                                            pattern: >-
                                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                          quantity:
                                            description: Quantity for the number of seats.
                                            type: integer
                                    removed:
                                      type: array
                                      items:
                                        description: >-
                                          Default products for ordered billing
                                          type.
                                        type: object
                                        required:
                                          - code
                                          - quantity
                                        properties:
                                          code:
                                            type: string
                                            description: Sophos product code.
                                            pattern: >-
                                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                          quantity:
                                            description: Quantity for the number of seats.
                                            type: integer
                                    modified:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          code:
                                            type: string
                                            description: Sophos product code.
                                            pattern: >-
                                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                          fromQuantity:
                                            type: integer
                                          toQuantity:
                                            type: integer
                            status:
                              type: object
                              description: Account status type change.
                              required:
                                - to
                                - from
                              properties:
                                to:
                                  description: Status this account was changed to.
                                  type: string
                                  enum:
                                    - active
                                    - suspended
                                    - canceled
                                from:
                                  description: Status this account was changed from.
                                  type: string
                                  enum:
                                    - active
                                    - suspended
                                    - canceled
                            partner:
                              type: object
                              description: Partner change.
                              required:
                                - from
                              properties:
                                from:
                                  description: >-
                                    Tenant should be unlinked from this partner
                                    account.
                                  type: string
                                  format: uuid
                                to:
                                  description: >-
                                    Tenant should be linked to this partner
                                    account.
                                  type: string
                                  format: uuid
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/tenants/{tenantId}/account-amendments/{accountAmendmentId}':
    get:
      tags:
        - Tenants
      summary: Get amendment by ID
      description: Get account amendment by ID.
      x-soph-permissions:
        - 'account_management:read'
        - 'license_management:read'
      operationId: getAccountAmendmentById
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: accountAmendmentId
          in: path
          description: Account amendment ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Existing account amendment.
          content:
            application/json:
              schema:
                type: object
                description: Response from a request to create a new billing amendment.
                required:
                  - id
                  - type
                  - status
                  - createdAt
                  - changes
                properties:
                  id:
                    type: string
                    description: Amendment ID.
                    format: uuid
                  status:
                    type: string
                    format: enum
                    description: Account amendment status.
                    enum:
                      - pending
                      - applied
                      - failed
                      - canceled
                  type:
                    type: string
                    description: Amendment request type.
                    enum:
                      - billingChange
                      - resumeAccount
                      - cancelAccount
                      - suspendAccount
                      - unlinkFromPartner
                  effectiveAt:
                    description: Date and time (UTC) when the amendment is effective.
                    example: '2019-09-23T12:02:01.700Z'
                    type: string
                    format: datetime
                  createdAt:
                    description: >-
                      Date and time (UTC) when the amendment request was
                      created.
                    example: '2019-09-23T12:02:01.700Z'
                    type: string
                    format: datetime
                  failedAt:
                    description: Date and time (UTC) when the amendment request failed.
                    example: '2019-09-23T12:02:01.700Z'
                    type: string
                    format: datetime
                  appliedAt:
                    description: >-
                      Date and time (UTC) when the amendment request was
                      applied.
                    example: '2019-09-23T12:02:01.700Z'
                    type: string
                    format: datetime
                  createdBy:
                    type: object
                    description: User or service principal that made the change.
                    required:
                      - id
                      - type
                    properties:
                      id:
                        description: Principal ID.
                        type: string
                      type:
                        type: string
                        enum:
                          - user
                          - service
                        description: Type of entity that made this change.
                      name:
                        description: Principal name.
                        type: string
                      accountType:
                        type: string
                        enum:
                          - partner
                          - tenant
                          - organization
                          - distributor
                        description: Account type for this principal.
                      accountId:
                        description: Account ID.
                        type: string
                        format: uuid
                  changes:
                    type: object
                    description: Change object from an amendment request.
                    properties:
                      billingType:
                        type: object
                        description: Billing type change object.
                        required:
                          - to
                          - from
                        properties:
                          to:
                            description: Billing type that the tenant was changed to.
                            type: string
                            enum:
                              - trial
                              - ordered
                              - usage
                          from:
                            description: Billing type that the tenant was changed from.
                            type: string
                            enum:
                              - trial
                              - ordered
                              - usage
                              - term
                      products:
                        type: object
                        description: List of amended products.
                        properties:
                          usage:
                            type: object
                            properties:
                              added:
                                type: array
                                items:
                                  type: string
                                  description: Sophos product code.
                                  pattern: >-
                                    ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                uniqueItems: true
                              removed:
                                type: array
                                items:
                                  type: string
                                  description: Sophos product code.
                                  pattern: >-
                                    ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                uniqueItems: true
                          ordered:
                            type: object
                            properties:
                              added:
                                type: array
                                items:
                                  description: Default products for ordered billing type.
                                  type: object
                                  required:
                                    - code
                                    - quantity
                                  properties:
                                    code:
                                      type: string
                                      description: Sophos product code.
                                      pattern: >-
                                        ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                    quantity:
                                      description: Quantity for the number of seats.
                                      type: integer
                              removed:
                                type: array
                                items:
                                  description: Default products for ordered billing type.
                                  type: object
                                  required:
                                    - code
                                    - quantity
                                  properties:
                                    code:
                                      type: string
                                      description: Sophos product code.
                                      pattern: >-
                                        ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                    quantity:
                                      description: Quantity for the number of seats.
                                      type: integer
                              modified:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    code:
                                      type: string
                                      description: Sophos product code.
                                      pattern: >-
                                        ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                                    fromQuantity:
                                      type: integer
                                    toQuantity:
                                      type: integer
                      status:
                        type: object
                        description: Account status type change.
                        required:
                          - to
                          - from
                        properties:
                          to:
                            description: Status this account was changed to.
                            type: string
                            enum:
                              - active
                              - suspended
                              - canceled
                          from:
                            description: Status this account was changed from.
                            type: string
                            enum:
                              - active
                              - suspended
                              - canceled
                      partner:
                        type: object
                        description: Partner change.
                        required:
                          - from
                        properties:
                          from:
                            description: >-
                              Tenant should be unlinked from this partner
                              account.
                            type: string
                            format: uuid
                          to:
                            description: Tenant should be linked to this partner account.
                            type: string
                            format: uuid
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    delete:
      tags:
        - Tenants
      summary: Delete amendment
      description: Cancel a pending account amendment.
      x-soph-permissions:
        - 'account_management:write'
        - 'license_management:write'
      operationId: cancelPendingAmendment
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: accountAmendmentId
          in: path
          description: Account amendment ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Pending account amendment canceled.
          content:
            application/json:
              schema:
                type: object
                description: Delete Response.
                required:
                  - canceled
                properties:
                  canceled:
                    description: Whether the amendment was succesfully canceled.
                    type: boolean
        '404':
          description: Can't find account amendment with this ID.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '422':
          description: Can't process the account amendment at this moment.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/tenants/{tenantId}/product-selection':
    post:
      tags:
        - Tenants
      summary: Select products
      description: Update tenant product selection.
      x-soph-permissions:
        - 'license_management:write'
      operationId: postTenantProductSelection
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: tenantId
          in: path
          description: Tenant ID.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Tenant product selection request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Request to update tenant product selection.
              required:
                - products
              properties:
                products:
                  uniqueItems: true
                  type: array
                  description: Products list.
                  items:
                    description: Sophos product code with an optional quantity.
                    type: object
                    required:
                      - code
                    properties:
                      code:
                        type: string
                        description: Sophos product code.
                        pattern: >-
                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                      quantity:
                        description: Quantity for the number of seats.
                        type: integer
                autoAssignServer:
                  type: boolean
                  default: false
                  description: Auto assign server products.
                autoAssignEndpoint:
                  type: boolean
                  default: false
                  description: Auto assign endpoint products.
                previewOnly:
                  type: boolean
                  default: false
                  description: Preview product selection.
            example:
              products:
                - code: CIXA-MSP
                  quantity: 10
                - code: CEMA-MSP
                  quantity: 10
              autoAssignServer: false
              autoAssignEndpoint: true
              previewOnly: false
      responses:
        '200':
          description: Tenant products.
          content:
            application/json:
              schema:
                type: object
                description: Response to update tenant product selection.
                required:
                  - products
                properties:
                  products:
                    uniqueItems: true
                    type: array
                    description: Products list.
                    items:
                      description: Sophos product code with an optional quantity.
                      type: object
                      required:
                        - code
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        quantity:
                          description: Quantity for the number of seats.
                          type: integer
                  productChanges:
                    type: object
                    description: Product changes as a result of product selection.
                    properties:
                      added:
                        uniqueItems: true
                        type: array
                        description: Products list.
                        items:
                          description: Sophos product code with an optional quantity.
                          type: object
                          required:
                            - code
                          properties:
                            code:
                              type: string
                              description: Sophos product code.
                              pattern: >-
                                ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                            quantity:
                              description: Quantity for the number of seats.
                              type: integer
                      removed:
                        uniqueItems: true
                        type: array
                        description: Products list.
                        items:
                          description: Sophos product code with an optional quantity.
                          type: object
                          required:
                            - code
                          properties:
                            code:
                              type: string
                              description: Sophos product code.
                              pattern: >-
                                ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                            quantity:
                              description: Quantity for the number of seats.
                              type: integer
                  autoAssignServer:
                    type: boolean
                    default: false
                    description: Auto assign server products.
                  autoAssignEndpoint:
                    type: boolean
                    default: false
                    description: Auto assign endpoint products.
                  previewOnly:
                    type: boolean
                    default: false
                    description: Preview product selection.
              example:
                products:
                  - code: CIXA-MSP
                    quantity: 1
                  - code: CEMA-MSP
                    quantity: 1
                productChanges:
                  added:
                    items:
                      - CIXA-MSP
                  removed:
                    items:
                      - WIFI_STANDARD
                autoAssignServer: false
                autoAssignEndpoint: true
                previewOnly: false
        '400':
          description: There is a problem with this request.
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    required:
                      - error
                    properties:
                      error:
                        type: string
                      message:
                        type: string
                      correlationId:
                        type: string
                        format: uuid
                      code:
                        type: string
                      createdAt:
                        type: string
                        format: datetime
                      requestId:
                        type: string
                        format: uuid
                      docUrl:
                        type: string
                        format: uri
                type: object
                properties:
                  errorDetails:
                    type: object
                    description: Error Response object for Product Selection API failure.
                    properties:
                      prerequisites:
                        type: array
                        description: A set of product and required prerequisites products.
                        items:
                          type: object
                          description: Product Compatibility object reference.
                          required:
                            - code
                            - products
                          properties:
                            code:
                              type: string
                              description: The product code.
                            products:
                              type: array
                              description: List of product codes.
                              items:
                                type: string
                              uniqueItems: true
                        uniqueItems: true
                      conflicts:
                        type: array
                        description: A set of product and conflicting products.
                        items:
                          type: object
                          description: Product Compatibility object reference.
                          required:
                            - code
                            - products
                          properties:
                            code:
                              type: string
                              description: The product code.
                            products:
                              type: array
                              description: List of product codes.
                              items:
                                type: string
                              uniqueItems: true
                        uniqueItems: true
                      missingMasterProducts:
                        type: array
                        description: List of product codes.
                        items:
                          type: string
                        uniqueItems: true
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  /roles:
    get:
      x-soph-permissions: 'partner-role:list'
      summary: List all roles
      description: List all partner roles.
      operationId: listPartnerRoles
      tags:
        - Partner role management
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - in: query
          name: type
          description: Role type.
          required: false
          schema:
            description: Role type.
            type: string
            format: enum
            enum:
              - predefined
              - custom
        - in: query
          name: principalType
          description: Principal type of role.
          required: false
          schema:
            description: Principal type of role.
            type: string
            format: enum
            enum:
              - user
              - service
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: List of partner roles.
          content:
            application/json:
              schema:
                type: object
                description: List of roles.
                required:
                  - items
                properties:
                  items:
                    type: array
                    description: List of roles.
                    items:
                      type: object
                      description: A partner role.
                      required:
                        - id
                        - name
                        - type
                        - principalType
                        - permissionSets
                      properties:
                        id:
                          description: Role UUID.
                          type: string
                          format: uuid
                        name:
                          description: Role name.
                          type: string
                        description:
                          description: Role description.
                          type: string
                        type:
                          description: Role type.
                          type: string
                          format: enum
                          enum:
                            - predefined
                            - custom
                        principalType:
                          description: Principal type of role.
                          type: string
                          format: enum
                          enum:
                            - user
                            - service
                        permissionSets:
                          description: List of permission sets.
                          type: array
                          items:
                            type: string
                          uniqueItems: true
                          minItems: 1
                        createdAt:
                          description: Date and time the partner role was created.
                          type: string
                          format: datetime
                        updatedAt:
                          description: Date and time the partner role was last updated.
                          type: string
                          format: datetime
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    post:
      x-soph-permissions: 'partner-role:create'
      summary: Create new role
      description: Create a new partner role.
      operationId: createPartnerRole
      tags:
        - Partner role management
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      requestBody:
        description: Request to create a new partner role.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: New partner role.
              required:
                - name
                - permissionSets
                - principalType
              properties:
                name:
                  description: Role name.
                  type: string
                  maxLength: 100
                description:
                  description: Role description.
                  type: string
                  maxLength: 1000
                principalType:
                  description: Principal type of role.
                  type: string
                  format: enum
                  enum:
                    - user
                    - service
                permissionSets:
                  description: List of permission sets.
                  type: array
                  items:
                    type: string
                  uniqueItems: true
                  minItems: 1
            examples:
              NewRoleRequest:
                value:
                  name: Partner custom role
                  description: Partner custom role
                  principalType: user
                  permissionSets:
                    - partner_admin
                    - endpoint_product_admin
      responses:
        '201':
          description: Requested role created.
          content:
            application/json:
              schema:
                type: object
                description: A partner role.
                required:
                  - id
                  - name
                  - type
                  - principalType
                  - permissionSets
                properties:
                  id:
                    description: Role UUID.
                    type: string
                    format: uuid
                  name:
                    description: Role name.
                    type: string
                  description:
                    description: Role description.
                    type: string
                  type:
                    description: Role type.
                    type: string
                    format: enum
                    enum:
                      - predefined
                      - custom
                  principalType:
                    description: Principal type of role.
                    type: string
                    format: enum
                    enum:
                      - user
                      - service
                  permissionSets:
                    description: List of permission sets.
                    type: array
                    items:
                      type: string
                    uniqueItems: true
                    minItems: 1
                  createdAt:
                    description: Date and time the partner role was created.
                    type: string
                    format: datetime
                  updatedAt:
                    description: Date and time the partner role was last updated.
                    type: string
                    format: datetime
        '409':
          description: Role name already in use or is a pre-defined role name.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/roles/{roleId}':
    get:
      x-soph-permissions: 'partner-role:read'
      summary: Get role by ID
      description: Get partner role by ID.
      operationId: getPartnerRoleById
      tags:
        - Partner role management
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - in: path
          name: roleId
          description: Role ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Details of the requested role.
          content:
            application/json:
              schema:
                type: object
                description: A partner role.
                required:
                  - id
                  - name
                  - type
                  - principalType
                  - permissionSets
                properties:
                  id:
                    description: Role UUID.
                    type: string
                    format: uuid
                  name:
                    description: Role name.
                    type: string
                  description:
                    description: Role description.
                    type: string
                  type:
                    description: Role type.
                    type: string
                    format: enum
                    enum:
                      - predefined
                      - custom
                  principalType:
                    description: Principal type of role.
                    type: string
                    format: enum
                    enum:
                      - user
                      - service
                  permissionSets:
                    description: List of permission sets.
                    type: array
                    items:
                      type: string
                    uniqueItems: true
                    minItems: 1
                  createdAt:
                    description: Date and time the partner role was created.
                    type: string
                    format: datetime
                  updatedAt:
                    description: Date and time the partner role was last updated.
                    type: string
                    format: datetime
        '404':
          description: Can't find role.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    delete:
      x-soph-permissions: 'partner-role:delete'
      summary: Delete role by ID
      description: Delete a partner role by ID.
      operationId: deletePartnerRoleById
      tags:
        - Partner role management
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - in: path
          name: roleId
          description: Role ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Requested role deleted.
          content:
            application/json:
              schema:
                type: object
                description: Delete response.
                properties:
                  deleted:
                    type: boolean
        '409':
          description: You can't delete a role assigned to an admin.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    patch:
      x-soph-permissions: 'partner-role:update'
      summary: Patch role
      description: Patch an existing partner role.
      operationId: patchPartnerRole
      tags:
        - Partner role management
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - in: path
          name: roleId
          description: Role ID.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Json Merge Patch request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Patch request for a role.
              properties:
                name:
                  description: Role name.
                  type: string
                  maxLength: 100
                description:
                  description: Role description.
                  type: string
                  maxLength: 1000
                permissionSets:
                  description: Permission sets to be updated.
                  oneOf:
                    - allOf:
                        - type: object
                          description: Base class for permission sets.
                        - type: object
                          description: Set of permissions to operate on.
                          properties:
                            permissionSets:
                              type: array
                              items:
                                type: string
                              uniqueItems: true
                              description: Set of permissions to operate on.
                    - allOf:
                        - type: object
                          description: Base class for permission sets.
                        - type: object
                          description: >-
                            Update permission set by adding or removing
                            permissions.
                          properties:
                            add:
                              type: array
                              items:
                                type: string
                              uniqueItems: true
                              description: Permissions to add.
                            remove:
                              type: array
                              items:
                                type: string
                              uniqueItems: true
                              description: Permissions to remove.
            examples:
              RolePatchRequest:
                value:
                  name: Partner custom role
                  description: Partner custom role
                  permissionSets:
                    - partner_admin
                    - endpoint_product_admin
      responses:
        '200':
          description: Updated role.
          content:
            application/json:
              schema:
                type: object
                description: A partner role.
                required:
                  - id
                  - name
                  - type
                  - principalType
                  - permissionSets
                properties:
                  id:
                    description: Role UUID.
                    type: string
                    format: uuid
                  name:
                    description: Role name.
                    type: string
                  description:
                    description: Role description.
                    type: string
                  type:
                    description: Role type.
                    type: string
                    format: enum
                    enum:
                      - predefined
                      - custom
                  principalType:
                    description: Principal type of role.
                    type: string
                    format: enum
                    enum:
                      - user
                      - service
                  permissionSets:
                    description: List of permission sets.
                    type: array
                    items:
                      type: string
                    uniqueItems: true
                    minItems: 1
                  createdAt:
                    description: Date and time the partner role was created.
                    type: string
                    format: datetime
                  updatedAt:
                    description: Date and time the partner role was last updated.
                    type: string
                    format: datetime
        '404':
          description: No role found with given ID.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '409':
          description: Role name already in use or is a pre-defined role name.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  /roles/permission-sets:
    get:
      x-soph-permissions: 'partner-permission-set:list'
      summary: Get permission sets
      description: Get permission set details.
      operationId: getRolePermissionSet
      tags:
        - Partner role management
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - in: query
          name: type
          description: Permission set type.
          required: false
          schema:
            description: Permission set type.
            type: string
            format: enum
            enum:
              - base
              - product
              - setting
        - in: query
          name: product
          description: Filter permission sets associated with given product name.
          required: false
          schema:
            description: Product identifier.
            type: string
            format: enum
            enum:
              - endpoint
              - server
              - mobile
              - encryption
              - emailGateway
              - webGateway
              - phishThreat
              - wireless
              - firewall
              - optix
              - ztna
        - in: query
          name: access
          description: Access level of permission set.
          required: false
          schema:
            description: Access level of a permission set.
            type: string
            format: enum
            enum:
              - admin
              - helpdesk
              - readOnly
        - in: query
          name: allowedInCustomRole
          description: Filter permissions sets allowed in custom roles.
          required: false
          schema:
            type: boolean
        - in: query
          name: principalType
          description: Principal type of role.
          required: false
          schema:
            description: Principal type of role.
            type: string
            format: enum
            enum:
              - user
              - service
      responses:
        '200':
          description: List of permission sets.
          content:
            application/json:
              schema:
                type: object
                description: List of permission sets.
                required:
                  - items
                properties:
                  items:
                    type: array
                    description: List of permission sets.
                    items:
                      type: object
                      description: Permission set.
                      required:
                        - id
                        - name
                        - type
                        - principalTypes
                        - allowedInCustomRoles
                      properties:
                        id:
                          description: Permission set identifier.
                          type: string
                        name:
                          description: Permission set name.
                          type: string
                        description:
                          description: Permission set description.
                          type: string
                        type:
                          description: Permission set type.
                          type: string
                          format: enum
                          enum:
                            - base
                            - product
                            - setting
                        access:
                          description: Access level of a permission set.
                          type: string
                          format: enum
                          enum:
                            - admin
                            - helpdesk
                            - readOnly
                        principalTypes:
                          description: Principal types for which permission set is allowed.
                          type: array
                          items:
                            description: Principal type of role.
                            type: string
                            format: enum
                            enum:
                              - user
                              - service
                        products:
                          description: >-
                            List of products associated to a permission set of
                            type product.
                          type: array
                          items:
                            description: Product identifier.
                            type: string
                            format: enum
                            enum:
                              - endpoint
                              - server
                              - mobile
                              - encryption
                              - emailGateway
                              - webGateway
                              - phishThreat
                              - wireless
                              - firewall
                              - optix
                              - ztna
                          uniqueItems: true
                        allowedInCustomRoles:
                          description: >-
                            Signifies if permission set is allowed in a custom
                            role.
                          type: boolean
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  /admins:
    get:
      summary: List all admins
      description: List all partner admins.
      x-soph-permissions: 'account_management:read'
      operationId: getPartnerAdmins
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - in: query
          name: page
          required: false
          schema:
            type: integer
            default: 1
          description: 'The page number to fetch, starting with 1.'
        - in: query
          name: pageSize
          required: false
          schema:
            type: integer
            default: 50
          description: The size of the page requested.
        - in: query
          name: pageTotal
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Whether the number of pages should be calculated and returned in the
            response.
        - in: query
          name: sort
          description: Defines how to sort the data.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              pattern: '(^[^:]+$)|(^[^:]+:(asc|desc)$)'
          examples:
            OneFieldDefaultSort:
              value:
                - lastSeenAt
            OneFieldSort:
              value:
                - 'lastSeenAt:asc'
            MoreThanOneTermSort:
              value:
                - 'lastSeenAt:asc'
                - 'hostname:desc'
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - in: query
          name: search
          description: Search for items that match the given terms.
          required: false
          schema:
            type: string
        - in: query
          name: email
          description: Search by email.
          required: false
          schema:
            type: string
        - in: query
          name: roleId
          description: Search by role ID.
          required: false
          schema:
            type: string
            format: uuid
        - in: query
          name: withAccessToTenant
          description: Search for admins that have access to the given tenant.
          required: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Paged array of partner admins.
          content:
            application/json:
              schema:
                type: object
                description: Page of partner administrators.
                required:
                  - items
                  - pages
                properties:
                  items:
                    description: Partner administrators.
                    type: array
                    items:
                      type: object
                      description: Partner administrator.
                      allOf:
                        - type: object
                          description: Administrator.
                          required:
                            - id
                            - username
                            - profile
                            - active
                            - primary
                            - roleAssignments
                          properties:
                            id:
                              description: Administrator ID.
                              type: string
                              format: uuid
                            username:
                              description: Administrator username (email).
                              type: string
                              format: email
                            profile:
                              type: object
                              description: Profile information for partner administrator.
                              required:
                                - firstName
                                - lastName
                                - name
                              properties:
                                name:
                                  description: Full name.
                                  type: string
                                firstName:
                                  description: First name.
                                  type: string
                                lastName:
                                  description: Last name.
                                  type: string
                                phone:
                                  description: Phone number.
                                  type: string
                                mobile:
                                  description: Mobile phone number.
                                  type: string
                                fax:
                                  description: Fax number.
                                  type: string
                            active:
                              description: Whether the administrator is active.
                              type: boolean
                            primary:
                              description: >-
                                Whether this is the primary administrator for
                                the account.
                              type: boolean
                              default: false
                            roleAssignments:
                              description: Administrator's role assignments.
                              type: array
                              items:
                                type: object
                                description: Role assignment.
                                required:
                                  - id
                                  - roleId
                                  - scope
                                properties:
                                  id:
                                    description: Role assignment ID.
                                    type: string
                                    format: uuid
                                  roleId:
                                    description: Role ID.
                                    type: string
                                    format: uuid
                                  roleName:
                                    description: Role name.
                                    type: string
                                  scope:
                                    type: object
                                    description: Role assignment scope.
                                    required:
                                      - type
                                    properties:
                                      type:
                                        type: string
                                        description: Role assignment scope type.
                                        enum:
                                          - tenant
                                          - allManagedTenants
                                          - self
                                          - tenantGroup
                                      id:
                                        description: >-
                                          Tenant ID. Optional or not present when
                                          `type` is `allManagedTenants` or `self`.
                                        type: string
                                        format: uuid
                                      name:
                                        description: >-
                                          Tenant name. Optional or not present
                                          when `type` is `allManagedTenants` or
                                          `self`.
                                        type: string
                  pages:
                    type: object
                    required:
                      - current
                      - size
                      - maxSize
                    properties:
                      current:
                        type: integer
                        description: The 1-based page number being returned.
                      size:
                        type: integer
                        description: The size of the page being returned.
                      total:
                        type: integer
                        description: >-
                          (Optional) The total number of pages that exist, if
                          pageTotal=true in the request.
                      items:
                        type: integer
                        description: (Optional) The total number of items across all pages.
                      maxSize:
                        type: integer
                        description: The maximum page size that can be requested.
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    post:
      summary: Create new admin
      description: Create a new partner administrator.
      x-soph-permissions: 'account_management:write'
      operationId: createPartnerAdmin
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: New admin creation request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: New partner administrator.
              required:
                - username
                - profile
              properties:
                username:
                  description: Administrator username (email).
                  type: string
                  format: email
                profile:
                  type: object
                  description: Profile information for partner administrator.
                  required:
                    - firstName
                    - lastName
                    - name
                  properties:
                    name:
                      description: Full name.
                      type: string
                    firstName:
                      description: First name.
                      type: string
                    lastName:
                      description: Last name.
                      type: string
                    phone:
                      description: Phone number.
                      type: string
                    mobile:
                      description: Mobile phone number.
                      type: string
                    fax:
                      description: Fax number.
                      type: string
                roleAssignments:
                  description: Role assignments.
                  type: array
                  items:
                    type: object
                    description: New role assignment request.
                    required:
                      - roleId
                      - scope
                    properties:
                      roleId:
                        description: Role ID.
                        type: string
                        format: uuid
                      scope:
                        type: object
                        description: Role assignment scope.
                        required:
                          - type
                        properties:
                          type:
                            type: string
                            description: Role assignment scope type.
                            enum:
                              - tenant
                              - allManagedTenants
                              - self
                              - tenantGroup
                          id:
                            description: >-
                              Tenant ID. Optional or not present when `type` is
                              `allManagedTenants` or `self`.
                            type: string
                            format: uuid
            examples:
              NewPartnerAdminRequest:
                value:
                  username: john.smith@example.com
                  profile:
                    name: John J. Smith
                    firstName: John
                    lastName: Smith
                  roleAssignments:
                    - id: 0b8f2624-b054-45e0-923e-6527d9054342
                      roleId: 70617274-6e65-7273-7570-657261646d69
                      scope:
                        type: self
      responses:
        '201':
          description: Requested admin created.
          content:
            application/json:
              schema:
                type: object
                description: Partner administrator.
                allOf:
                  - type: object
                    description: Administrator.
                    required:
                      - id
                      - username
                      - profile
                      - active
                      - primary
                      - roleAssignments
                    properties:
                      id:
                        description: Administrator ID.
                        type: string
                        format: uuid
                      username:
                        description: Administrator username (email).
                        type: string
                        format: email
                      profile:
                        type: object
                        description: Profile information for partner administrator.
                        required:
                          - firstName
                          - lastName
                          - name
                        properties:
                          name:
                            description: Full name.
                            type: string
                          firstName:
                            description: First name.
                            type: string
                          lastName:
                            description: Last name.
                            type: string
                          phone:
                            description: Phone number.
                            type: string
                          mobile:
                            description: Mobile phone number.
                            type: string
                          fax:
                            description: Fax number.
                            type: string
                      active:
                        description: Whether the administrator is active.
                        type: boolean
                      primary:
                        description: >-
                          Whether this is the primary administrator for the
                          account.
                        type: boolean
                        default: false
                      roleAssignments:
                        description: Administrator's role assignments.
                        type: array
                        items:
                          type: object
                          description: Role assignment.
                          required:
                            - id
                            - roleId
                            - scope
                          properties:
                            id:
                              description: Role assignment ID.
                              type: string
                              format: uuid
                            roleId:
                              description: Role ID.
                              type: string
                              format: uuid
                            roleName:
                              description: Role name.
                              type: string
                            scope:
                              type: object
                              description: Role assignment scope.
                              required:
                                - type
                              properties:
                                type:
                                  type: string
                                  description: Role assignment scope type.
                                  enum:
                                    - tenant
                                    - allManagedTenants
                                    - self
                                    - tenantGroup
                                id:
                                  description: >-
                                    Tenant ID. Optional or not present when
                                    `type` is `allManagedTenants` or `self`.
                                  type: string
                                  format: uuid
                                name:
                                  description: >-
                                    Tenant name. Optional or not present when
                                    `type` is `allManagedTenants` or `self`.
                                  type: string
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '409':
          description: Email address already in use.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/admins/{adminId}':
    get:
      summary: Get admin by ID
      description: Get partner administrator details by ID.
      x-soph-permissions: 'account_management:read'
      operationId: getPartnerAdmin
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: adminId
          in: path
          description: Partner administrator ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Details of the requested partner administrator.
          content:
            application/json:
              schema:
                type: object
                description: Partner administrator.
                allOf:
                  - type: object
                    description: Administrator.
                    required:
                      - id
                      - username
                      - profile
                      - active
                      - primary
                      - roleAssignments
                    properties:
                      id:
                        description: Administrator ID.
                        type: string
                        format: uuid
                      username:
                        description: Administrator username (email).
                        type: string
                        format: email
                      profile:
                        type: object
                        description: Profile information for partner administrator.
                        required:
                          - firstName
                          - lastName
                          - name
                        properties:
                          name:
                            description: Full name.
                            type: string
                          firstName:
                            description: First name.
                            type: string
                          lastName:
                            description: Last name.
                            type: string
                          phone:
                            description: Phone number.
                            type: string
                          mobile:
                            description: Mobile phone number.
                            type: string
                          fax:
                            description: Fax number.
                            type: string
                      active:
                        description: Whether the administrator is active.
                        type: boolean
                      primary:
                        description: >-
                          Whether this is the primary administrator for the
                          account.
                        type: boolean
                        default: false
                      roleAssignments:
                        description: Administrator's role assignments.
                        type: array
                        items:
                          type: object
                          description: Role assignment.
                          required:
                            - id
                            - roleId
                            - scope
                          properties:
                            id:
                              description: Role assignment ID.
                              type: string
                              format: uuid
                            roleId:
                              description: Role ID.
                              type: string
                              format: uuid
                            roleName:
                              description: Role name.
                              type: string
                            scope:
                              type: object
                              description: Role assignment scope.
                              required:
                                - type
                              properties:
                                type:
                                  type: string
                                  description: Role assignment scope type.
                                  enum:
                                    - tenant
                                    - allManagedTenants
                                    - self
                                    - tenantGroup
                                id:
                                  description: >-
                                    Tenant ID. Optional or not present when
                                    `type` is `allManagedTenants` or `self`.
                                  type: string
                                  format: uuid
                                name:
                                  description: >-
                                    Tenant name. Optional or not present when
                                    `type` is `allManagedTenants` or `self`.
                                  type: string
        '404':
          description: Can't find admin.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    delete:
      x-soph-permissions: 'account_management:write'
      summary: Delete an admin
      description: >-
        Delete a PDB Admin for Central while internally just revoking PDB
        access.
      operationId: deletePartnerAdminById
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: adminId
          in: path
          description: Partner administrator ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '202':
          description: The request to delete the admin has been accepted by the server.
          content:
            application/json:
              schema:
                type: object
                description: Response to a previous request to delete an item.
                additionalProperties: false
              example: {}
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
              example:
                error: badRequest
                message: Bad request.
                correlationId: 715be156-6561-4fc4-8cbe-11a5a49ce440
                requestId: 2dd71c0b-e5fb-41ba-ba15-367eefee54ee
        '401':
          description: Authentication required.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
              example:
                error: notAuthorized
                message: Not authorized.
                correlationId: 714e3cf6-75b1-4a6a-b4fe-dbee2e6a0a58
                requestId: 155a1b5e-0e1e-4809-9b00-f7c66be1ace9
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
              example:
                error: forbidden
                message: Forbidden.
                correlationId: 1b697030-1c57-47a8-8051-c9febfa8d0e7
                requestId: 56c9b423-0714-42ec-8e77-1cc5a09dec7c
        '404':
          description: Not Found.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
              example:
                error: notFound
                message: Resource not found.
                correlationId: bc0047d4-9aad-4501-8c4d-fb9ed8436d39
                requestId: 9ec0a3cd-0cd7-4e60-a218-f469a46c1577
        '409':
          description: Can't remove last Super admin.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
              example:
                error: resourceConflict
                message: Resource conflict.
                correlationId: da494ea1-ad61-4371-9b77-d8e68c484b95
                requestId: 3526d1e5-2996-4245-98ff-81226da03c56
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
              example:
                error: internalServerError
                message: Internal Server Error.
                correlationId: df88bf88-471b-49d6-8a5e-07a26964d2ec
                requestId: 85073630-8ad8-46da-bf64-cb1e8b6f864b
  '/admins/{adminId}/role-assignments':
    get:
      summary: List all roles
      description: Get the list of role assignments for given admin.
      x-soph-permissions: 'account_management:read'
      operationId: getAdminRoleAssignments
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: adminId
          in: path
          description: Partner administrator ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: A list of role assignments for an admin.
          content:
            application/json:
              schema:
                type: object
                description: List of role assignments.
                required:
                  - items
                properties:
                  items:
                    description: Role assignments.
                    type: array
                    items:
                      type: object
                      description: Role assignment.
                      required:
                        - id
                        - roleId
                        - scope
                      properties:
                        id:
                          description: Role assignment ID.
                          type: string
                          format: uuid
                        roleId:
                          description: Role ID.
                          type: string
                          format: uuid
                        roleName:
                          description: Role name.
                          type: string
                        scope:
                          type: object
                          description: Role assignment scope.
                          required:
                            - type
                          properties:
                            type:
                              type: string
                              description: Role assignment scope type.
                              enum:
                                - tenant
                                - allManagedTenants
                                - self
                                - tenantGroup
                            id:
                              description: >-
                                Tenant ID. Optional or not present when `type`
                                is `allManagedTenants` or `self`.
                              type: string
                              format: uuid
                            name:
                              description: >-
                                Tenant name. Optional or not present when `type`
                                is `allManagedTenants` or `self`.
                              type: string
                    uniqueItems: true
        '404':
          description: Can't find admin.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    post:
      summary: Assign a role
      description: Assign a role to a partner administrator.
      x-soph-permissions: 'account_management:write'
      operationId: createAdminRoleAssignment
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: adminId
          in: path
          description: Partner administrator ID.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: New role assignment request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: New role assignment request.
              required:
                - roleId
                - scope
              properties:
                roleId:
                  description: Role ID.
                  type: string
                  format: uuid
                scope:
                  type: object
                  description: Role assignment scope.
                  required:
                    - type
                  properties:
                    type:
                      type: string
                      description: Role assignment scope type.
                      enum:
                        - tenant
                        - allManagedTenants
                        - self
                        - tenantGroup
                    id:
                      description: >-
                        Tenant ID. Optional or not present when `type` is
                        `allManagedTenants` or `self`.
                      type: string
                      format: uuid
            examples:
              NewRoleAssignmentRequest:
                value:
                  roleId: 2b8f2624-b054-45e0-923e-6527d9054342
                  scope:
                    type: self
      responses:
        '201':
          description: Requested assignment created.
          content:
            application/json:
              schema:
                type: object
                description: Role assignment.
                required:
                  - id
                  - roleId
                  - scope
                properties:
                  id:
                    description: Role assignment ID.
                    type: string
                    format: uuid
                  roleId:
                    description: Role ID.
                    type: string
                    format: uuid
                  roleName:
                    description: Role name.
                    type: string
                  scope:
                    type: object
                    description: Role assignment scope.
                    required:
                      - type
                    properties:
                      type:
                        type: string
                        description: Role assignment scope type.
                        enum:
                          - tenant
                          - allManagedTenants
                          - self
                          - tenantGroup
                      id:
                        description: >-
                          Tenant ID. Optional or not present when `type` is
                          `allManagedTenants` or `self`.
                        type: string
                        format: uuid
                      name:
                        description: >-
                          Tenant name. Optional or not present when `type` is
                          `allManagedTenants` or `self`.
                        type: string
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '404':
          description: Can't find admin or role.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/admins/{adminId}/role-assignments/{assignmentId}':
    get:
      summary: Get role by ID
      description: Get partner administrator role assignment by ID.
      x-soph-permissions: 'account_management:read'
      operationId: getAdminRoleAssignmentById
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: adminId
          in: path
          description: Partner administrator ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: assignmentId
          in: path
          description: Role assignment ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Details of role assignment.
          content:
            application/json:
              schema:
                type: object
                description: Role assignment.
                required:
                  - id
                  - roleId
                  - scope
                properties:
                  id:
                    description: Role assignment ID.
                    type: string
                    format: uuid
                  roleId:
                    description: Role ID.
                    type: string
                    format: uuid
                  roleName:
                    description: Role name.
                    type: string
                  scope:
                    type: object
                    description: Role assignment scope.
                    required:
                      - type
                    properties:
                      type:
                        type: string
                        description: Role assignment scope type.
                        enum:
                          - tenant
                          - allManagedTenants
                          - self
                          - tenantGroup
                      id:
                        description: >-
                          Tenant ID. Optional or not present when `type` is
                          `allManagedTenants` or `self`.
                        type: string
                        format: uuid
                      name:
                        description: >-
                          Tenant name. Optional or not present when `type` is
                          `allManagedTenants` or `self`.
                        type: string
        '404':
          description: Can't find admin or assignment.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    delete:
      summary: Remove a role
      description: Remove role assignment from an admin.
      x-soph-permissions: 'account_management:write'
      operationId: removeAdminRoleAssignmentById
      tags:
        - Partner Admins
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: adminId
          in: path
          description: Partner administrator ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: assignmentId
          in: path
          description: Role assignment ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Role assignment removed.
          content:
            application/json:
              schema:
                type: object
                description: Response to the request to delete a role assignment.
                additionalProperties: false
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  /provisioning/available-products:
    get:
      tags:
        - Provisioning
      summary: Available products
      description: List of available products.
      x-soph-permissions:
        - 'account_management:read'
        - 'license_management:read'
      operationId: listProducts
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of available products.
          content:
            application/json:
              schema:
                type: object
                description: Products list.
                required:
                  - items
                properties:
                  items:
                    type: array
                    description: Products list.
                    items:
                      type: object
                      description: Available product.
                      required:
                        - name
                        - productFamily
                        - code
                        - productScore
                        - defaultForUsageBillingType
                        - conflictsWith
                        - supportedBillingTypes
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        name:
                          type: string
                          description: Friendly product name.
                        productFamily:
                          type: string
                          description: The family type of the product.
                          enum:
                            - endpoint
                            - server
                            - wireless
                            - firewall
                            - ndr
                            - mobile
                            - email
                            - phishThreat
                            - reporting
                            - publicCloudSecurity
                            - xdr
                            - sase
                            - encryption
                            - professionalServices
                            - cswitch
                            - workspaceProtection
                            - cisoAdvantage
                            - other
                        productGroup:
                          type: string
                          description: The group type of the product.
                          enum:
                            - switch
                            - wifi
                        productScore:
                          type: integer
                          description: >-
                            Product score number for ordering products low to
                            high (10, 20, 30 ...).
                        defaultForUsageBillingType:
                          type: boolean
                          description: >-
                            Whether this product is offered as default when
                            tenants are created and products are not specified.
                        conflictsWith:
                          description: List of products that a product conflicts with.
                          type: array
                          uniqueItems: true
                          items:
                            type: string
                            description: Sophos product code.
                            pattern: >-
                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        supportedBillingTypes:
                          description: Supported billing types for a product.
                          type: array
                          items:
                            type: string
                            enum:
                              - usage
                              - ordered
                              - trial
                        implicitAddons:
                          description: List of required addon products.
                          type: array
                          uniqueItems: true
                          items:
                            type: string
                            description: Sophos product code.
                            pattern: >-
                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        explicitAddons:
                          description: List of additionaly available addon products.
                          type: array
                          uniqueItems: true
                          items:
                            type: string
                            description: Sophos product code.
                            pattern: >-
                              ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                      example:
                        code: CMA-MSP
                        name: Central CMS Advanced MSP Monthly
                        productFamily: endpoint
                        productScore: 10
                        defaultForUsageBillingType: true
                        conflictsWith:
                          - CMA-ADDON
                        implicitAddons:
                          - XDR-RETENTION-ADDON
                        supportedBillingTypes:
                          - usage
                          - ordered
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  /provisioning/default-products:
    get:
      tags:
        - Provisioning
      summary: Default products
      description: >-
        List of products to turn on by default when the provisioning request for
        a tenant doesn't specify them.
      x-soph-permissions:
        - 'account_management:read'
        - 'license_management:read'
      operationId: listDefaultProducts
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Default products list.
          content:
            application/json:
              schema:
                type: object
                description: List of default products for a partner.
                properties:
                  usage:
                    type: array
                    description: List of usage products.
                    uniqueItems: true
                    items:
                      description: Default products for usage billing type.
                      type: object
                      required:
                        - code
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                  ordered:
                    type: array
                    description: List of ordered products.
                    uniqueItems: true
                    items:
                      description: Default products for ordered billing type.
                      type: object
                      required:
                        - code
                        - quantity
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        quantity:
                          description: Quantity for the number of seats.
                          type: integer
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    patch:
      tags:
        - Provisioning
      summary: Default products
      description: Update the list of default products.
      x-soph-permissions:
        - 'account_management:write'
        - 'license_management:write'
      operationId: patchDefaultProducts
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Default products update request.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: List of default products for the partner account.
              properties:
                usage:
                  type: array
                  description: List of usage products.
                  uniqueItems: true
                  items:
                    description: Default products for usage billing type.
                    type: object
                    required:
                      - code
                    properties:
                      code:
                        type: string
                        description: Sophos product code.
                        pattern: >-
                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                ordered:
                  type: array
                  description: List of ordered products.
                  uniqueItems: true
                  items:
                    description: Default products for ordered billing type.
                    type: object
                    required:
                      - code
                      - quantity
                    properties:
                      code:
                        type: string
                        description: Sophos product code.
                        pattern: >-
                          ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                      quantity:
                        description: Quantity for the number of seats.
                        type: integer
            example:
              usage:
                - code: CIXA-MSP
                - code: CEMA-MSP
              ordered:
                - code: CIXA-MSP
                  quantity: 10
                - code: CEMA-MSP
                  quantity: 10
      responses:
        '200':
          description: Updated list of default products.
          content:
            application/json:
              schema:
                type: object
                description: List of default products for a partner.
                properties:
                  usage:
                    type: array
                    description: List of usage products.
                    uniqueItems: true
                    items:
                      description: Default products for usage billing type.
                      type: object
                      required:
                        - code
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                  ordered:
                    type: array
                    description: List of ordered products.
                    uniqueItems: true
                    items:
                      description: Default products for ordered billing type.
                      type: object
                      required:
                        - code
                        - quantity
                      properties:
                        code:
                          type: string
                          description: Sophos product code.
                          pattern: >-
                            ^[A-Z][a-zA-Z]{0,19}([0-9]{0,4})([-_][a-zA-Z0-9]{0,20}([0-9]{0,3})){0,5}$
                        quantity:
                          description: Quantity for the number of seats.
                          type: integer
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
    delete:
      tags:
        - Provisioning
      summary: Default products
      description: >-
        Reset the list of default products. For new tenants provisioned after
        this, Sophos Central turns on the products specified in the provisioning
        request.
      x-soph-permissions:
        - 'account_management:write'
        - 'license_management:write'
      operationId: resetDefaultProducts
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Default products list reset.
          content:
            application/json:
              schema:
                type: object
                description: >-
                  Response to a request to reset a partner's default products
                  list.
                properties:
                  deleted:
                    type: boolean
                    default: true
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
  '/billing/usage/{year}/{month}':
    get:
      x-soph-permissions: 'account_management:read'
      tags:
        - Partner Billing
      summary: Get usage report
      description: Usage report.
      operationId: getMonthlyReport
      parameters:
        - name: X-Partner-ID
          in: header
          description: Partner ID.
          required: true
          schema:
            type: string
            format: uuid
        - name: month
          in: path
          description: Month of the year.
          required: true
          schema:
            type: integer
            minimum: 1
            maximum: 12
        - name: year
          in: path
          description: Year.
          required: true
          schema:
            type: integer
            minimum: 2021
        - in: query
          name: pageSize
          required: false
          schema:
            type: integer
            default: 50
          description: The size of the page requested.
        - in: query
          name: pageFromKey
          required: false
          schema:
            type: string
          description: The key of the item from where to fetch a page.
        - in: query
          name: pageTotal
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Whether the number of pages should be calculated and returned in the
            response.
        - name: fields
          description: The fields to return in a partial response.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: contactEmail
          description: Tenant email for contact.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
            maxItems: 50
        - name: accountId
          description: Tenant Id.
          in: query
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              format: uuid
            maxItems: 50
      responses:
        '200':
          description: Billing report.
          content:
            application/json:
              schema:
                type: object
                description: Page of billing report items.
                required:
                  - items
                  - pages
                properties:
                  items:
                    type: array
                    description: Billing report items.
                    items:
                      type: object
                      description: A single line in the partner's monthly billing report.
                      required:
                        - partnerAccountId
                        - partnerEdiAccountNumber
                        - partnerAccountName
                        - billingStartDate
                        - billingEndDate
                        - orderNumber
                        - orderLineItemNumber
                        - accountNumberOrSerialNumber
                        - productDescription
                        - productGroup
                        - sku
                        - billableQuantity
                        - externalId
                        - accountId
                        - accountStatus
                        - actualQuantity
                        - productCode
                      properties:
                        partnerAccountId:
                          type: string
                          format: uuid
                          description: Partner ID.
                          example: d31ab2df-7005-4c06-bd7d-2bc8de44be06
                        partnerEdiAccountNumber:
                          type: string
                          description: Partner EDI account number (7-digit).
                          example: '1231231'
                        partnerAccountName:
                          type: string
                          description: Partner account name.
                          example: ABC Corp
                        billingStartDate:
                          type: string
                          format: date
                          description: Billing start date.
                          example: '2021-01-31'
                        billingEndDate:
                          type: string
                          format: date
                          description: Billing end date.
                          example: '2021-04-31'
                        orderNumber:
                          type: string
                          description: Order ID.
                          example: OrderID-123123123
                        orderLineItemNumber:
                          type: string
                          description: Order line item number.
                          example: OrderLine-12312312
                        accountNumberOrSerialNumber:
                          type: string
                          description: >-
                            Partner account number (7-digit) OR firewall serial
                            number (alphanumeric).
                          example: C01234ABC1CDEF2
                        assignedAccountIdentifier:
                          type: string
                          description: >-
                            Company name or (if applicable) the Company name
                            provided by Firewall usage.
                          example: Safelog
                        contactName:
                          type: string
                          description: Contact name.
                          example: John Smith
                        contactEmail:
                          type: string
                          format: email
                          description: Contact email.
                          example: john.smith@example.com
                        contactStreet:
                          type: string
                          description: Contact street address.
                          example: 1 Smith Avenue
                        contactCity:
                          type: string
                          description: Contact city.
                          example: Smithfield
                        contactCountry:
                          type: string
                          description: Contact country.
                          example: USA
                        contactZip:
                          type: string
                          description: Contact zipcode.
                          example: '32932'
                        productDescription:
                          type: string
                          description: Product description.
                          example: >-
                            SW/Virtual EnterpriseGuard Plus - UP TO 2 CORES &
                            4GB RAM - 500-999 DEVICES - MSP Monthly
                        productGroup:
                          type: string
                          description: MSP product group.
                          example: User
                        sku:
                          type: string
                          description: Sophos Stock Keeping Unit.
                          example: CEAZ1CSMG
                        billableQuantity:
                          type: integer
                          description: Total billable quantity.
                          example: 20
                        unitMsrpCurrency:
                          type: string
                          description: MSRP currency unit.
                          example: USD
                        unitMsrp:
                          type: string
                          description: Unit MSRP.
                          example: '1.40'
                        unitPriceCurrency:
                          type: string
                          description: Unit price currency.
                          example: USD
                        unitPrice:
                          type: string
                          description: Unit price (decimal).
                          example: '1.40'
                        netPriceCurrency:
                          type: string
                          description: Net price currency.
                          example: USD
                        netPrice:
                          type: string
                          description: Net price (decimal).
                          example: '1.40'
                        priceWithTaxesCurrency:
                          type: string
                          description: Price with taxes currency.
                          example: USD
                        priceWithTaxes:
                          type: string
                          description: Price with taxes (decimal).
                          example: '1.40'
                        distributorAccountName:
                          type: string
                          description: MSP distributor company name.
                          example: ABC Inc.
                        additionalDiscountPercentage:
                          type: number
                          description: Additional discount percentage.
                          example: 25
                        externalId:
                          type: string
                          format: uuid
                          description: End-user external ID.
                          example: 17b80674-f2cb-4b4f-a134-54ee24fbd5b3
                        accountId:
                          type: string
                          format: uuid
                          description: End-user account ID.
                          example: 718b6047-2fbc-b4f4-1a43-45ee42bf5d3b
                        accountStatus:
                          type: string
                          format: enum
                          description: Account status.
                          enum:
                            - active
                            - suspended
                            - canceled
                        orderedQuantity:
                          type: integer
                          description: Quantity ordered.
                          example: 20
                        actualQuantity:
                          type: integer
                          description: Actual quantity.
                          example: 20
                        productCode:
                          type: string
                          description: Sophos product code.
                          example: CIXA-MSP
                  pages:
                    type: object
                    required:
                      - maxSize
                      - size
                    properties:
                      fromKey:
                        type: string
                        description: The key of the first item in the returned page.
                      nextKey:
                        type: string
                        description: The key to use when fetching the next page.
                      size:
                        type: integer
                        description: The size of the page being returned.
                      total:
                        type: integer
                        description: >-
                          (Optional) The total number of pages that exist, if
                          pageTotal=true in the request.
                      items:
                        type: integer
                        description: >-
                          (Optional) The total number of items on all the pages,
                          if pageTotal=true was passed into the request.
                      maxSize:
                        type: integer
                        description: The maximum page size that can be requested.
        '404':
          description: No data for requested year or month.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
        '500':
          description: Unexpected error.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                  message:
                    type: string
                  correlationId:
                    type: string
                    format: uuid
                  code:
                    type: string
                  createdAt:
                    type: string
                    format: datetime
                  requestId:
                    type: string
                    format: uuid
                  docUrl:
                    type: string
                    format: uri
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
