Skip to content

Product templates API

Product templates API

GET /api/integrations/v2/{connection_id}/product-templates

The products customers see, each with its options and variants, keyset-paged on (updated_at, id).

A template’s updated_at moves with its name, description or options; a variant’s change moves that variant’s updated_at on /products.

Parameters

Name In Type Required Description
connection_id path string (uuid) yes Your custom integration’s id; the connection whose secret signs the request.
updated_since query string (date-time), nullable no Only rows changed at or after this instant (inclusive).
cursor query string, nullable no The next_cursor of the previous page, as given.
limit query integer no Page size; at most 250 rows are answered whatever is asked. Default 50.

Headers

Header Required Description
X-Yedran-Timestamp yes Unix seconds; within five minutes of the server’s clock.
X-Yedran-Signature yes Lowercase hex HMAC-SHA256, keyed with the integration’s API secret, over METHOD\npath\ntimestamp\nsha256_hex(body).
Yedran-Version no Optional: the contract version, 2026-10 today; absent is 2026-10. Any other value is 400 unsupported_version. Every answer echoes the version served.

Response 200

Schema ProductTemplatePageV2.

Field Type Required Description
data array of ProductTemplateV2 yes
next_cursor string, nullable yes

Example

Terminal window
curl -X GET "https://app.yedran.com/api/integrations/v2/{connection_id}/product-templates?limit=1" \
-H "X-Yedran-Timestamp: $TIMESTAMP" \
-H "X-Yedran-Signature: $SIGNATURE" \
-H "Yedran-Version: 2026-10"

Response 200:

{
"data": [
{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"external_id": "string",
"name": "string",
"description": "string",
"options": [
{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"name": "string",
"values": []
}
],
"variants": [
{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"sku": "string",
"active": false,
"options": []
}
],
"updated_at": "2026-10-02T09:00:00Z"
}
],
"next_cursor": "string"
}

Errors

Code Meaning
400 Bad Request
401 Unauthorized
422 Unprocessable Entity

GET /api/integrations/v2/{connection_id}/product-templates/{template_id}

One template by our id (a product’s template_id).

Parameters

Name In Type Required Description
connection_id path string (uuid) yes Your custom integration’s id; the connection whose secret signs the request.
template_id path string (uuid) yes

Headers

Header Required Description
X-Yedran-Timestamp yes Unix seconds; within five minutes of the server’s clock.
X-Yedran-Signature yes Lowercase hex HMAC-SHA256, keyed with the integration’s API secret, over METHOD\npath\ntimestamp\nsha256_hex(body).
Yedran-Version no Optional: the contract version, 2026-10 today; absent is 2026-10. Any other value is 400 unsupported_version. Every answer echoes the version served.

Response 200

Schema ProductTemplateV2.

Field Type Required Description
id string (uuid) yes
external_id string, nullable yes
name string yes
description string, nullable yes
options array of TemplateOptionV2 yes
variants array of TemplateVariantV2 yes
updated_at string (date-time) yes

Example

Terminal window
curl -X GET "https://app.yedran.com/api/integrations/v2/{connection_id}/product-templates/3f2504e0-4f89-11d3-9a0c-0305e82c3301" \
-H "X-Yedran-Timestamp: $TIMESTAMP" \
-H "X-Yedran-Signature: $SIGNATURE" \
-H "Yedran-Version: 2026-10"

Response 200:

{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"external_id": "string",
"name": "string",
"description": "string",
"options": [
{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"name": "string",
"values": [
{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"value": "string"
}
]
}
],
"variants": [
{
"id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"sku": "string",
"active": false,
"options": [
{
"option_id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"name": "string",
"value_id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"value": "string"
}
]
}
],
"updated_at": "2026-10-02T09:00:00Z"
}

Errors

Code Meaning
400 Bad Request
401 Unauthorized
404 Not Found
422 Unprocessable Entity

Schemas

ProductTemplatePageV2

A page of the workspace’s templates, (updated_at, id) ascending.

Field Type Required Description
data array of ProductTemplateV2 yes
next_cursor string, nullable yes

ProductTemplateV2

The product a customer sees, over its variants (0177), as the v2 API shows it.

external_id is the caller’s id for it (its template_external_id), from the bindings’ product_templates resource. variants lists every variant, archived ones included (active: false), by position then sku; a template without options has exactly one. updated_at is the template row’s own: it moves when the name, the description or the options change, not when a variant is added, edited or archived — those move the variant’s updated_at on /products, which carries template_id.

Field Type Required Description
id string (uuid) yes
external_id string, nullable yes
name string yes
description string, nullable yes
options array of TemplateOptionV2 yes
variants array of TemplateVariantV2 yes
updated_at string (date-time) yes

TemplateOptionV2

One option a template declares (“Color”), its values in display order.

Field Type Required Description
id string (uuid) yes
name string yes
values array of TemplateOptionValueV2 yes

TemplateVariantV2

One variant of a template — a sellable unit, the id of GET /products/{id}.

Field Type Required Description
id string (uuid) yes
sku string yes
active boolean yes
options array of VariantOptionV2 yes

TemplateOptionValueV2

One value a template’s option offers, with the id a variant selects it by.

Field Type Required Description
id string (uuid) yes
value string yes

VariantOptionV2

A variant’s value of one option: the ids it is stored by, with today’s names.

Field Type Required Description
option_id string (uuid) yes
name string yes
value_id string (uuid) yes
value string yes