Billing

Creates a product

Changed on

Creates a new product in the catalog.

The content field structure varies by quantity type and must include all required fields for that type:

  • Required for all types: price, cost, taxable, billing
  • MANUAL: quantity, productIds
  • DEVICE_COUNTS: anyRole, groupIds, allGroups, nodeRoles (optional), productIds
  • END_USER_COUNTS: anyRole, endUserRoles (optional), matchAllRoles, productIds
  • BACKUP_STORAGE_COUNTS: anyRole, groupIds, allGroups, nodeRoles (optional), isStorageIncludedPerDevice, includedStorage, productIds
  • TIME_ENTRIES: autoRoundTimeEntries, laborCodes, userRoles, onSiteMultiplier, offHoursMultiplier, remoteMultiplier, normalHoursMultiplier, scheduleTypeOffHours, scheduleTypeNormalHours, locationTypeOnSite, locationTypeRemote, includeTime, includedTimeAmountUnlimited, includedHours, unusedCarryOverUnlimited, carryOverLimit, productIds

The productUserRole field controls which technicians can use this product.

post/v2/billing/products

Request

Request body */*

namestring required

Name of the product.

descriptionstring required

Description of the product.

quantityType'MANUAL' | 'DEVICE_COUNTS' | 'TIME_ENTRIES' | 'END_USER_COUNTS' | 'BACKUP_STORAGE_COUNTS' | 'SOFTWARE_LICENSE' required

Quantity type of the product.

accountIdinteger required

Account ID associated with the product.

groupboolean required

Whether the product should be grouped.

integrationSettingsobject

If 3rd party integration is enabled, the settings needed to export invoices with this product.

contentobject required

Additional content/configuration for the product. Structure varies by quantity type.

taxIdinteger

Tax ID assigned to the product. If null, the product will use the agreement's tax.

inheritTaxFromAgreementboolean

Whether this product inherits its tax configuration from the agreement.

Example request

{
  "name": "Hardware Support",
  "description": "Monthly hardware support service",
  "quantityType": "DEVICE_COUNTS",
  "accountId": 1,
  "group": true,
  "productUserRole": {
    "allowAllTechnicians": true,
    "userRoles": [
      1,
      2
    ]
  },
  "taxId": 5,
  "inheritTaxFromAgreement": true
}

Response

Product successfully created

idinteger

Unique identifier of the product.

namestring

Name of the product.

descriptionstring

Description of the product.

quantityType'MANUAL' | 'DEVICE_COUNTS' | 'TIME_ENTRIES' | 'END_USER_COUNTS' | 'BACKUP_STORAGE_COUNTS' | 'SOFTWARE_LICENSE'

Quantity type of the product.

contentobject

Additional content/configuration for the product. Structure varies by quantity type.

integrationSettingsobject

If 3rd party integration is enabled, the settings for exporting invoices with this product.

createTimenumber double

Timestamp when the product was created.

updateTimenumber double

Timestamp when the product was last updated.

accountIdinteger

Account ID associated with the product.

groupboolean

Whether the product is a group product.

taxIdinteger nullable

Tax ID associated with the product. Null if no specific tax is set.

inheritTaxFromAgreementboolean

Whether the product inherits tax from the agreement.

activeboolean

Indicates if the product is active.

Example response

{
  "id": 1,
  "name": "Hardware Support",
  "description": "Monthly hardware support service",
  "quantityType": "DEVICE_COUNTS",
  "productUserRole": {
    "allowAllTechnicians": true,
    "userRoles": [
      {
        "id": 1,
        "name": "Admin"
      }
    ]
  },
  "accountId": 8,
  "taxId": 1,
  "inheritTaxFromAgreement": true,
  "active": true
}

Changes

    • info

      added the new optional request property

    • info

      added the new optional request property

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      endpoint added