---
title: "Upsert Product or Service"
method: POST
path: "/copilot/v1/products"
tags: ["Products and Services"]
---

# Upsert Product or Service

`POST /copilot/v1/products`

## Request

- Base URL: `https://api.zoominfo.com/gtm`
- URL: `https://api.zoominfo.com/gtm/copilot/v1/products`
- Auth: OAuth 2
  - Authorization code: `https://login.zoominfo.com`
  - Token URL: `https://okta-login.zoominfo.com/oauth2/default/v1/token` scopes: `api:gtm-config:manage`

Creates or updates a Product or Service for the authenticated customer.
A Product or Service represents a product, service, or solution provided by your company.

Products or Services form the foundation of your go-to-market configuration and capture key context such as the product's
value proposition, the pain points it addresses, proof points, target buyer personas, and the ideal customer profiles it serves.

This endpoint performs an upsert operation:
If an `id` is included in the request body, the existing product or service is updated.
Only the attributes provided in the request are modified (partial update).

If an `id` is not provided, a new product or service is created.

When creating a new product or service, name is the only required field. All other attributes are optional.
A Product or Service acts as a central linking object across GTM configuration. Buyer Personas, Ideal Customer Profiles (ICPs),
and Competitors can all be associated with a Product or Service to align targeting, messaging, and competitive positioning.

Common use cases
- Create a new product or service
- Update positioning, messaging, or targeting attributes for an existing product or service
- Link products or services to buyer personas, ICPs, or competitors

## Request body

- OrganizationOfferingUpsert: Product or Service resource for upsert operations.
  - `data` object, required: The primary data of the document
    - `id` string: The unique identifier for the resource
    - `type` 'OrganizationOffering', required: The type of the resource
    - `attributes` OrganizationOfferingAttributes, required: Attributes that define a Product or Service — the discrete products or services provided by a customer's company. Products or services form the foundation of a customer's go-to-market configuration, capturing the essential strategic context of a product. A product or service serves as a centralized record for: * Product Positioning: Capturing how the product is uniquely situated in the market. * Targeting: Identifying the specific audiences, industries, or company types the product is intended for. * Pain Point Resolution: Documenting the specific customer problems or challenges the product or service is designed to address. * Value Proposition: Defining the core benefits and outcomes the product or service provides to the customer. Collectively, these attributes provide the necessary framework to build a complete GTM picture. The product or service acts as the primary anchor to which Buyer Personas, Ideal Customer Profiles, and Competitive Intelligence are linked, ensuring all revenue-generating activities are aligned with the product's strategic intent.
      - `name` string: Name of the Product or Service. Required when creating a new record. When provided (for create or update), must be between 1 and 1024 characters.
      - `description` string: Detailed description of the Product or Service, including its purpose, target audience, and key benefits. Maximum 10,000 characters.
      - `painPoints` string[]: Customer pain points this Product or Service addresses.
      - `valueProposition` string[]: Value propositions as articulated by the customer — the key reasons a buyer should choose this Product or Service.
      - `proofPoints` string[]: Reviews, testimonials, or case-study references that validate the Product or Service's effectiveness.
      - `url` string, uri: URL of the Product or Service's webpage or landing page. Maximum 1024 characters.
      - `competitors` string: Text description of competitor information relevant to this specific Product or Service. Maximum 10,000 characters.
      - `idealCompanySegment` string: Text description of the ideal company segment for this Product or Service. Maximum 10,000 characters.
      - `offeringBuyerPersonas` string: Text description of the buyer personas relevant to this Product or Service. Maximum 10,000 characters.
      - `source` 'manual' | 'import' | 'system' | 'mcp': Source type indicating how a GTM configuration record was created or last modified. Used across all customer-level entities for audit provenance tracking. When source is explicitly set in a request, the corresponding created_by/updated_by must also be provided. Defaults to 'manual' when not specified.
      - `customFields` CustomFieldItem[]: Flexible key-value store for customer-specific custom fields and extended metadata. The backend validates schema and value types. Use this to capture additional Product or Service details beyond the standard fields.
        - `title` string, required: The display title of the custom field.
        - `description` string: An optional description of the field. Defaults to an empty string in the backend.
        - `value` string, required: The string value associated with this custom field.
    - `meta` GtmConfigAuditFields: Common audit fields present on all customer-level GTM configuration entities. These fields track the full lifecycle of a record including creation, modification, archival (temporary hiding), and soft deletion (permanent hiding for compliance). A record can be active, deleted only, or both.
      - `createdAt` string, date-time: ISO 8601 timestamp when the record was originally created. Auto-populated by backend.
      - `updatedAt` string, date-time: ISO 8601 timestamp of the most recent modification to the record. Auto-populated by backend.
      - `createdBy` string: User ID of the person who created the record. Extracted from the JWT token on creation.
      - `updatedBy` string: User ID of the person who last modified the record. Extracted from the JWT token on update.
      - `archivedAt` string, date-time: ISO 8601 timestamp when the record was archived. Archived records are identified by archivedAt and archivedBy
      - `archivedBy` string: User ID of the person who archived the record

## Response `200`

Success

- OrganizationOfferingModel: API model for a single product or service.
  - `data` OrganizationOffering, required: Product or Service resource.
    - `id` string, required: The unique identifier for the resource
    - `type` string, required: The type of the resource
    - `attributes` OrganizationOfferingAttributes, required: Attributes that define a Product or Service — the discrete products or services provided by a customer's company. Products or services form the foundation of a customer's go-to-market configuration, capturing the essential strategic context of a product. A product or service serves as a centralized record for: * Product Positioning: Capturing how the product is uniquely situated in the market. * Targeting: Identifying the specific audiences, industries, or company types the product is intended for. * Pain Point Resolution: Documenting the specific customer problems or challenges the product or service is designed to address. * Value Proposition: Defining the core benefits and outcomes the product or service provides to the customer. Collectively, these attributes provide the necessary framework to build a complete GTM picture. The product or service acts as the primary anchor to which Buyer Personas, Ideal Customer Profiles, and Competitive Intelligence are linked, ensuring all revenue-generating activities are aligned with the product's strategic intent.
      - `name` string: Name of the Product or Service. Required when creating a new record. When provided (for create or update), must be between 1 and 1024 characters.
      - `description` string: Detailed description of the Product or Service, including its purpose, target audience, and key benefits. Maximum 10,000 characters.
      - `painPoints` string[]: Customer pain points this Product or Service addresses.
      - `valueProposition` string[]: Value propositions as articulated by the customer — the key reasons a buyer should choose this Product or Service.
      - `proofPoints` string[]: Reviews, testimonials, or case-study references that validate the Product or Service's effectiveness.
      - `url` string, uri: URL of the Product or Service's webpage or landing page. Maximum 1024 characters.
      - `competitors` string: Text description of competitor information relevant to this specific Product or Service. Maximum 10,000 characters.
      - `idealCompanySegment` string: Text description of the ideal company segment for this Product or Service. Maximum 10,000 characters.
      - `offeringBuyerPersonas` string: Text description of the buyer personas relevant to this Product or Service. Maximum 10,000 characters.
      - `source` 'manual' | 'import' | 'system' | 'mcp': Source type indicating how a GTM configuration record was created or last modified. Used across all customer-level entities for audit provenance tracking. When source is explicitly set in a request, the corresponding created_by/updated_by must also be provided. Defaults to 'manual' when not specified.
      - `customFields` CustomFieldItem[]: Flexible key-value store for customer-specific custom fields and extended metadata. The backend validates schema and value types. Use this to capture additional Product or Service details beyond the standard fields.
        - `title` string, required: The display title of the custom field.
        - `description` string: An optional description of the field. Defaults to an empty string in the backend.
        - `value` string, required: The string value associated with this custom field.
    - `meta` GtmConfigAuditFields: Common audit fields present on all customer-level GTM configuration entities. These fields track the full lifecycle of a record including creation, modification, archival (temporary hiding), and soft deletion (permanent hiding for compliance). A record can be active, deleted only, or both.
      - `createdAt` string, date-time: ISO 8601 timestamp when the record was originally created. Auto-populated by backend.
      - `updatedAt` string, date-time: ISO 8601 timestamp of the most recent modification to the record. Auto-populated by backend.
      - `createdBy` string: User ID of the person who created the record. Extracted from the JWT token on creation.
      - `updatedBy` string: User ID of the person who last modified the record. Extracted from the JWT token on update.
      - `archivedAt` string, date-time: ISO 8601 timestamp when the record was archived. Archived records are identified by archivedAt and archivedBy
      - `archivedBy` string: User ID of the person who archived the record

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `422`: Unprocessable Content
- `429`: Too Many Requests

---

[API](https://skmtc.dev/zoominfo/apis/copilot-api-v1.md) - [All operations](https://skmtc.dev/zoominfo/apis/copilot-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/zoominfo/apis/copilot-api-v1/revisions/f737ab239c2a?raw)
