Prices

Prices represent fixed monetary amounts in a specific currency that you can attach to products or use independently in order line items. Unlike inline pricing on products, standalone prices let you reuse the same price definition across multiple contexts—different order configurations, A/B pricing tests, or multi-currency catalogs. Each price is immutable in its amount: once created, the currency and value cannot change. Update the label or description, or create a new price when your pricing changes.

Create, update, activate, and deactivate support idempotency. A successful response can be replayed with the same idempotency key and request body for 24 hours. Lookup and page do not opt in to idempotent replay.

The price object

A price object captures a specific monetary amount in a single currency, with optional metadata for display and organization. Prices can be associated with a product or exist independently. Each price also exposes whether it is currently active for new flows. The amount is set at creation and cannot be modified afterward—this immutability ensures that historical orders always reference the exact price that was charged.

Properties

  • Name
    about
    Type
    string
    Description

    Detailed description of what this price represents. Use for internal notes, pricing justification, or customer-facing explanations. Max 500 characters.

  • Name
    active
    Type
    boolean
    Description

    Whether this price is active and can be used in new flows. Newly created prices are active by default. Deactivated prices remain visible in catalog responses but cannot be assigned as product defaults until reactivated.

  • Name
    archived_at
    Type
    timestamp
    Description

    When this price was archived. Omitted otherwise.

  • Name
    created_at
    Type
    timestamp
    Description

    When this price was first created. Set automatically and never changes.

  • Name
    id
    Type
    string
    Description

    Unique identifier for this price, generated automatically during creation.

  • Name
    label
    Type
    string
    Description

    Short display name for the price. Shown in dashboards, invoices, and checkout. Max 100 characters. Examples: Monthly, Enterprise Annual, One-time setup.

  • nominalobjectThe monetary amount for this price.Click or tap to expand
    • Name
      currency
      Type
      string
      Description
      Three-letter currency code. Supported values: ghs, usd, gbp, eur, cny. Set at creation and cannot be changed.
    • Name
      value
      Type
      integer
      Description
      Amount in the smallest currency unit (e.g., cents for USD, pesewas for GHS). Set at creation and cannot be changed.
  • Name
    product
    Type
    object
    Description

    The related product, when the price is attached to one. Omitted for a standalone price. The related product omits the full prices collection.

  • Name
    updated_at
    Type
    timestamp
    Description

    Last time this price was modified. Omitted if it has not been updated.


Create a price

Create a new price with a specific currency and amount. The amount and currency are immutable after creation—if your pricing changes, create a new price and archive the old one. You can optionally associate the price with an existing product and add a label or description for display purposes.

If you provide a product_id, the product must exist. The amount.value must be greater than zero, specified in the smallest currency unit (cents for USD, pesewas for GHS).

Request attributes

  • Name
    about
    Type
    string
    Description

    Description of the price. Max 500 characters.

  • amountobjectThe monetary amount for this price.Click or tap to expand
    • Name
      currency
      Type
      string
      Description
      Three-letter currency code. Supported values: ghs, usd, gbp, eur, cny.
    • Name
      value
      Type
      integer
      Description
      Amount in smallest currency unit. Must be greater than 0.
  • Name
    label
    Type
    string
    Description

    Short display name. Max 100 characters.

  • Name
    product_id
    Type
    string
    Description

    Associate the price with an existing product. The product must exist.

Request

POST
/prices/create
curl https://api.zebo.dev/prices/create \
  -H "Authorization: Bearer $COMMERCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": {
      "currency": "usd",
      "value": 2999
    },
    "label": "Monthly",
    "about": "Standard monthly subscription price",
    "product_id": "prod_abc123xyz789"
  }'
{
  "price": {
    "id": "pr_k8m2x9v4n7p1",
    "about": "Standard monthly subscription price",
    "active": true,
    "nominal": {
      "currency": "usd",
      "value": 2999
    },
    "created_at": "2026-02-13T02:00:00Z",
    "label": "Monthly",
    "product": {
      "id": "prod_abc123xyz789",
      "about": "Starter plan for solo businesses",
      "active": true,
      "attributes": [
        {
          "name": "tier",
          "value": "starter"
        }
      ],
      "category": "software",
      "created_at": "2026-02-13T01:45:00Z",
      "custom_data": {
        "plan": "starter"
      },
      "description": "Standard monthly subscription",
      "name": "Starter plan",
      "published_at": "2026-02-13T02:05:00Z",
      "reference": "plan-starter-monthly",
      "tax_code": "txcd_software",
      "type": "digital"
    }
  }
}

Lookup a price

Retrieve an existing price by its ID. The response includes the immutable nominal amount, any associated product details, and lifecycle timestamps.

Request attributes

  • Name
    price_id
    Type
    string
    Description

    The ID of the price to retrieve.

Request

POST
/prices/lookup
curl https://api.zebo.dev/prices/lookup \
  -H "Authorization: Bearer $COMMERCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "price_id": "pr_k8m2x9v4n7p1"
  }'
{
  "price": {
    "id": "pr_k8m2x9v4n7p1",
    "about": "Standard monthly subscription price",
    "active": true,
    "nominal": {
      "currency": "usd",
      "value": 2999
    },
    "created_at": "2026-02-13T02:00:00Z",
    "label": "Monthly",
    "product": {
      "id": "prod_abc123xyz789",
      "about": "Starter plan for solo businesses",
      "active": true,
      "attributes": [
        {
          "name": "tier",
          "value": "starter"
        }
      ],
      "category": "software",
      "created_at": "2026-02-13T01:45:00Z",
      "custom_data": {
        "plan": "starter"
      },
      "description": "Standard monthly subscription",
      "name": "Starter plan",
      "published_at": "2026-02-13T02:05:00Z",
      "reference": "plan-starter-monthly",
      "tax_code": "txcd_software",
      "type": "digital"
    }
  }
}

Page through prices

Retrieve a paginated list of prices for your authenticated application. Results are sorted by created_at in descending order, so page 1 contains the most recently created prices.

If you provide product_id, the page is scoped to prices belonging to that product only. This includes active, inactive, and archived prices, which lets you inspect the full pricing history for a product or for your broader catalog.

Request attributes

  • Name
    page_number
    Type
    integer
    Description

    1-based page index to fetch. Defaults to 1 when omitted.

  • Name
    page_size
    Type
    integer
    Description

    Number of prices to return. Defaults to 256. Must be between 1 and 256.

  • Name
    product_id
    Type
    string
    Description

    Optional product ID to scope the results to a single product.

Request

POST
/prices/page
curl https://api.zebo.dev/prices/page \
  -H "Authorization: Bearer $COMMERCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "page_number": 1,
    "page_size": 2,
    "product_id": "prod_abc123xyz789"
  }'
{
  "page": {
    "number": 1,
    "size": 2,
    "prices": [
      {
        "id": "pr_k8m2x9v4n7p1",
        "about": "Standard monthly subscription price",
        "active": true,
        "nominal": {
          "currency": "usd",
          "value": 2999
        },
        "created_at": "2026-02-13T02:00:00Z",
        "label": "Monthly",
        "product": {
          "id": "prod_abc123xyz789",
          "about": "Starter plan for solo businesses",
          "active": true,
          "attributes": [
            {
              "name": "tier",
              "value": "starter"
            }
          ],
          "category": "software",
          "created_at": "2026-02-13T01:45:00Z",
          "custom_data": {
            "plan": "starter"
          },
          "description": "Standard monthly subscription",
          "name": "Starter plan",
          "published_at": "2026-02-13T02:05:00Z",
          "reference": "plan-starter-monthly",
          "tax_code": "txcd_software",
          "type": "digital"
        },
        "updated_at": "2026-02-13T04:10:00Z"
      },
      {
        "id": "pr_b1n9q2e5m6r7",
        "about": "Legacy promotional price",
        "active": false,
        "nominal": {
          "currency": "usd",
          "value": 2499
        },
        "archived_at": "2026-03-01T09:00:00Z",
        "created_at": "2026-01-10T08:00:00Z",
        "label": "Promo",
        "product": {
          "id": "prod_abc123xyz789",
          "about": "Starter plan for solo businesses",
          "active": true,
          "attributes": [
            {
              "name": "tier",
              "value": "starter"
            }
          ],
          "category": "software",
          "created_at": "2026-02-13T01:45:00Z",
          "custom_data": {
            "plan": "starter"
          },
          "description": "Standard monthly subscription",
          "name": "Starter plan",
          "published_at": "2026-02-13T02:05:00Z",
          "reference": "plan-starter-monthly",
          "tax_code": "txcd_software",
          "type": "digital"
        },
        "updated_at": "2026-03-01T09:00:00Z"
      }
    ]
  }
}

Update a price

Update an existing price's descriptive fields. Only label and about are mutable. The product association and the price's nominal amount remain fixed after creation, so create a new price when either needs to change.

Updating a price never reassigns it to a different product. If the price is already attached to a product, that relationship remains unchanged.

Request attributes

  • Name
    about
    Type
    string
    Description

    Updated description. Max 500 characters.

  • Name
    label
    Type
    string
    Description

    Updated display name. Max 100 characters.

  • Name
    price_id
    Type
    string
    Description

    The ID of the price to update.

Request

POST
/prices/update
curl https://api.zebo.dev/prices/update \
  -H "Authorization: Bearer $COMMERCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "price_id": "pr_k8m2x9v4n7p1",
    "label": "Monthly (discounted)",
    "about": "Promotional monthly rate for early adopters"
  }'
{
  "price": {
    "id": "pr_k8m2x9v4n7p1",
    "about": "Promotional monthly rate for early adopters",
    "active": true,
    "nominal": {
      "currency": "usd",
      "value": 2999
    },
    "created_at": "2026-02-13T02:00:00Z",
    "label": "Monthly (discounted)",
    "product": {
      "id": "prod_abc123xyz789",
      "about": "Starter plan for solo businesses",
      "active": true,
      "attributes": [
        {
          "name": "tier",
          "value": "starter"
        }
      ],
      "category": "software",
      "created_at": "2026-02-13T01:45:00Z",
      "custom_data": {
        "plan": "starter"
      },
      "description": "Standard monthly subscription",
      "name": "Starter plan",
      "published_at": "2026-02-13T02:05:00Z",
      "reference": "plan-starter-monthly",
      "tax_code": "txcd_software",
      "type": "digital"
    },
    "updated_at": "2026-02-13T03:00:00Z"
  }
}

Activate a price

Reactivate a previously deactivated price so it can be used again in new catalog flows. Activation does not change the amount, product association, or archive state—it only flips the price back to active: true.

Archived prices cannot be activated. If the price belongs to your authenticated application and is merely inactive, this endpoint makes it usable again immediately.

Request attributes

  • Name
    price_id
    Type
    string
    Description

    Price identifier to activate.

Request

POST
/prices/activate
curl https://api.zebo.dev/prices/activate       -H "Authorization: Bearer $COMMERCE_API_KEY"       -H "Content-Type: application/json"       -d '{
    "price_id": "pr_k8m2x9v4n7p1"
  }'
{
  "price": {
    "id": "pr_k8m2x9v4n7p1",
    "about": "Standard monthly subscription price",
    "active": true,
    "nominal": {
      "currency": "usd",
      "value": 2999
    },
    "created_at": "2026-02-13T02:00:00Z",
    "label": "Monthly",
    "product": {
      "id": "prod_abc123xyz789",
      "about": "Starter plan for solo businesses",
      "active": true,
      "attributes": [
        {
          "name": "tier",
          "value": "starter"
        }
      ],
      "category": "software",
      "created_at": "2026-02-13T01:45:00Z",
      "custom_data": {
        "plan": "starter"
      },
      "description": "Standard monthly subscription",
      "name": "Starter plan",
      "published_at": "2026-02-13T02:05:00Z",
      "reference": "plan-starter-monthly",
      "tax_code": "txcd_software",
      "type": "digital"
    },
    "updated_at": "2026-02-13T04:10:00Z"
  }
}

Deactivate a price

Deactivate a price so it is no longer usable in new flows. This is the reversible alternative to archiving: the price remains visible and can be reactivated later, but it stops being eligible for active catalog operations.

Deactivation only affects future catalog flows. Existing orders that already reference the price keep their recorded amount, and you can reactivate the same price later if you need to reuse it.

Request attributes

  • Name
    price_id
    Type
    string
    Description

    Price identifier to deactivate.

Request

POST
/prices/deactivate
curl https://api.zebo.dev/prices/deactivate       -H "Authorization: Bearer $COMMERCE_API_KEY"       -H "Content-Type: application/json"       -d '{
    "price_id": "pr_k8m2x9v4n7p1"
  }'
{
  "price": {
    "id": "pr_k8m2x9v4n7p1",
    "about": "Standard monthly subscription price",
    "active": false,
    "nominal": {
      "currency": "usd",
      "value": 2999
    },
    "created_at": "2026-02-13T02:00:00Z",
    "label": "Monthly",
    "product": {
      "id": "prod_abc123xyz789",
      "about": "Starter plan for solo businesses",
      "active": true,
      "attributes": [
        {
          "name": "tier",
          "value": "starter"
        }
      ],
      "category": "software",
      "created_at": "2026-02-13T01:45:00Z",
      "custom_data": {
        "plan": "starter"
      },
      "description": "Standard monthly subscription",
      "name": "Starter plan",
      "published_at": "2026-02-13T02:05:00Z",
      "reference": "plan-starter-monthly",
      "tax_code": "txcd_software",
      "type": "digital"
    },
    "updated_at": "2026-02-13T04:20:00Z"
  }
}

Was this page helpful?