Yep Platform Logo
REST API · Yep Platform Technical documentation for certified integrations

Products

Create, update, query, link, attach images and delete products — with deterministic pagination, explicit store_id selection, configurable limit and opt-in pagination metadata.

REST JSON Bearer Token New in 2026

Overview

The /api2/products endpoint is an integration/administrative route. It is not limited to active storefront products — it exposes the catalog for syncing with ERPs, PIMs, marketplaces and internal routines. The route supports both paginated listing and single record lookup by id or sku.

200
Max limitPer page, when limit is set.
20
Default limitWhen limit is missing or invalid.
1+
Explicit storeDeterministic in multi-store setups.
opt
Metadatatotal, last_page, has_next under include_pagination=1.
POST/api2/products/

Create a configurable product.

JSONCatalog
{
  "attribute_set_id": 4,
  "type_id": "configurable",
  "visibility": 4,
  "store_id": 1,
  "sku": "novo_configuravel",
  "name": "novo configuravel",
  "description": "Configurable product description",
  "short_description": "Short description",
  "price": 99.90,
  "status": 1,
  "tax_class_id": 2,
  "categories": [54, 59, 128],
  "website_id": [1],
  "additional_attributes": {
    "single_data": [
      {"key": "color", "value": "AZUL"},
      {"key": "ncm", "value": "5543"}
    ]
  },
  "configurable_attributes": [335]
}
POST/api2/products/

Create a simple product.

{
  "type_id": "simple",
  "attribute_set_id": 4,
  "sku": "produto_teste",
  "store_id": 1,
  "name": "Test product",
  "price": "2000",
  "special_price": "150",
  "weight": "0.5",
  "status": 1,
  "visibility": 4,
  "categories": [54, 59, 128],
  "website_id": [1],
  "stock_data": {"qty": "99", "is_in_stock": 1}
}
PATCH/api2/products/

Update a product.

{
  "type": "sku",
  "id": "novo_produto",
  "name": "New product name"
}
The update accepts partial success when parts of the payload are skipped due to invalid fields, attributes or values. The response details invalid_fields, invalid_attributes and invalid_attribute_values.
GET/api2/products/Updated

Fetch a product (single) or list with deterministic pagination.

?page=1&type=sku&id=novo_produto
POST/api2/products/vincular

Link simple products to a configurable.

{
  "type": "sku",
  "configurable_id": "novo_produto",
  "simples": "novo_configuravel"
}
DELETE/api2/products/

Delete a product.

{
  "type": "sku",
  "id": "novo_produto"
}

What's new in GET /api2/products

Three main improvements have been rolled out to the listing endpoint, making it more predictable in multi-store environments and more efficient for batch syncs.

5) Optional store_id support New

You can now pass store_id to make the result explicit and deterministic in multi-store scenarios. Without it, store selection follows the environment default; with it, your integration owns the decision.

store_id Optional New
Integer. ID of the store to be used as listing context. Recommended for any multi-store integration.

Example

GET /api2/products?page=1&store_id=1

6) Optional pagination metadata New

Opt-in pagination fields have been added to the response body. They are only returned when include_pagination=1 is sent, avoiding overhead for syncs that don't need this metadata.

include_pagination Optional New
Boolean flag (1 enables it). When active, includes total, last_page and has_next in the response.
total
Total number of products eligible for the current filter (only with include_pagination=1).
last_page
Last page number given the current limit.
has_next
Boolean indicating whether a next page exists. Useful to safely terminate sync loops.

Example

GET /api2/products?page=1&include_pagination=1

7) Optional limit support New

The endpoint now accepts limit to set the number of products per page. Invalid values (non-numeric, arrays, negative, zero or above the cap) are normalized to the default, ensuring no request breaks due to unexpected input.

RuleValueBehavior
Default20Applied when limit is omitted.
Maximum200Hard ceiling to protect the route under heavy load.
InvalidInvalid values are normalized to 20.

Examples

GET /api2/products?page=1&limit=50
GET /api2/products?page=1&limit=200

Supported usage patterns

Quick reference of the tested and certified combinations for GET /api2/products.

Default listing GET /api2/products
Paginated GET /api2/products?page=2
Custom limit GET /api2/products?page=1&limit=100
Lookup by ID GET /api2/products?id=24404
Lookup by SKU GET /api2/products?id=ABC-123&type=sku
Explicit store GET /api2/products?page=1&store_id=1
With metadata GET /api2/products?page=1&limit=100&include_pagination=1

Integration recommendations

Consolidated best practices after the endpoint evolution. Following them reduces rework, prevents infinite pagination and guarantees determinism in multi-store setups.

Recommended

  • Always send page explicitly in pagination routines.
  • Use store_id whenever the integration needs deterministic results in a multi-store environment.
  • Prefer limit=50 or limit=100 for regular syncs.
  • Use limit=200 only when you actually need to reduce the number of calls.
  • Use include_pagination=1 to control pagination progress safely (loop based on has_next).

Avoid

  • Sending parameters as arrays in scalar fields — for example id[] or limit[].
  • Assuming the endpoint returns only active storefront products. This is an integration/administrative route.
  • Relying on implicit ordering across pages in multi-store scenarios without store_id.

Sync tip

For periodic syncs, combine store_id + limit=100 + include_pagination=1. You get determinism, balanced throughput and a reliable stop condition (has_next=false).

Product images

POST/api2/products/imagem

Upload a base64-encoded image.

{
  "type": "sku",
  "product_id": "novo_produto",
  "position": 1,
  "label": "Image",
  "file_name": "my_image.png",
  "file_mime_type": "image/png",
  "file_content": "iVBORw0KGgoAAAANS...",
  "types": ["image"]
}
PATCH/api2/products/imagem

Update image metadata.

{
  "type": "sku",
  "product_id": "produtoteste",
  "image_id": "70449",
  "position": 999,
  "label": "Updated image",
  "types": ["image"]
}
DELETE/api2/products/imagem

Delete a product image.

{
  "type": "sku",
  "product_id": "produtoteste",
  "image_id": "70449"
}