D-Tools Subscribe Projects API

Allows an integration to subscribe to projects and change orders published by SI users.

Operations 6

GET /Subscribe/Projects Get projects and change orders published by a SI user.
GET /Subscribe/Projects/GetProjectByMessageId Get a specific project or change order for a given message id published by a SI user.
GET /Subscribe/Projects/GetProjectComments Get project comments published by a SI user.
PUT /Subscribe/Projects/MarkAsImported Mark a project or change order as imported for a given project id.
PUT /Subscribe/Projects/MarkAsImportedByMessageId Mark a project or change order as imported for a given message id.
GET /Subscribe/Projects/{id} Get a specific project or change order for a given project id published by a SI user.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/d-tools-subscribeprojects-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

d-tools-subscribeprojects-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: D-Tools SI API Documentation Subscribe Projects API
  description: 'The API allows integrations to:


    - Publish catalogs and projects to SI users.

    - Subscribe to projects and catalogs published by SI users.


    All API calls must pass an API key in the request header. The API key can be generated in SI 2016 Control Panel using the ''Manage Integrations'' feature.


    An API key is specific to a SI user and an integration.


    API callers must add to each call a custom header named **X-DTSI-ApiKey** along with the value of the API key. For example, if the API key value is `q54R39UBr0Skgd7VHvEbuwiRAOArUpt02o7z/vY+iwrg`, the custom header would be as follows:


    ```

    X-DTSI-ApiKey: q54R39UBr0Skgd7VHvEbuwiRAOArUpt02o7z/vY+iwrg

    ```'
  version: 1.0.0
servers:
- url: https://api.d-tools.com/si
tags:
- name: SubscribeProjects
  description: Allows an integration to subscribe to projects and change orders published by SI users.
paths:
  /Subscribe/Projects:
    get:
      tags:
      - SubscribeProjects
      summary: Get projects and change orders published by a SI user.
      parameters:
      - name: clients
        in: query
        description: Clients to filter projects (Optional)
        schema:
          type: array
          items:
            type: string
      - name: progresses
        in: query
        description: Progresses to filter projects (Optional)
        schema:
          type: array
          items:
            type: string
      - name: includeImported
        in: query
        description: 'Boolean. Include already imported projects. Optional with default value false which means

          by default you will only see projects which are not imported.'
        schema:
          type: boolean
          default: false
      - name: includeArchived
        in: query
        description: 'Boolean. Include archived projects. Optional with default value false which means

          by default you will only see projects which are not archived.'
        schema:
          type: boolean
          default: false
      - name: searchText
        in: query
        description: The search text.
        schema:
          type: string
      - name: includeDeleted
        in: query
        description: 'Boolean. Include project deleted in SI. Optional with default value false which means

          by default you will only see active projects which are not deleted.'
        schema:
          type: boolean
          default: false
      - name: pageNumber
        in: query
        description: The page number.
        schema:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int32
          default: 1
      - name: pageSize
        in: query
        description: The page size.
        schema:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int32
          default: 50
      - name: projectNumber
        in: query
        description: The project number.
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectsResult'
            text/json:
              schema:
                $ref: '#/components/schemas/ProjectsResult'
  /Subscribe/Projects/GetProjectByMessageId:
    get:
      tags:
      - SubscribeProjects
      summary: Get a specific project or change order for a given message id published by a SI user.
      parameters:
      - name: messageId
        in: query
        description: The message Id
        schema:
          type: string
      - name: aggregateBy
        in: query
        description: 'aggregateBy is an optional parameter and the value can be Item, Location, System or

          Phase. If aggregateBy is not provided then the project is returned unit wise (not aggregated).'
        schema:
          type: string
      - name: getAdjustmentsByItem
        in: query
        description: 'getAdjustmentsByItem is an optional parameter.

          If true then adjustments are returned with each project item.

          If false the adjustments are aggregated and returned as project items.'
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
            text/json:
              schema:
                $ref: '#/components/schemas/Project'
            application/xml:
              schema:
                $ref: '#/components/schemas/Project'
            text/xml:
              schema:
                $ref: '#/components/schemas/Project'
  /Subscribe/Projects/GetProjectComments:
    get:
      tags:
      - SubscribeProjects
      summary: Get project comments published by a SI user.
      parameters:
      - name: id
        in: query
        description: The project id.
        schema:
          type: string
      - name: pageNumber
        in: query
        description: The page number.
        schema:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int32
          default: 1
      - name: pageSize
        in: query
        description: The page size.
        schema:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int32
          default: 100
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectCommentsResult'
            text/json:
              schema:
                $ref: '#/components/schemas/ProjectCommentsResult'
  /Subscribe/Projects/MarkAsImported:
    put:
      tags:
      - SubscribeProjects
      summary: Mark a project or change order as imported for a given project id.
      parameters:
      - name: id
        in: query
        description: The project id.
        schema:
          type: string
      - name: coNumber
        in: query
        description: coNumber is an optional parameter and is the Change Order Number. For approved projects you can pass the change order number.
        schema:
          type: string
      - name: publishedOnUnixTimeMs
        in: query
        description: publishedOnUnixTimeMs is an optional parameter and is the date the project was published in Unix epoch milliseconds. This property can be read from the project property PublishedOnUnixTimeMs and if passed will make sure no one has updated this project since you last read it.
        schema:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          format: int64
      responses:
        '200':
          description: ''
  /Subscribe/Projects/MarkAsImportedByMessageId:
    put:
      tags:
      - SubscribeProjects
      summary: Mark a project or change order as imported for a given message id.
      parameters:
      - name: messageId
        in: query
        description: The message Id
        schema:
          type: string
      - name: publishedOnUnixTimeMs
        in: query
        description: publishedOnUnixTimeMs is an optional parameter and is the date the project was published in Unix epoch milliseconds. This property can be read from the project property PublishedOnUnixTimeMs and if passed will make sure no one has updated this project since you last read it.
        schema:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          format: int64
      responses:
        '200':
          description: ''
  /Subscribe/Projects/{id}:
    get:
      tags:
      - SubscribeProjects
      summary: Get a specific project or change order for a given project id published by a SI user.
      parameters:
      - name: id
        in: path
        description: The project id.
        required: true
        schema:
          type: string
      - name: coNumber
        in: query
        description: 'coNumber is an optional parameter and is the Change Order Number.

          For approved project you can pass a change order number to get a specific change order for the approved project.'
        schema:
          type: string
      - name: aggregateBy
        in: query
        description: 'aggregateBy is an optional parameter and the value can be Item, Location, System or

          Phase. If aggregateBy is not provided then the project is returned unit wise (not aggregated).'
        schema:
          type: string
      - name: getAdjustmentsByItem
        in: query
        description: 'getAdjustmentsByItem is an optional parameter.

          If true then adjustments are returned with each project item.

          If false the adjustments are aggregated and returned as project items.'
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
            text/json:
              schema:
                $ref: '#/components/schemas/Project'
            application/xml:
              schema:
                $ref: '#/components/schemas/Project'
            text/xml:
              schema:
                $ref: '#/components/schemas/Project'
components:
  schemas:
    MiscItem:
      type: object
      properties:
        name:
          type:
          - 'null'
          - string
          description: Name of Misc. Item
        description:
          type:
          - 'null'
          - string
        quantity:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int32
        unitPrice:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          format: double
    Tax:
      type: object
      properties:
        id:
          type:
          - 'null'
          - string
          description: Unique Id for the tax (Required)
        name:
          type:
          - 'null'
          - string
          description: Name of tax (Required)
        rate:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Tax Rate
          format: double
        productTotal:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Calculated field. Total tax for all products in project
          format: double
        laborTotal:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Calculated field. Total tax for all labor in project
          format: double
        total:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Calculated field. Total tax in project (product and labor).
          format: double
    Location:
      type: object
      properties:
        id:
          type:
          - 'null'
          - string
          description: Unique Id for the location (Required)
        name:
          type:
          - 'null'
          - string
          description: Name for the location (Required)
        fullName:
          type:
          - 'null'
          - string
          description: Full name for the location including parent name
        number:
          type:
          - 'null'
          - string
          description: Number for the location
        fullNumber:
          type:
          - 'null'
          - string
          description: Full number for the location including parent number
        description:
          type:
          - 'null'
          - string
          description: Location description
        parentId:
          type:
          - 'null'
          - string
          description: Id of parent location
    ProjectItem:
      type: object
      properties:
        id:
          type:
          - 'null'
          - string
          description: Unique Id for the project item (Required)
        typeId:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          description: 'TypeId: 1 = Product, 2 = Labor Item, 3 = Allowance, 4 = Bundled Cable, 5 = Placeholder (Required)

            Product and Labor items can be posted to a project. Allowances, Bundled Cable and placeholders cannot be posted to a project.'
          format: uint8
        siItemId:
          type:
          - 'null'
          - string
          description: SIItemId - unique id of an item in SI - can be used for updates to SI project. This will be blank for adjustment items and phase labor items (calculated items).
        laborType:
          type:
          - 'null'
          - string
          description: 'LaborType: Item, Phase'
        coChangeTypeId:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          description: The change order change type Id. 1 = Added on Change Order, 2 = Deleted on Change Order.
          format: uint8
        manufacturerId:
          type:
          - 'null'
          - string
          description: Id for the manufacturer.
        manufacturer:
          type:
          - 'null'
          - string
          description: Manufacturer for the project item. Required for product and labor.
        model:
          type:
          - 'null'
          - string
          description: Model for the project item. Required for product and labor.
        packageName:
          type:
          - 'null'
          - string
          description: Package Name for the allowance, bundled cable and placeholder (required).
        partNumber:
          type:
          - 'null'
          - string
          description: Part Number
        category:
          type:
          - 'null'
          - string
          description: Category
        subcategory:
          type:
          - 'null'
          - string
          description: Subcategory
        description:
          type:
          - 'null'
          - string
          description: Short description
        componentId:
          type:
          - 'null'
          - string
          description: Component ID
        bulkItem:
          type: boolean
          description: Bulk Item
        serialNumber:
          type:
          - 'null'
          - string
          description: Serial number
        ipAddress:
          type:
          - 'null'
          - string
          description: IP Address 1
        ipAddress2:
          type:
          - 'null'
          - string
          description: IP Address 2
        macAddress1:
          type:
          - 'null'
          - string
          description: MAC Address 1
        macAddress2:
          type:
          - 'null'
          - string
          description: MAC Address 2
        isOfe:
          type: boolean
          description: If project item owner furnished
        isNonBillable:
          type: boolean
          description: Is project item non-billable
        isOptional:
          type:
          - 'null'
          - boolean
          description: Is project item optional
        quantity:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Quantity of the project item. For bulk wire is the wire length. For variable labor and phase labor is the labor hours.
          format: double
        priceType:
          type:
          - 'null'
          - string
          description: Price Type of the item
        unitCost:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Unit Cost
          format: double
        unitPriceWithoutDiscount:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Unit Price (does not includes Discount)
          format: double
        unitPrice:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Unit Price (includes Discount)
          format: double
        unitPriceRounded:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Rounded Unit Price
          format: double
        discount:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Discount
          format: double
        laborCalculationMethodId:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          description: Id of the LaborCalculation. Fixed = 1, Variable = 2, Phase = 3
          format: uint8
        phase:
          type:
          - 'null'
          - string
          description: Phase
        laborHours:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: 'For products the labor hours are the associated labor hours for that product.

            Fixed labor has labor hours as 0 (quantity is 1).

            Variable labor has labor hours of the item (equal to quantity).

            Phase labor has labor hours as 0 (quantity has the total labor hours for the phase).'
          format: double
        totalLaborHours:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Total Labor Hours includes Base, Misc, Mgt and Design hours and accounts for wire length (if any) and quantity
          format: double
        laborTypes:
          type:
          - 'null'
          - string
          description: Comma separated list of item labor types
        itemLaborTypes:
          type:
          - 'null'
          - array
          items:
            $ref: '#/components/schemas/ItemLaborType'
          description: Collection of labor types for item with name and hours
        productAdjustment:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Product Adjustment
          format: double
        miscPartAdjustment:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Miscellaneous Parts Adjustment
          format: double
        laborAdjustment:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Labor Adjustment
          format: double
        installPrice:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - number
          - string
          description: Install Price is the sum of product price and labor price to install the item
          format: double
        isTaxable:
          type: boolean
          description: Is project item taxable. Applicable if project has IsItemLevelTax = false
        taxId:
          type:
          - 'null'
          - string
          description: Tax ID for the project item in project taxes. Applicable if project has IsItemLevelTax = true
        avalaraTaxCode:
          type:
          - 'null'
          - string
          description: Avalara tax code
        avalaraLaborTaxCode:
          type:
          - 'null'
          - string
          description: Avalara labor tax code
        acctgName:
          type:
          - 'null'
          - string
          description: Accounting Item Name
        includedAccessory:
          type:
          - 'null'
          - boolean
          description: Included Accessory
        vendor:
          type:
          - 'null'
          - string
          description: Vendor
        orderUom:
          type:
          - 'null'
          - string
          description: UOM
        orderUomUnits:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          description: UOM units
          format: int32
        doNotOrder:
          type:
          - 'null'
          - boolean
          description: Do not order item
        bulkWire:
          type:
          - 'null'
          - boolean
          description: Item is Bulk Wire
        rackMounted:
          type:
          - 'null'
          - boolean
          description: Rack Mounted
        originalApprovedItemId:
          type:
          - 'null'
          - string
          description: Original Approved Item Id. The Original SI Item Id of an approved replaced item or an approved item whose quantity is reduced.
        locationId:
          type:
          - 'null'
          - string
          description: Location Id for the project item in project locations
        systemId:
          type:
          - 'null'
          - string
          description: System Id for the project item in project systems
        parentId:
          type:
          - 'null'
          - string
          description: If project item is an accessory id of the parent item
        catalogId:
          type:
          - 'null'
          - string
          description: Id of the item in the SI catalog
        packageId:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          description: If project item is in a package Id of the package (in Packages)
          format: int32
        solutionId:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
          description: If project item is in a solution Id of the solution (in Packages)
          format: int32
        orderStatus:
          type:
          - 'null'
          - string
          description: Order Status (Ordered, Not Ordered etc.).
        orderNumber:
          type:
          - 'null'
          - string
          description: Order Number
        orderedDate:
          type:
          - 'null'
          - string
          description: Ordered Date
          format: date-time
        orderedDateTicks:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int64
        expectedDeliveryDate:
          type:
          - 'null'
          - string
          description: Expected Delivery Date
          format: date-time
        expectedDeliveryDateTicks:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int64
        receivedDate:
          type:
          - 'null'
          - string
          description: Received Date
          format: date-time
        receivedDateTicks:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int64
        picked:
          type: boolean
          description: Picked (Is Item Picked?)
        pickedDate:
          type:
          - 'null'
          - string
          description: Picked Date
          format: date-time
        pickedDateTicks:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int64
        installed:
          type: boolean
          description: Installed (Is Item Installed?)
        installedDate:
          type:
          - 'null'
          - string
          description: Installed Date
          format: date-time
        installedDateTicks:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          format: int64
        installedNotes:
          type:
          - 'null'
          - string
          description: Install Notes
        trackingNumber:
          type:
          - 'null'
          - string
          description: Tracking Number
        updatedOn:
          type:
          - 'null'
          - string
          description: Date the project item was updated. Populated only when data is returned unit wise (non aggregated). Not populated for calculated items like adjustments and phase labor.
          format: date-time
        updatedOnTicks:
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
          description: Updated On date in ticks (number)
          format: int64
        customField1:
          type:
          - 'null'
          - string
          description: Project item custom field 1
        customField2:
          type:
          - 'null'
          - string
          description: Project item custom field 2
        customField3:
          type:
          - 'null'
          - string
          description: Project item custom field 3
        customField4:
          type:
          - 'null'
          - string
          description: Project item custom field 4
        customField5:
          type:
          - 'null'
          - string
          description: Project item custom field 5
        customField6:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 6
          format: double
        customField7:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 7
          format: double
        customField8:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 8
          format: double
        customField9:
          type:
          - 'null'
          - string
          description: Project item custom field 9
          format: date-time
        customField10:
          type:
          - 'null'
          - string
          description: Project item custom field 10
          format: date-time
        customField11:
          type:
          - 'null'
          - string
          description: Project item custom field 11
          format: date-time
        customField12:
          type:
          - 'null'
          - string
          description: Project item custom field 12
        customField13:
          type:
          - 'null'
          - string
          description: Project item custom field 13
        customField14:
          type:
          - 'null'
          - string
          description: Project item custom field 14
        customField15:
          type:
          - 'null'
          - string
          description: Project item custom field 15
        customField16:
          type:
          - 'null'
          - string
          description: Project item custom field 16
        customField17:
          type:
          - 'null'
          - string
          description: Project item custom field 17
        customField18:
          type:
          - 'null'
          - string
          description: Project item custom field 18
        customField19:
          type:
          - 'null'
          - boolean
          description: Project item custom field 19
        customField20:
          type:
          - 'null'
          - boolean
          description: Project item custom field 20
        customField21:
          type:
          - 'null'
          - boolean
          description: Project item custom field 21
        customField22:
          type:
          - 'null'
          - boolean
          description: Project item custom field 22
        customField23:
          type:
          - 'null'
          - string
          description: Project item custom field 23
        customField24:
          type:
          - 'null'
          - string
          description: Project item custom field 24
        customField25:
          type:
          - 'null'
          - string
          description: Project item custom field 25
        customField26:
          type:
          - 'null'
          - string
          description: Project item custom field 26
        customField27:
          type:
          - 'null'
          - string
          description: Project item custom field 27
        customField28:
          type:
          - 'null'
          - string
          description: Project item custom field 28
        customField29:
          type:
          - 'null'
          - string
          description: Project item custom field 29
        customField30:
          type:
          - 'null'
          - string
          description: Project item custom field 30
        customField31:
          type:
          - 'null'
          - string
          description: Project item custom field 31
        customField32:
          type:
          - 'null'
          - string
          description: Project item custom field 32
        customField33:
          type:
          - 'null'
          - string
          description: Project item custom field 33
        customField34:
          type:
          - 'null'
          - string
          description: Project item custom field 34
        customField35:
          type:
          - 'null'
          - string
          description: Project item custom field 35
        customField36:
          type:
          - 'null'
          - string
          description: Project item custom field 36
        customField37:
          type:
          - 'null'
          - string
          description: Project item custom field 37
        customField38:
          type:
          - 'null'
          - string
          description: Project item custom field 38
        customField39:
          type:
          - 'null'
          - string
          description: Project item custom field 39
        customField40:
          type:
          - 'null'
          - string
          description: Project item custom field 40
        customField41:
          type:
          - 'null'
          - string
          description: Project item custom field 41
        customField42:
          type:
          - 'null'
          - string
          description: Project item custom field 42
        customField43:
          type:
          - 'null'
          - string
          description: Project item custom field 43
        customField44:
          type:
          - 'null'
          - string
          description: Project item custom field 44
        customField45:
          type:
          - 'null'
          - string
          description: Project item custom field 45
        customField46:
          type:
          - 'null'
          - string
          description: Project item custom field 46
        customField47:
          type:
          - 'null'
          - string
          description: Project item custom field 47
        customField48:
          type:
          - 'null'
          - string
          description: Project item custom field 48
        customField49:
          type:
          - 'null'
          - string
          description: Project item custom field 49
        customField50:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 50
          format: double
        customField51:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 51
          format: double
        customField52:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 52
          format: double
        customField53:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 53
          format: double
        customField54:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 54
          format: double
        customField55:
          pattern: ^-?(?:0|[1-9]\d*)(?:\.\d+)?$
          type:
          - 'null'
          - number
          - string
          description: Project item custom field 55
          format:

# --- truncated at 32 KB (88 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/d-tools/refs/heads/main/openapi/d-tools-subscribeprojects-api-openapi.yml