---
title: "Update product"
method: PATCH
path: "/v1/products/{productId}"
tags: ["v1 - Products"]
---

# Update product

`PATCH /v1/products/{productId}`

## Request

- Base URL: `https://light.inc` (the document declares no server; this is the origin it was published from)
- URL: `https://light.inc/v1/products/{productId}`
- Auth: one of:
  - API key in header `Authorization`
  - HTTP bearer

Updates an existing product

## Path parameters

- `productId` string, uuid, required

## Headers

- `X-Idempotency-Key` string

## Request body

- ExternalUpdateProductRequestV1Model
  - `name` string, nullable
  - `pricingType` 'FIXED' | 'PACKAGE', nullable: - `FIXED` - The product has a single price per unit - `PACKAGE` - The product is sold in packages with a fixed quantity ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `billingRecurrence` 'ONE_TIME' | 'MONTHLY' | 'QUARTERLY' | 'HALF_YEARLY' | 'YEARLY', nullable: - `ONE_TIME` - The product is billed once - `MONTHLY` - The product is billed every month - `QUARTERLY` - The product is billed every three months - `HALF_YEARLY` - The product is billed every six months - `YEARLY` - The product is billed every year ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `pricings` ExternalProductPricingV1Model[], nullable
    - `currency` string
    - `amount` integer: Price in cents
  - `customProperties` ExternalSetCustomPropertyRequestV1Model[], nullable
    - `groupId` string, uuid: ID of the custom property group.
    - `valueIds` string[]: IDs of the selected custom property values. It behaves as a PUT operation, so if empty the existing ones will be effectively deleted.
    - `inlineValues` string[], nullable: Inline custom property values (used for TEXT/NUMERIC/DATE/etc. groups). It behaves as a PUT operation, so if empty or null the existing ones will be effectively deleted.
  - `defaultAvataxCode` string, nullable
  - `defaultTaxId` string, uuid, nullable
  - `defaultLedgerAccountId` string, uuid, nullable

## Response `default`

default response

- ExternalProductV1Model
  - `id` string, uuid: Unique identifier for the object
  - `companyId` string, uuid: ID of the company
  - `name` string: Name of the product
  - `pricingType` 'FIXED' | 'PACKAGE': Pricing type of the product - `FIXED` - The product has a single price per unit - `PACKAGE` - The product is sold in packages with a fixed quantity ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `billingRecurrence` 'ONE_TIME' | 'MONTHLY' | 'QUARTERLY' | 'HALF_YEARLY' | 'YEARLY': Billing frequency for the product. Used in contracts - `ONE_TIME` - The product is billed once - `MONTHLY` - The product is billed every month - `QUARTERLY` - The product is billed every three months - `HALF_YEARLY` - The product is billed every six months - `YEARLY` - The product is billed every year ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `pricings` ExternalProductPricingV1Model[]: List of product price per currency
    - `currency` string
    - `amount` integer: Price in cents
  - `state` 'ACTIVE' | 'ARCHIVED': Product state - `ACTIVE` - The product is active and can be used in invoices and contracts - `ARCHIVED` - The product is archived and cannot be used in new invoices or contracts ⚠️ This enum is not exhaustive; new values may be added in the future.
  - `defaultTaxId` string, uuid, nullable: ID of the default tax code for this product. Will be assigned to invoice lines when creating a line with this product
  - `defaultAvataxCode` string, nullable: Default Avalara tax code. Used when the invoice tax engine is `AVATAX`. Will be assigned to invoice lines when creating a line with this product
  - `defaultLedgerAccountId` string, uuid, nullable: ID of the default ledger account for this product. Will be assigned to invoice lines when creating a line with this product
  - `externalSource` ExternalApiExternalSourceV1Model, nullable: The external system where this product was synced from
    - `name` 'CHARGEBEE' | 'HUBSPOT' | 'SALESFORCE' | 'STRIPE': The name of the external source - `CHARGEBEE` - Data synced from Chargebee - `HUBSPOT` - Data synced from HubSpot - `SALESFORCE` - Data synced from Salesforce - `STRIPE` - Data synced from Stripe ⚠️ This enum is not exhaustive; new values may be added in the future.
    - `externalId` string: The ID of the object in the external source system
  - `createdAt` string, date-time: Timestamp when the product was created
  - `updatedAt` string, date-time: Timestamp when the product was last updated
  - `customProperties` ExternalCustomPropertyV1Model[], nullable: List of custom properties associated with the product
    - `groupId` string, uuid: ID of the custom property group
    - `groupInternalName` string: Internal name of the custom property group
    - `values` ExternalCustomPropertyValueV1Model[]: List of values. Note that this will be a single value unless the group input type supports multiple values
      - `id` string, uuid: Unique identifier for the object
      - `groupId` string, uuid: ID of the custom property group
      - `groupInternalName` string: Internal name of the custom property group
      - `companyId` string, uuid: ID of the company
      - `internalName` string: Internal name of the custom property value
      - `label` string: Label of the custom property value
      - `context` string, nullable: Context/description of the custom property value
      - `createdAt` string, date-time: Timestamp when the custom property value was created
      - `updatedAt` string, date-time: Timestamp when the custom property value was last updated

---

[API](https://skmtc.dev/light/apis/light-api.md) - [All operations](https://skmtc.dev/light/apis/light-api/llms.txt) - [OpenAPI document](https://skmtc.dev/light/apis/light-api/revisions/84f51306f648?raw)
