Beta
Not authenticated — log in first
VendorProducts

List Products

List Products — vendor REST API endpoint.

GET/vendor/productsVendor bearer token required

List Products

List products belonging to your vendor with cursor-based pagination.

What this means in plain English

Returns a paginated slice of your vendor catalog. Use first/after (or last/before) cursors from pageInfo to navigate. estimatedTotalCount is approximate.

When to use this

  • Syncing your product catalog to an external system.
  • Auditing published vs draft products.

Query parameters

NameTypeRequiredDescription
searchstringNoSearch by name or SKU.
statusstringNoFilter by product status: PUBLISHED, PENDING_APPROVAL, DRAFT, HIDDEN, or ARCHIVED (not ACTIVE). Leave empty to list all.
hasPendingRevisionbooleanNoWhen true, only products with staged changes awaiting admin approval on a live product.
needsModerationbooleanNoWhen true, returns products with status `PENDING_APPROVAL` (awaiting first publish) or a non-empty `pendingRevision` (live product with staged edits).
categoryIdstring (UUID)NoFilter by category. Use [List Categories](/docs/v1/vendor/categories/list) to look up valid UUIDs.
firstintegerNoNumber of products to return (default 24, max 100).
afterstringNoOpaque cursor — pass pageInfo.endCursor from the previous page for the next page. Leave empty for the first page.
beforestringNoOpaque cursor for backward pagination (use with last). Leave empty unless paginating backward.
lastintegerNoNumber of products when paginating backward (max 100). Leave empty for forward pagination.

Request example

curl -X GET 'https://api.next.gcommerce.glass/api/v1/vendor/products'

Response examples

200Success
{
  "products": [{
  "id": "550e8400-e29b-41d4-a716-446655440020",
  "name": "Widget Pro",
  "slug": "widget-pro",
  "sku": "WIDGET-001",
  "shortDescription": "Premium widget",
  "warranty": "1 year limited",
  "description": "High-quality widget for industrial use.",
  "pageTitle": "Widget Pro | Jane's Store",
  "pageDescription": "Shop the Widget Pro — durable, lightweight, made in USA.",
  "brand": "Acme",
  "countryOfOrigin": "US",
  "manufacturer": "Acme Corp",
  "leadTime": 3,
  "unspc": "53120000",
  "commodityCode": "12345678",
  "eccn": "EAR99",
  "freeShipping": false,
  "abilityOne": false,
  "madeInUsa": true,
  "greenProduct": false,
  "keyFeatures": ["Durable", "Lightweight"],
  "videos": null,
  "accountCode": "ACC-001",
  "programCode": "PROG-001",
  "resourceCode": "RES-001",
  "status": "PUBLISHED",
  "pendingRevision": null,
  "pendingRevisionSubmittedAt": null,
  "bulkImportJobId": null,
  "createdAt": "2026-01-15T12:00:00.000Z",
  "updatedAt": "2026-03-01T08:30:00.000Z",
  "variants": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440021",
      "productId": "550e8400-e29b-41d4-a716-446655440020",
      "sku": "WIDGET-001",
      "upc": "012345678905",
      "unitOfMeasure": "EA",
      "partNumber": "MPN-001",
      "name": "Default",
      "price": "29.99",
      "listPrice": "39.99",
      "vendorPrice": "19.99",
      "weight": "1.50",
      "initialInventory": 100,
      "attributes": { "color": "red" },
      "isActive": true,
      "createdAt": "2026-01-15T12:00:00.000Z",
      "updatedAt": "2026-03-01T08:30:00.000Z"
    }
  ],
  "images": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440022",
      "productId": "550e8400-e29b-41d4-a716-446655440020",
      "variantId": null,
      "url": "https://api.next.gcommerce.glass/assets/products/images/550e8400-e29b-41d4-a716-446655440022",
      "alt": "Widget Pro front view",
      "sortOrder": 0,
      "isPrimary": true
    }
  ],
  "documents": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440023",
      "productId": "550e8400-e29b-41d4-a716-446655440020",
      "title": "Spec sheet",
      "type": "spec",
      "url": "https://example.com/spec.pdf",
      "document": "https://api.next.gcommerce.glass/assets/products/widget-pro/docs/spec.pdf",
      "size": "245.50",
      "sortOrder": 0,
      "createdAt": "2026-01-15T12:00:00.000Z",
      "updatedAt": "2026-01-15T12:00:00.000Z"
    }
  ],
  "categories": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440070",
      "name": "Industrial Supplies",
      "slug": "industrial-supplies"
    }
  ],
  "collections": [],
  "tags": [],
  "facetValues": [],
  "reviews": [],
  "averageRating": 4.5,
  "totalReviews": 12
}],
  "pageInfo": {
  "startCursor": "MjAyNi0wMS0xNVQxMjowMDowMC4wMDBafDU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMA==",
  "endCursor": "MjAyNS0xMi0wMVQxMDowMDowMC4wMDBafDU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAxMA==",
  "hasNextPage": true,
  "hasPreviousPage": false
},
  "estimatedTotalCount": 12345
}

Status codes

200

OK

Request succeeded.

401

Unauthorized

Missing or invalid bearer token.

403

Forbidden

Insufficient permissions for this action.

400

Bad Request

Validation failed or invalid parameters.

404

Not Found

Resource not found.

429

Too Many Requests

Global rate limit exceeded (10,000 requests per 10 minutes per IP).

500

Internal Server Error

Unexpected server error.

403

Forbidden

No vendor membership, or insufficient vendor role (requires OWNER, ADMIN, or EDITOR for write operations).

Leave search, status, categoryId, after, before, and last empty to list your full catalog (seed vendor returns 3 products on Acme).
Product status values are PUBLISHED, PENDING_APPROVAL, DRAFT, HIDDEN, ARCHIVED — not ACTIVE.
Vendor publish intent is stored as PENDING_APPROVAL until an admin approves it.
Live products with staged edits stay `PUBLISHED` — inspect `pendingRevision` on each product (use `?hasPendingRevision=true` to list only those).
Media fields (`images[].url`, `documents[].document`) are absolute public URLs: `{API_ORIGIN}/assets/…` (see [Media URLs](/docs/v1/vendor#media-urls-images--documents)).

Try it

Uses your saved session from login. Edit values and send a live request, or copy the cURL command.