{"info":{"_postman_id":"b6f99448-355b-4b4c-8016-2c1753f7c0cc","name":"Product Catalog - External API","description":"<html><head></head><body><h1 id=\"product-catalog-service-external-api\">Product Catalog Service - External API</h1>\n<p>This collection provides the external API endpoints for the <strong>Product Catalog</strong> using system user (service account) authentication via the <strong>e-Agora</strong> platform.</p>\n<h2 id=\"getting-started\">Getting Started</h2>\n<h3 id=\"1-authentication\">1. Authentication</h3>\n<p>Use the <strong>Sign In (System User)</strong> request to obtain an access token using <code>client_credentials</code>. The token is automatically saved and injected into all subsequent product requests.</p>\n<h3 id=\"2-product-operations\">2. Product Operations</h3>\n<p>Once authenticated, you can:</p>\n<ul>\n<li><p><strong>Create</strong> a new product</p>\n</li>\n<li><p><strong>Get</strong> an existing product by GTIN</p>\n</li>\n<li><p><strong>Update</strong> an existing product by GTIN</p>\n</li>\n</ul>\n<h2 id=\"variables\">Variables</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>baseUrl</code></td>\n<td>Base URL of the e-Agora platform</td>\n</tr>\n<tr>\n<td><code>client_id</code></td>\n<td>Service account client ID</td>\n</tr>\n<tr>\n<td><code>client_secret</code></td>\n<td>Service account client secret</td>\n</tr>\n<tr>\n<td><code>accessToken</code></td>\n<td>Auto-populated after sign-in</td>\n</tr>\n<tr>\n<td><code>productGtin</code></td>\n<td>GTIN of the product to get/update</td>\n</tr>\n</tbody>\n</table>\n</div></body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Product Catalog Service - External API","slug":"product-catalog-service-external-api"}],"owner":"52934370","collectionId":"b6f99448-355b-4b4c-8016-2c1753f7c0cc","publishedId":"2sBXqDs3So","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-04-17T16:06:31.000Z"},"item":[{"name":"Authentication","item":[{"name":"Sign In (System User)","event":[{"listen":"test","script":{"exec":["pm.test('Status is 200 OK', () => {","    pm.response.to.have.status(200);","});","","pm.test('Access token is returned and saved', () => {","    const body = pm.response.json();","    const token = body.access_token || body.accessToken || body.token;","    pm.expect(token, 'Token should be present in response').to.exist;","","    pm.collectionVariables.set('accessToken', token);","    console.log('Access token saved successfully');","});"],"type":"text/javascript","id":"1ed78947-ee8a-413f-9d1b-d06e135b4560"}}],"id":"567914e6-ce13-4625-a0c1-959445c4c438","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"response_type","value":"client_credentials","type":"text"},{"key":"client_id","value":"","type":"text"},{"key":"client_secret","value":"","type":"text"}]},"url":"https://e-agora.equadis.com/api/signin","description":"<p>Authenticate using a service account (client credentials) on the <strong>ea-backend</strong> service.</p>\n<p><strong>Request body (form-data):</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>response_type</code></td>\n<td>string</td>\n<td>Must be <code>client_credentials</code></td>\n</tr>\n<tr>\n<td><code>client_id</code></td>\n<td>string</td>\n<td>Your service account ID (e.g. <code>SA1234</code>)</td>\n</tr>\n<tr>\n<td><code>client_secret</code></td>\n<td>string</td>\n<td>Your service account secret</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Response:</strong> Returns an access token that is automatically saved to the <code>accessToken</code> collection variable.</p>\n","urlObject":{"path":["api","signin"],"host":["https://e-agora.equadis.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"567914e6-ce13-4625-a0c1-959445c4c438"}],"id":"3214997f-ba6d-43a3-b797-c2793cb1c3f9","description":"<p>Authenticate as a system user (service account) using client credentials on the <strong>ea-backend</strong> service.</p>\n<p>Run the <strong>Sign In</strong> request first — the access token is automatically saved and used by all product requests.</p>\n","_postman_id":"3214997f-ba6d-43a3-b797-c2793cb1c3f9"},{"name":"Products","item":[{"name":"Create Product","event":[{"listen":"test","script":{"exec":["pm.test('Status is 201 Created', () => {","    pm.response.to.have.status(201);","});"],"type":"text/javascript","packages":{},"requests":{},"id":"ff6d7220-0ea3-4859-9ccc-3a007721d371"}},{"listen":"prerequest","script":{"exec":[],"type":"text/javascript","id":"86162aac-d6dd-4206-8541-2aa3d716b461"}}],"id":"e9f996f2-9c9f-4e73-8a97-df35fc0eef86","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"gtin\": \"<string> (required)\",\n  \"categoryId\": \"<UUID> (required)\",\n  \"fields\": [\n    {\n      \"fieldId\": \"<string - UUID>\",\n      \"label\": \"<string>\",\n      \"value\": [\n        {\n          \"country\": [\"<string>\"],\n          \"retailer\": [\"<string>\"],\n          \"allRecipients\": \"<boolean>\",\n          \"language\": \"<string (e.g. fr, en)>\",\n          \"value\": \"<string>\"\n        }\n      ]\n    },\n    {\n      \"fieldId\": \"<string - UUID>\",\n      \"label\": \"<string>\",\n      \"value\": \"<string - single select option>\"\n    },\n    {\n      \"fieldId\": \"<string - UUID>\",\n      \"label\": \"<string>\",\n      \"value\": [\"<string - multi select option 1>\", \"<string - multi select option 2>\"]\n    }\n  ],\n  \"picturesUrl\": [\"<string - image URL>\"],\n  \"characteristics\": [\n    {\n      \"key\": \"<string>\",\n      \"value\": \"<string>\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://e-agora.equadis.com/api/external/products","description":"<p>Create a new product in the catalog.</p>\n<p><strong>Required fields:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>gtin</code></td>\n<td>string</td>\n<td>Global Trade Item Number (must be unique)</td>\n</tr>\n<tr>\n<td><code>categoryId</code></td>\n<td>UUID</td>\n<td>Product category ID</td>\n</tr>\n<tr>\n<td><code>fields</code></td>\n<td>array of FieldValueDto</td>\n<td>Product field values (at least one required)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Optional fields:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>picturesUrl</code></td>\n<td>array of string</td>\n<td>Image URLs (processed server-side)</td>\n</tr>\n<tr>\n<td><code>pictures</code></td>\n<td>array of ProductImageDto</td>\n<td>Product images</td>\n</tr>\n<tr>\n<td><code>characteristics</code></td>\n<td>array of KeyValueDto</td>\n<td>Product characteristics (key-value pairs)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>FieldValueDto:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>fieldId</code></td>\n<td>string (UUID)</td>\n<td>Field identifier</td>\n</tr>\n<tr>\n<td><code>label</code></td>\n<td>string</td>\n<td>Field label</td>\n</tr>\n<tr>\n<td><code>value</code></td>\n<td>object</td>\n<td>Field value (varies by type, see examples below)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Field value types:</strong></p>\n<ul>\n<li><strong>TEXT (language-scoped):</strong> <code>{ \"fieldId\": \"...\", \"label\": \"...\", \"value\": [{ \"country\": [], \"retailer\": [], \"allRecipients\": true, \"language\": \"fr\", \"value\": \"text\" }] }</code></li>\n<li><strong>SINGLE_SELECT:</strong> <code>{ \"fieldId\": \"...\", \"label\": \"...\", \"value\": \"OptionValue\" }</code></li>\n<li><strong>MULTI_SELECT:</strong> <code>{ \"fieldId\": \"...\", \"label\": \"...\", \"value\": [\"Option1\", \"Option2\"] }</code></li>\n</ul>\n<p><strong>ProductImageDto:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>country</code></td>\n<td>array of string</td>\n<td>Countries this image applies to</td>\n</tr>\n<tr>\n<td><code>retailer</code></td>\n<td>array of string</td>\n<td>Retailers this image applies to</td>\n</tr>\n<tr>\n<td><code>allRecipients</code></td>\n<td>boolean</td>\n<td>True if image applies to all recipients</td>\n</tr>\n<tr>\n<td><code>imageId</code></td>\n<td>UUID</td>\n<td>Image identifier</td>\n</tr>\n<tr>\n<td><code>main</code></td>\n<td>boolean</td>\n<td>Whether this is the main image</td>\n</tr>\n<tr>\n<td><code>validityStartDate</code></td>\n<td>datetime</td>\n<td>Image validity start</td>\n</tr>\n<tr>\n<td><code>validityEndDate</code></td>\n<td>datetime</td>\n<td>Image validity end</td>\n</tr>\n<tr>\n<td><code>value</code></td>\n<td>array of UUID</td>\n<td>Image resource IDs</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Response:</strong> <code>201 Created</code> (empty body).</p>\n<p><strong>Error responses:</strong></p>\n<ul>\n<li><code>400</code> — Validation errors (missing mandatory fields, invalid dropdown values, duplicate GTIN)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"85deefdc-1113-45d4-888f-82e19b6120ba","id":"85deefdc-1113-45d4-888f-82e19b6120ba","name":"Products","type":"folder"}},"urlObject":{"path":["api","external","products"],"host":["https://e-agora.equadis.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"e9f996f2-9c9f-4e73-8a97-df35fc0eef86"},{"name":"Get Product by GTIN","event":[{"listen":"test","script":{"exec":["pm.test('Status is 200 OK', () => {","    pm.response.to.have.status(200);","});","","pm.test('Response contains product data', () => {","    const body = pm.response.json();","    pm.expect(body.gtin).to.exist;","});"],"type":"text/javascript","id":"aa4b12d6-0220-4304-8cb1-4d39421a3911"}}],"id":"b1535400-8d80-4fff-9e93-92f4b58019d5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://e-agora.equadis.com/api/external/products/","description":"<p>Retrieve a product by its GTIN.</p>\n<p><strong>Path parameter:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>productGtin</code></td>\n<td>string</td>\n<td>The product's Global Trade Item Number</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Response:</strong> <code>200 OK</code> with <code>ProductExternalDto</code>:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>categoryId</code></td>\n<td>UUID</td>\n<td>Product category ID</td>\n</tr>\n<tr>\n<td><code>gtin</code></td>\n<td>string</td>\n<td>Global Trade Item Number</td>\n</tr>\n<tr>\n<td><code>pictures</code></td>\n<td>array of ProductImageDto</td>\n<td>Product images</td>\n</tr>\n<tr>\n<td><code>fields</code></td>\n<td>array of FieldValueDto</td>\n<td>Product field values</td>\n</tr>\n<tr>\n<td><code>characteristics</code></td>\n<td>array of KeyValueDto</td>\n<td>Product characteristics</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"85deefdc-1113-45d4-888f-82e19b6120ba","id":"85deefdc-1113-45d4-888f-82e19b6120ba","name":"Products","type":"folder"}},"urlObject":{"path":["api","external","products",""],"host":["https://e-agora.equadis.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"b1535400-8d80-4fff-9e93-92f4b58019d5"},{"name":"Update Product by GTIN","event":[{"listen":"test","script":{"exec":["pm.test('Status is 204 No Content', () => {","    pm.response.to.have.status(204);","});"],"type":"text/javascript","packages":{},"requests":{},"id":"3bb17169-2207-4c12-a99d-d2b26ab1011b"}},{"listen":"prerequest","script":{"exec":[],"type":"text/javascript","id":"220559b4-0286-4818-99f8-a8e1e0a1ae97"}}],"id":"019aa5db-ff4e-4881-9355-4a402c9cd5e5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"fields\": [\n    {\n      \"fieldId\": \"<string - UUID>\",\n      \"label\": \"<string>\",\n      \"value\": [\n        {\n          \"country\": [\"<string>\"],\n          \"retailer\": [\"<string>\"],\n          \"allRecipients\": \"<boolean>\",\n          \"language\": \"<string (e.g. fr, en)>\",\n          \"value\": \"<string>\"\n        }\n      ]\n    },\n    {\n      \"fieldId\": \"<string - UUID>\",\n      \"label\": \"<string>\",\n      \"value\": \"<string - single select option>\"\n    },\n    {\n      \"fieldId\": \"<string - UUID>\",\n      \"label\": \"<string>\",\n      \"value\": [\"<string - multi select option 1>\", \"<string - multi select option 2>\"]\n    }\n  ],\n  \"picturesUrl\": [\"<string - image URL>\"],\n  \"characteristics\": [\n    {\n      \"key\": \"<string>\",\n      \"value\": \"<string>\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://e-agora.equadis.com/api/external/products/","description":"<p>Update an existing product by its GTIN.</p>\n<p><strong>Path parameter:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>productGtin</code></td>\n<td>string</td>\n<td>The product's Global Trade Item Number</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Required fields:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>fields</code></td>\n<td>array</td>\n<td>Product field values (at least one required)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Optional fields:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>categoryId</code></td>\n<td>UUID</td>\n<td>Product category ID</td>\n</tr>\n<tr>\n<td><code>pictures</code></td>\n<td>array</td>\n<td>Product images</td>\n</tr>\n<tr>\n<td><code>characteristics</code></td>\n<td>array</td>\n<td>Product characteristics</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Notes:</strong></p>\n<ul>\n<li><code>gtin</code> cannot be changed (it is used as the identifier in the path)</li>\n<li>Omitted fields are preserved from the existing product (patch semantics)</li>\n<li>Mandatory field validation is NOT enforced on update</li>\n</ul>\n<p><strong>Response:</strong> <code>204 No Content</code> on success.</p>\n<p><strong>Error responses:</strong></p>\n<ul>\n<li><code>400</code> — Validation errors (invalid dropdown values)</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"85deefdc-1113-45d4-888f-82e19b6120ba","id":"85deefdc-1113-45d4-888f-82e19b6120ba","name":"Products","type":"folder"}},"urlObject":{"path":["api","external","products",""],"host":["https://e-agora.equadis.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"019aa5db-ff4e-4881-9355-4a402c9cd5e5"}],"id":"85deefdc-1113-45d4-888f-82e19b6120ba","description":"<p>Product operations via the <strong>product-catalog-service</strong> external API (<code>/external/products</code>).</p>\n<p>All requests in this folder use Bearer token authentication — run <strong>Sign In</strong> first.</p>\n<p><strong>Important:</strong> The external API identifies products by <strong>GTIN</strong> (not UUID).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"_postman_id":"85deefdc-1113-45d4-888f-82e19b6120ba"}],"variable":[{"key":"baseUrl","value":"https://e-agora.equadis.com","type":"string","description":"Base URL of the e-Agora platform"},{"key":"accessToken","value":"","type":"string","description":"Bearer token (auto-populated after sign-in)"},{"key":"productGtin","value":"","type":"string","description":"GTIN of the product (used for get/update)"},{"key":"client_id","value":"","type":"string","description":"Service account client ID"},{"key":"client_secret","value":"","type":"string","description":"Service account client secret"}]}