Skip to main content
The Products API lets you manage your B2B product catalog — create products, update pricing tiers, activate or deactivate items, and search across your catalog. All endpoints require a valid Bearer token. The OrganizationId is read automatically from your JWT claims.

List products

Retrieve a paginated list of products in your catalog. Prices are resolved against the PriceTier, CurrencyCode, and CustomerNumber encoded in your token.
GET https://api.achievemomentum.com/api/products

Query parameters

pageNumber
integer
default:"1"
The page of results to return.
pageSize
integer
default:"25"
Number of products per page.
sortOn
string
default:"Sku"
Field to sort on. Common values: Sku, Name, Price.
sortDirection
string
default:"asc"
Sort direction. Accepts asc or desc.
filters
array
Optional array of filter objects. Each filter specifies a field, operator, and value. Supported operators: startswith, contains, notcontains, endswith, equals, notequals.

Response

Returns a paginated result containing an array of product objects.

Example

curl -X GET "https://api.achievemomentum.com/api/products?pageNumber=1&pageSize=25" \
  -H "Authorization: Bearer {token}"
{
  "data": [
    {
      "productId": "prod_a1b2c3d4",
      "organizationId": "org_4e9b7f22",
      "sku": "WIDGET-BLU-L",
      "name": "Blue Widget — Large",
      "description": "Heavy-duty blue widget, large format.",
      "category": "Widgets",
      "price": 24.99,
      "priceFormatted": "$24.99",
      "currencyCode": "USD",
      "prices": [
        { "tier": "Wholesale", "price": 18.50, "priceFormatted": "$18.50", "atQuantity": 1 },
        { "tier": "Wholesale", "price": 16.00, "priceFormatted": "$16.00", "atQuantity": 50 },
        { "tier": "Retail",    "price": 24.99, "priceFormatted": "$24.99", "atQuantity": 1 }
      ],
      "quantityOnHand": 240,
      "minimumOrderQuantity": 1,
      "quantityIncrement": 1,
      "weight": 1.2,
      "weightUnit": "lb",
      "dimensions": "10x8x4",
      "dimensionsUnit": "in",
      "upc": "012345678905",
      "active": true,
      "externalId": "ERP-SKU-00421",
      "createdAt": "2024-01-15T09:00:00Z",
      "updatedAt": "2024-05-20T14:32:00Z"
    }
  ],
  "totalRecords": 380,
  "currentPage": 1,
  "totalPages": 16
}

Search products

Search your catalog by keyword. Nymble Commerce matches on SKU, name, description, and UPC. Results are paginated and respect the same price-tier resolution as the list endpoint.
GET https://api.achievemomentum.com/api/products/search

Query parameters

searchTerm
string
required
The keyword or phrase to search for.
pageNumber
integer
default:"1"
The page of results to return.
pageSize
integer
default:"50"
Number of products per page.

Response

Returns a paginated result containing an array of product objects that match the search term.

Example

curl -X GET "https://api.achievemomentum.com/api/products/search?searchTerm=blue+widget&pageNumber=1&pageSize=25" \
  -H "Authorization: Bearer {token}"
{
  "data": [
    {
      "productId": "prod_a1b2c3d4",
      "sku": "WIDGET-BLU-L",
      "name": "Blue Widget — Large",
      "price": 24.99,
      "priceFormatted": "$24.99",
      "active": true
    }
  ],
  "totalRecords": 3,
  "currentPage": 1,
  "totalPages": 1
}

Get a product

Retrieve a single product by its SKU.
GET https://api.achievemomentum.com/api/products/{sku}

Path parameters

sku
string
required
The product’s stock-keeping unit (SKU).

Response

Returns a single product object.

Example

curl -X GET "https://api.achievemomentum.com/api/products/WIDGET-BLU-L" \
  -H "Authorization: Bearer {token}"
{
  "productId": "prod_a1b2c3d4",
  "organizationId": "org_4e9b7f22",
  "sku": "WIDGET-BLU-L",
  "name": "Blue Widget — Large",
  "description": "Heavy-duty blue widget, large format.",
  "category": "Widgets",
  "price": 24.99,
  "priceFormatted": "$24.99",
  "currencyCode": "USD",
  "prices": [
    { "tier": "Wholesale", "price": 18.50, "priceFormatted": "$18.50", "atQuantity": 1 }
  ],
  "quantityOnHand": 240,
  "minimumOrderQuantity": 1,
  "quantityIncrement": 1,
  "active": true,
  "externalId": "ERP-SKU-00421",
  "createdAt": "2024-01-15T09:00:00Z",
  "updatedAt": "2024-05-20T14:32:00Z"
}

Create a product

Create a new product in your catalog. Use PUT /api/products to upsert by SKU — if a product with the given SKU already exists, this call updates it.
PUT https://api.achievemomentum.com/api/products

Body parameters

sku
string
required
The product’s unique stock-keeping unit. Used as the primary identifier for upsert operations.
name
string
Display name for the product.
description
string
Full product description.
category
string
Category name to assign this product to.
price
number
Default base price for this product.
prices
array
Array of price-tier entries. Each entry sets a price for a given tier and optional quantity break.
[
  { "tier": "Wholesale", "price": 18.50, "atQuantity": 1 },
  { "tier": "Wholesale", "price": 16.00, "atQuantity": 50 },
  { "tier": "Retail",    "price": 24.99, "atQuantity": 1 }
]
quantityOnHand
integer
Current inventory quantity.
minimumOrderQuantity
integer
Minimum number of units a customer must order.
quantityIncrement
integer
Units must be ordered in multiples of this value.
weight
number
Product weight.
weightUnit
string
Unit for weight, e.g. lb or kg.
dimensions
string
Product dimensions as a string, e.g. "10x8x4".
dimensionsUnit
string
Unit for dimensions, e.g. in or cm.
upc
string
Universal Product Code.
active
boolean
default:"true"
Whether the product is active and visible in the catalog.
images
array
Array of image name strings to associate with this product. Image names must match images already uploaded via the Images API.
externalId
string
Your system’s identifier for this product. Used for idempotent imports — re-submitting a product with the same externalId updates the existing record rather than creating a duplicate.
productAttributes
object
A free-form dictionary of custom key-value attributes for this product, e.g. { "color": "blue", "material": "steel" }.

Response

Returns the created or updated product object.

Example

curl -X PUT "https://api.achievemomentum.com/api/products" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": "WIDGET-BLU-L",
    "name": "Blue Widget — Large",
    "description": "Heavy-duty blue widget, large format.",
    "category": "Widgets",
    "price": 24.99,
    "prices": [
      { "tier": "Wholesale", "price": 18.50, "atQuantity": 1 },
      { "tier": "Wholesale", "price": 16.00, "atQuantity": 50 },
      { "tier": "Retail",    "price": 24.99, "atQuantity": 1 }
    ],
    "quantityOnHand": 240,
    "minimumOrderQuantity": 1,
    "quantityIncrement": 1,
    "weight": 1.2,
    "weightUnit": "lb",
    "dimensions": "10x8x4",
    "dimensionsUnit": "in",
    "upc": "012345678905",
    "active": true,
    "externalId": "ERP-SKU-00421",
    "productAttributes": { "color": "blue", "material": "steel" }
  }'

Update product prices

Replace all price-tier entries for one or more products in a single call. This endpoint is designed for bulk price updates — for example, syncing a new price list from your ERP.
PUT https://api.achievemomentum.com/api/products/prices

Body parameters

productUpdates
array
required
Array of product price update objects. Each entry is matched by sku and its prices are fully replaced.
[
  {
    "sku": "WIDGET-BLU-L",
    "prices": [
      { "tier": "Wholesale", "price": 17.00, "atQuantity": 1 },
      { "tier": "Retail",    "price": 25.99, "atQuantity": 1 }
    ]
  }
]
Each object contains:
FieldTypeDescription
skustringThe product SKU to update.
prices[].tierstringThe price tier name, e.g. Wholesale or Retail.
prices[].pricenumberThe price for this tier.
prices[].atQuantityintegerThe minimum quantity at which this price applies (for volume breaks).

Example

curl -X PUT "https://api.achievemomentum.com/api/products/prices" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "productUpdates": [
      {
        "sku": "WIDGET-BLU-L",
        "prices": [
          { "tier": "Wholesale", "price": 17.00, "atQuantity": 1 },
          { "tier": "Wholesale", "price": 14.50, "atQuantity": 100 },
          { "tier": "Retail",    "price": 25.99, "atQuantity": 1 }
        ]
      },
      {
        "sku": "WIDGET-RED-M",
        "prices": [
          { "tier": "Wholesale", "price": 15.00, "atQuantity": 1 },
          { "tier": "Retail",    "price": 22.99, "atQuantity": 1 }
        ]
      }
    ]
  }'
Pass multiple objects in productUpdates to update prices for many products in one request. Each entry is matched by sku and its prices are fully replaced.

The product object

productId
string
Nymble Commerce’s internal unique identifier for the product.
organizationId
string
The organization this product belongs to.
sku
string
The product’s stock-keeping unit.
name
string
Display name.
description
string
Full product description.
category
string
The category name assigned to this product.
price
number
The resolved base price for the requesting token’s price tier and currency.
priceFormatted
string
Human-readable formatted price, e.g. "$24.99".
currencyCode
string
ISO 4217 currency code, e.g. USD.
prices
array
All price-tier entries for this product.
quantityOnHand
integer
Current inventory quantity.
minimumOrderQuantity
integer
Minimum units per order.
quantityIncrement
integer
Order quantity step size.
weight
number
Product weight.
weightUnit
string
Unit for weight, e.g. lb.
dimensions
string
Dimensions string, e.g. "10x8x4".
dimensionsUnit
string
Unit for dimensions, e.g. in.
upc
string
Universal Product Code.
active
boolean
Whether the product is active in the catalog.
images
array
Array of image objects associated with this product.
productAttributes
object
Custom key-value attribute dictionary.
externalId
string
Your system’s identifier for this product.
createdAt
string
ISO 8601 timestamp of when the product was created.
updatedAt
string
ISO 8601 timestamp of the most recent update.