{"info":{"name":"AdCore public API","description":"Generated from `GET /api/v1/openapi.json`. Set `apiKey` to your key (Settings → API) and `sku` to a SKU of your store; the requests by id also read `productId`, `variantId` or `assetId`.","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{apiKey}}","type":"string"}]},"variable":[{"key":"baseUrl","value":"https://www.adcore.com.br"},{"key":"apiKey","value":""},{"key":"sku","value":""},{"key":"productId","value":""},{"key":"variantId","value":""},{"key":"assetId","value":""}],"item":[{"name":"List products","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/products","host":["{{baseUrl}}"],"path":["api","v1","products"],"query":[{"key":"limit","value":"50","description":"Page size, 1 to 100.","disabled":true},{"key":"offset","value":"0","disabled":true}]},"description":"Ordered by the product record's own last update (`updatedAt`), newest first. Editing only an attribute value or a variant does not move a product in this order."},"response":[]},{"name":"Get a product with its variants and assets","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/products/:productId","host":["{{baseUrl}}"],"path":["api","v1","products",":productId"],"variable":[{"key":"productId","value":"{{productId}}","description":"Product id."}]}},"response":[]},{"name":"Get variants by SKU","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/variants?sku={{sku}}","host":["{{baseUrl}}"],"path":["api","v1","variants"],"query":[{"key":"sku","value":"{{sku}}","description":"Repeat to look up several SKUs, 1 to 100."}]},"description":"Up to 100 SKUs per call, repeating the parameter: `?sku=SKU-1001&sku=SKU-1002`. A SKU matches the SKU your catalogue shows for the variant: letter case is ignored (send each `sku` without surrounding spaces). A requested SKU containing `ß` finds a stored code containing `ß` or `SS`, but a stored code containing `ß` is not guaranteed to match a request containing `SS`. The placeholder variant a product with several variants carries under the product code is not returned. When your store has a SKU code rule that names the product field holding the SKU of a single-variant product (whose only variant carries the product code), that product is found by the SKU in that field; without such a rule, by its variant code. Each SKU with no variant in your store comes back in `notFound`, spelled as you sent it; a SKU sent twice is answered once. A SKU that matches more than one variant (two codes that differ only in case, for example) returns each of them, all with the same `requestedSku`: key your results by `requestedSku` and expect a list. Each variant carries at most 20 assets (`assetsTotal` says how many it has), and a response that would exceed 2097152 bytes answers 400: send fewer SKUs per call."},"response":[{"name":"Get variants by SKU: example","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/variants?sku={{sku}}","host":["{{baseUrl}}"],"path":["api","v1","variants"],"query":[{"key":"sku","value":"{{sku}}","description":"Repeat to look up several SKUs, 1 to 100."}]},"description":"Up to 100 SKUs per call, repeating the parameter: `?sku=SKU-1001&sku=SKU-1002`. A SKU matches the SKU your catalogue shows for the variant: letter case is ignored (send each `sku` without surrounding spaces). A requested SKU containing `ß` finds a stored code containing `ß` or `SS`, but a stored code containing `ß` is not guaranteed to match a request containing `SS`. The placeholder variant a product with several variants carries under the product code is not returned. When your store has a SKU code rule that names the product field holding the SKU of a single-variant product (whose only variant carries the product code), that product is found by the SKU in that field; without such a rule, by its variant code. Each SKU with no variant in your store comes back in `notFound`, spelled as you sent it; a SKU sent twice is answered once. A SKU that matches more than one variant (two codes that differ only in case, for example) returns each of them, all with the same `requestedSku`: key your results by `requestedSku` and expect a list. Each variant carries at most 20 assets (`assetsTotal` says how many it has), and a response that would exceed 2097152 bytes answers 400: send fewer SKUs per call."},"status":"OK","code":200,"header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"data\": [\n    {\n      \"id\": \"cm0examplevariant0001\",\n      \"productId\": \"cm0exampleproduct0001\",\n      \"sku\": \"SKU-1001\",\n      \"requestedSku\": \"sku-1001\",\n      \"name\": \"Example product 110V\",\n      \"isDefault\": false,\n      \"assets\": [\n        {\n          \"id\": \"cm0exampleasset000001\",\n          \"variantId\": \"cm0examplevariant0001\",\n          \"url\": \"https://www.adcore.com.br/api/media/example-token?v=3\",\n          \"altText\": \"Front view\",\n          \"tags\": [\n            \"front\"\n          ],\n          \"isPrimary\": true,\n          \"format\": \"jpg\",\n          \"kind\": \"image\",\n          \"videoLink\": null,\n          \"documentRole\": null,\n          \"width\": 1200,\n          \"height\": 1200,\n          \"sizeBytes\": 245760,\n          \"version\": 3,\n          \"approvalStatus\": \"APPROVED\",\n          \"usageRights\": {\n            \"license\": null,\n            \"expiresAt\": null\n          },\n          \"createdAt\": \"2026-10-01T12:00:00.000Z\",\n          \"updatedAt\": \"2026-10-20T09:30:00.000Z\"\n        }\n      ],\n      \"assetsTotal\": 1\n    }\n  ],\n  \"notFound\": [\n    \"SKU-9999\"\n  ]\n}"}]},{"name":"Get a variant (SKU) with its assets","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/variants/:variantId","host":["{{baseUrl}}"],"path":["api","v1","variants",":variantId"],"variable":[{"key":"variantId","value":"{{variantId}}","description":"Variant id."}]}},"response":[]},{"name":"Get a DAM asset","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/assets/:assetId","host":["{{baseUrl}}"],"path":["api","v1","assets",":assetId"],"variable":[{"key":"assetId","value":"{{assetId}}","description":"Asset id."}]}},"response":[]},{"name":"Pull events after a cursor","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/events","host":["{{baseUrl}}"],"path":["api","v1","events"],"query":[{"key":"limit","value":"50","description":"Page size, 1 to 100.","disabled":true},{"key":"cursor","value":"","disabled":true},{"key":"type","value":"","description":"Repeat to select several types.","disabled":true}]},"description":"Oldest first. Pass `nextCursor` back as `cursor` to resume exactly after the last event received; it stays the same when nothing new arrived. Both event types come from recorded history, so a change that was not recorded emits nothing; the `ProductPublishedEvent` and `AssetChangedEvent` schemas say which."},"response":[]},{"name":"Get a complete Data Lake snapshot with download links","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/exports/latest","host":["{{baseUrl}}"],"path":["api","v1","exports","latest"],"query":[{"key":"format","value":"jsonl","disabled":true},{"key":"dt","value":"","description":"UTC partition date within retention.","disabled":true}]},"description":"Requires a read key, PIM in the site contract and Data Lake enabled for the site. Reads completed snapshots only; it never starts generation. Defaults to jsonl (ndjson is an alias); parquet must have been generated separately. With dt, reads the last complete snapshot for that UTC day; without dt, the latest complete snapshot of the format. Retention is 30 UTC days including today. Each file URL expires after 900 seconds. Keep the URLs private. Verify every downloaded file against its size, row count and SHA-256. A disabled export answers 403 datalake_disabled; a missing, incomplete or out-of-retention snapshot answers 404 export_not_ready."},"response":[]},{"name":"This document","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{baseUrl}}/api/v1/openapi.json","host":["{{baseUrl}}"],"path":["api","v1","openapi.json"]},"auth":{"type":"noauth"}},"response":[]}]}