---
title: "Get all products"
method: GET
path: "/v2/billing/products"
tags: ["Billing"]
---

# Get all products

`GET /v2/billing/products`

## Request

- Base URL: `https://app.ninjarmm.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.ninjarmm.com/v2/billing/products`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `sessionKey`
- TypeScript: <https://skmtc.dev/ninjarmm/apis/ninjaone-public-api-2-0/docs/v2/billing/products/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns a list of products with optional filters.

The content field structure varies by quantity type and includes price, cost, taxable, and other type-specific fields:
- **MANUAL**: price, cost, taxable, billing, quantity, productIds
- **DEVICE_COUNTS**: price, cost, taxable, billing, anyRole, groupIds, allGroups, nodeRoles, productIds
- **END_USER_COUNTS**: price, cost, taxable, billing, anyRole, endUserRoles, matchAllRoles, productIds
- **BACKUP_STORAGE_COUNTS**: price, cost, taxable, billing, anyRole, groupIds, allGroups, nodeRoles, isStorageIncludedPerDevice, includedStorage, productIds
- **TIME_ENTRIES**: price, cost, taxable, billing, autoRoundTimeEntries, laborCodes, userRoles, onSiteMultiplier, offHoursMultiplier, remoteMultiplier, normalHoursMultiplier, scheduleTypeOffHours, scheduleTypeNormalHours, locationTypeOnSite, locationTypeRemote, includeTime, includedTimeAmountUnlimited, includedHours, unusedCarryOverUnlimited, carryOverLimit, balance, productIds

## Query parameters

- `name` string
- `quantityType` string
- `accountCode` string

## Response `200`

List of products successfully retrieved

- object[]
  - `id` integer: Unique identifier of the product.
  - `name` string: Name of the product.
  - `description` string: Description of the product.
  - `quantityType` 'MANUAL' | 'DEVICE_COUNTS' | 'TIME_ENTRIES' | 'END_USER_COUNTS' | 'BACKUP_STORAGE_COUNTS' | 'SOFTWARE_LICENSE': Quantity type of the product.
  - `content` object: Additional content/configuration for the product. Structure varies by quantity type. Includes price, cost, taxable, and other type-specific fields.
  - `createTime` number, double: Timestamp when the product was created.
  - `updateTime` number, double: Timestamp when the product was last updated.
  - `accountId` integer: Account ID associated with the product.
  - `group` boolean: Whether the product is a group product.
  - `taxId` integer, nullable: Tax ID associated with the product. Null if no specific tax is set.
  - `inheritTaxFromAgreement` boolean: Whether the product inherits tax from the agreement.
  - `active` boolean: Indicates if the product is active.

## Other responses

- `500`: Permission denied

## Changes

- **2026-07-26** `753f26d46650`: 2 info
  - added the optional property `items/inheritTaxFromAgreement` to the response with the `200` status
  - added the optional property `items/taxId` to the response with the `200` status
- **2026-07-12** `dec5d4ed264e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/ninjarmm/apis/ninjaone-public-api-2-0/changes/v2/billing/products/get.md)

---

[API](https://skmtc.dev/ninjarmm/apis/ninjaone-public-api-2-0.md) - [All operations](https://skmtc.dev/ninjarmm/apis/ninjaone-public-api-2-0/llms.txt) - [OpenAPI document](https://skmtc.dev/ninjarmm/apis/ninjaone-public-api-2-0/revisions/5ce571d1bb71?raw)
