{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}
Retailer Stores
Upsert physical stores in bulk
Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result.
Rows are reconciled, not inserted. Each row is tied to an existing store by exact store number, then by proximity within proximity_m, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer’s own numbering.
Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in unmatched_existing and left exactly as it is; a pair the matcher finds contradictory is reported in the row’s conflict and left unrekeyed.
dry_run defaults to true: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher’s real verdict rather than an estimate, and a first call writes nothing. Send dry_run: false to commit.
A dataset larger than one call. Batch it, and send each call the store_ids the other batches’ rows landed on as already_claimed_store_ids. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call’s unmatched_existing is the dataset figure. Without it every census field is per call and unmatched_existing does not sum.
retailer_id is a retailers.Retailer. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created.
Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.
Store rows to reconcile, at most 1,000 per call and at most 2.5 MiB (2,621,440 bytes) of request body — the server's upload ceiling, answered with 413 when exceeded. The byte limit usually binds first: 1,000 first-party rows carrying seven-day opening hours in extras serialise to about 2.7 MB, so size batches by bytes, not rows. Results come back in request order, each carrying its index. Matching is one-to-one within a call, so a store claimed by an earlier call is re-matched on the store-number tier in the next one — which is what makes repeating a batch idempotent rather than duplicative. To reconcile one dataset split across calls as if it were one pass, send already_claimed_store_ids.
For a dataset split across several calls: the store_id of every row result from the other batches of the same run (at most 50,000). No row in this call can match one of these stores, so matching stays one-to-one across the whole dataset rather than per call, and they are left out of unmatched_existing — which makes the last call's unmatched_existing and unmatched_existing_store_ids the dataset-wide figures. Leave out this batch's own earlier results when retrying it, or its rows cannot re-match their stores. Ids that are not this retailer's stores are ignored; already_claimed_stores reports how many were used.
Maximum array length: 50000
URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
When true (the default) every path runs against real rows and the transaction is rolled back, so the results are the matcher's real verdict and nothing is written. Send false to commit.
Match radius in metres for the proximity tier (default 100). Capped at 500 m: pairs beyond the match radius but within it are reported as near_misses for a human to judge, and widening the radius to force a match is exactly what the tiered matcher exists to avoid.
ISO 3166-1 alpha-2 region used to parse national phone numbers into E.164. An unassigned code parses nothing, so every phone in the batch would be counted invalid rather than written — silently, since a bad parse is a counter and not an error.
Required string length: 2
Pattern: ^[A-Za-z]{2}$
Response
OK
Batch census plus the per-row results.
created + enriched + unchanged + not_created + errors equals the
number of submitted rows for any 200 response. The endpoint returns 200
even when individual rows fail: a per-row failure is reported here rather
than aborting the batch, so a single malformed row cannot cost the other
999. Request-level failures (auth, an unwritable retailer, a batch over
the row cap) are 4xx instead.
Stores this retailer had when this call started, including any in already_claimed_store_ids. Measured per call: on a committed split run it grows by the stores earlier batches created.
Pairs beyond proximity_m but within 500 m that were deliberately NOT matched. A judgement call for a human, never auto-matched by widening the radius. Per call: a split run's sum can include a pair whose store a later batch went on to claim.
Existing stores no submitted row claimed and not in already_claimed_store_ids. For a full-dataset run these are stores the retailer's own list no longer carries, i.e. probably closed — reported, never deactivated or deleted. Per call, measured against the whole retailer: for a split run, read it from the last call, sent with every other batch's store_ids; summing per-call values double-counts.
How many already_claimed_store_ids were this retailer's stores and so were held out of matching. Lower than the number sent means some ids were ignored — for example created ids from a dry run, whose stores never persisted.
Existing non-placeholder values a first-party row overwrote. The previous value is preserved under Place.source_extras['superseded'] rather than discarded.
The ids of the stores counted in unmatched_existing, so a human can review exactly which stores the dataset no longer carries.
URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Per-column coverage for this retailer's stores after the call — stores, with_point, with_real_address, with_phone, with_url, with_source_extras. On a dry run these are the post-rollback figures the run would have produced, measured inside the transaction.
Batch-level restatement of every row that raised, for callers that read only the census.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Closient","colors":{"primary":"#1d4ed8","light":"#3b82f6","dark":"#1d4ed8"},"logo":{"light":"https://mintcdn.com/closientsearchinc/vrxkrkGbKE0bLCPC/logo/light.svg?fit=max\u0026auto=format\u0026n=vrxkrkGbKE0bLCPC\u0026q=85\u0026s=478b3e4ffc42465d52691098e52c119e","dark":"https://mintcdn.com/closientsearchinc/vrxkrkGbKE0bLCPC/logo/dark.svg?fit=max\u0026auto=format\u0026n=vrxkrkGbKE0bLCPC\u0026q=85\u0026s=31b8f2e0afab280f892c55885c14d989"},"favicon":"https://mintcdn.com/closientsearchinc/mF5Tsz1392RlgjjR/favicon.svg?fit=max\u0026auto=format\u0026n=mF5Tsz1392RlgjjR\u0026q=85\u0026s=0475d24a8d69ca9d543431c5fad12adb","api":{"playground":{}},"appearance":{"default":"system"},"background":{"decoration":"grid"},"footer":{"links":[{"header":"Privacy","items":[{"label":"Cookie preferences","href":"#cookie-preferences"}]}]},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist","weight":400}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"closientsearchinc","hasAudioNarration":false,"actualSubdomain":"closientsearchinc","customDomains":["docs.closient.com"],"gitSource":{"type":"github","owner":"closient","repo":"closient","deployBranch":"main","contentDirectory":"docs/public","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae1664b41a8cb9d72ae7333","collectionId":"2d6f4795-e5b9-456e-9548-fbfc1baeb1b9","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae1664b41a8cb9d72ae7333"},"entitlements":{},"buildId":"6ae1664b41a8cb9d72ae7333","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":618},{"language":"default","tag":"Products","count":193},{"language":"default","tag":"Documentation","count":110},{"language":"default","tag":"EPCIS 2.0","count":88},{"language":"default","tag":"GS1 Digital Link","count":70},{"language":"default","tag":"Agent Skills","count":55},{"language":"default","tag":"Brands","count":55},{"language":"default","tag":"Retailers","count":46},{"language":"default","tag":"Dashboard","count":42},{"language":"default","tag":"Account","count":39}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk","slug":"/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk","pageMetadata":{"title":"Upsert physical stores in bulk","description":"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result.\n\nRows are **reconciled, not inserted**. Each row is tied to an existing store by exact store number, then by proximity within `proximity_m`, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer's own numbering.\n\nNothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in `unmatched_existing` and left exactly as it is; a pair the matcher finds contradictory is reported in the row's `conflict` and left unrekeyed.\n\n`dry_run` defaults to **true**: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher's real verdict rather than an estimate, and a first call writes nothing. Send `dry_run: false` to commit.\n\n**A dataset larger than one call.** Batch it, and send each call the `store_id`s the *other* batches' rows landed on as `already_claimed_store_ids`. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call's `unmatched_existing` is the dataset figure. Without it every census field is per call and `unmatched_existing` does not sum.\n\n`retailer_id` is a `retailers.Retailer`. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created.\n\nReturns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/stores/batch","href":"/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n em: \"em\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Rows are \", _jsx(_components.strong, {\n children: \"reconciled, not inserted\"\n }), \". Each row is tied to an existing store by exact store number, then by proximity within \", _jsx(_components.code, {\n children: \"proximity_m\"\n }), \", then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer’s own numbering.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in \", _jsx(_components.code, {\n children: \"unmatched_existing\"\n }), \" and left exactly as it is; a pair the matcher finds contradictory is reported in the row’s \", _jsx(_components.code, {\n children: \"conflict\"\n }), \" and left unrekeyed.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"dry_run\"\n }), \" defaults to \", _jsx(_components.strong, {\n children: \"true\"\n }), \": every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher’s real verdict rather than an estimate, and a first call writes nothing. Send \", _jsx(_components.code, {\n children: \"dry_run: false\"\n }), \" to commit.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"A dataset larger than one call.\"\n }), \" Batch it, and send each call the \", _jsx(_components.code, {\n children: \"store_id\"\n }), \"s the \", _jsx(_components.em, {\n children: \"other\"\n }), \" batches’ rows landed on as \", _jsx(_components.code, {\n children: \"already_claimed_store_ids\"\n }), \". Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call’s \", _jsx(_components.code, {\n children: \"unmatched_existing\"\n }), \" is the dataset figure. Without it every census field is per call and \", _jsx(_components.code, {\n children: \"unmatched_existing\"\n }), \" does not sum.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"retailer_id\"\n }), \" is a \", _jsx(_components.code, {\n children: \"retailers.Retailer\"\n }), \". An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.\"\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Upsert physical stores in bulk","description":"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result.\n\nRows are **reconciled, not inserted**. Each row is tied to an existing store by exact store number, then by proximity within `proximity_m`, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer's own numbering.\n\nNothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in `unmatched_existing` and left exactly as it is; a pair the matcher finds contradictory is reported in the row's `conflict` and left unrekeyed.\n\n`dry_run` defaults to **true**: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher's real verdict rather than an estimate, and a first call writes nothing. Send `dry_run: false` to commit.\n\n**A dataset larger than one call.** Batch it, and send each call the `store_id`s the *other* batches' rows landed on as `already_claimed_store_ids`. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call's `unmatched_existing` is the dataset figure. Without it every census field is per call and `unmatched_existing` does not sum.\n\n`retailer_id` is a `retailers.Retailer`. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created.\n\nReturns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/stores/batch","href":"/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/closientsearchinc/072815180d3a8434/qa-feedback-loader.js","/_mintlify/custom/closientsearchinc/2fb7a84e1c07edb0/docs-consent.js"],"openApiReferenceData":{"operation":{"operationId":"upsert_stores_batch","summary":"Upsert physical stores in bulk","parameters":["2782381e-7cc4-4952-bc6e-f1d963c1ac90"],"responses":{"200":"211e691f-2903-4653-aeed-ce364612b2ab","400":"221f38a2-b4b9-447e-9437-e950b87d4472","401":"7f2c5bed-0813-480b-baef-2185db876a79","403":"7841aa46-068e-4d66-b81b-d8d783e6e1d3","404":"f0605ac2-91cd-4dfd-ba59-144a2b871f3e","405":"ebfb0500-90db-4c26-981c-af68df9f5e3f","413":"ae9dab45-a63d-418d-8a25-a980d502c4fa","422":"3704a10f-17f9-4d9c-82a4-41a53b50fc40","429":"dab7b2dd-8ef1-4c89-bff3-22391006d620"},"description":"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result.\n\nRows are **reconciled, not inserted**. Each row is tied to an existing store by exact store number, then by proximity within `proximity_m`, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer's own numbering.\n\nNothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in `unmatched_existing` and left exactly as it is; a pair the matcher finds contradictory is reported in the row's `conflict` and left unrekeyed.\n\n`dry_run` defaults to **true**: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher's real verdict rather than an estimate, and a first call writes nothing. Send `dry_run: false` to commit.\n\n**A dataset larger than one call.** Batch it, and send each call the `store_id`s the *other* batches' rows landed on as `already_claimed_store_ids`. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call's `unmatched_existing` is the dataset figure. Without it every census field is per call and `unmatched_existing` does not sum.\n\n`retailer_id` is a `retailers.Retailer`. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created.\n\nReturns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.","tags":["Retailer Stores"],"requestBody":"91880d9f-522a-4a6b-a0f9-334b29c5b09a","security":["083d9b6e-77a7-4efa-8585-262277139cd7","7be6cc01-bdb1-48b3-98aa-fc6d3530e6b7","ce41774e-dca6-4f0f-8e17-fd72a277d02f"],"method":"post","type":"path","servers":["de354878-f69b-41be-85c3-601a57e9530c"],"path":"/retailers/api/v1/retailers/{retailer_id}/stores/batch","baseUrlOptions":["https://www.closient.com"],"title":"Upsert physical stores in bulk","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"2782381e-7cc4-4952-bc6e-f1d963c1ac90":{"in":"path","name":"retailer_id","schema":{"description":"Unique identifier of the retailer these stores belong to.","format":"shortuuid","maxLength":22,"minLength":22,"pattern":"^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$","title":"Retailer Id","type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cshortuuid>"},"required":true,"description":"Unique identifier of the retailer these stores belong to."}},"requestBody":{"content":{"application/json":{"schema":{"description":"A batch of store rows plus the reconciliation knobs for the call.","examples":[{"dry_run":true,"phone_region":"US","proximity_m":100,"rows":[{"address_line_1":"1250 Main St","city":"Springfield","country":"US","first_party":true,"lat":39.7817,"lon":-89.6501,"name":"Ulta Beauty","postal_code":"62704","region":"IL","source":"ulta_site","store_number":"595"}]}],"properties":{"rows":{"description":"Store rows to reconcile, at most 1,000 per call **and** at most 2.5 MiB (2,621,440 bytes) of request body — the server's upload ceiling, answered with 413 when exceeded. The byte limit usually binds first: 1,000 first-party rows carrying seven-day opening hours in `extras` serialise to about 2.7 MB, so size batches by bytes, not rows. Results come back in request order, each carrying its `index`. Matching is one-to-one *within* a call, so a store claimed by an earlier call is re-matched on the store-number tier in the next one — which is what makes repeating a batch idempotent rather than duplicative. To reconcile one dataset split across calls as if it were one pass, send `already_claimed_store_ids`.","items":{"description":"One store as a retailer's own source describes it.\n\nCarries everything a retailer's own store feed describes, ``extras`` and\n``merged_extras`` included, so no field of a source row is dropped on the\nway in. Hours, services, raw OSM tags and per-source provenance have no\ntyped field today and travel in ``extras`` (this source's own payload) and\n``merged_extras`` (payloads of secondary sources folded into this row,\nkeyed by their source name). Both are stored with one sibling key per\nsource, so the sources stay separable rather than being flattened into one\nblob.","examples":[{"address_line_1":"1250 Main St","allow_create":true,"city":"Springfield","country":"US","country_derived":true,"extras":{"branch_code":"595","opening_hours_spec":[{"closes":"20:00","dayOfWeek":"Monday","opens":"10:00"}],"services":["Salon","Brow Bar"]},"first_party":true,"lat":39.7817,"lon":-89.6501,"merged_extras":{"osm":{"licence":"ODbL","osm_id":"node/123456789","tags":{"shop":"cosmetics"}}},"name":"Ulta Beauty","opening_hours":"Mo-Sa 10:00-20:00; Su 11:00-18:00","phone":"+12175550100","postal_code":"62704","region":"IL","source":"ulta_site","source_url":"https://www.ulta.com/stores/springfield-il-595","store_number":"595","website":"https://www.ulta.com/stores/springfield-il-595"}],"properties":{"store_number":{"description":"The key this source uses for the store — the retailer's own store number where it publishes one, otherwise a stable synthesized key (e.g. `SYN-…`). This is the highest-confidence match tier, so a source that can supply a real store number should: it is what makes a repeated call idempotent rather than proximity-matched.","maxLength":50,"pattern":"^[^\\x00]{0,50}$","title":"Store Number","type":"string","isRequired":true,"uniqueKey":"rows.items.[INDEX].store_number","typeLabel":"string"},"source":{"description":"Stable name of the dataset this row came from (e.g. `ulta_site`, `sephora_csv`, `osm`). Load-bearing, not a label: per-column authorship is recorded against it, and a source may later correct a value it wrote itself but never one another source wrote. Sending a different name on a rerun of the same dataset therefore forfeits that source's own right to update the columns it authored.","maxLength":100,"minLength":1,"pattern":"^[^\\x00]{1,100}$","title":"Source","type":"string","isRequired":true,"uniqueKey":"rows.items.[INDEX].source","typeLabel":"string"},"name":{"default":"","description":"Store or branch display name.","maxLength":255,"pattern":"^[^\\x00]{0,255}$","title":"Name","type":"string","uniqueKey":"rows.items.[INDEX].name","typeLabel":"string"},"address_line_1":{"default":"","description":"Street address, number and street name.","maxLength":255,"pattern":"^[^\\x00]{0,255}$","title":"Address Line 1","type":"string","uniqueKey":"rows.items.[INDEX].address_line_1","typeLabel":"string"},"city":{"default":"","description":"City, town or locality.","maxLength":255,"pattern":"^[^\\x00]{0,255}$","title":"City","type":"string","uniqueKey":"rows.items.[INDEX].city","typeLabel":"string"},"region":{"default":"","description":"State, province or region.","maxLength":255,"pattern":"^[^\\x00]{0,255}$","title":"Region","type":"string","uniqueKey":"rows.items.[INDEX].region","typeLabel":"string"},"postal_code":{"default":"","description":"ZIP, postal code or postcode.","maxLength":20,"pattern":"^[^\\x00]{0,20}$","title":"Postal Code","type":"string","uniqueKey":"rows.items.[INDEX].postal_code","typeLabel":"string"},"country":{"default":"US","description":"ISO 3166-1 alpha-2 country code for the store. An **assigned** code: this value is written to the place's country column, and a store filed under a code that names no country is a common data-quality defect. A bare two-letter string would have admitted 427 unassigned combinations.","format":"iso3166-alpha2","maxLength":2,"minLength":2,"pattern":"^[A-Za-z]{2}$","title":"Country","type":"string","uniqueKey":"rows.items.[INDEX].country","typeLabel":"string\u003ciso3166-alpha2>"},"lat":{"oneOf":[{"type":"number","title":"Lat","description":"WGS84 latitude in decimal degrees. Null is accepted — a store with a good address and no coordinates still matches on the address tier and is still worth having.","maximum":90,"minimum":-90,"uniqueKey":"rows.items.[INDEX].lat.oneOf.0","typeLabel":"number"},{"type":"null","title":"Lat","description":"WGS84 latitude in decimal degrees. Null is accepted — a store with a good address and no coordinates still matches on the address tier and is still worth having.","uniqueKey":"rows.items.[INDEX].lat.oneOf.1","typeLabel":"null"}],"uniqueKey":"rows.items.[INDEX].lat","typeLabel":"number | null"},"lon":{"oneOf":[{"type":"number","title":"Lon","description":"WGS84 longitude in decimal degrees. Null is accepted; see `lat`.","maximum":180,"minimum":-180,"uniqueKey":"rows.items.[INDEX].lon.oneOf.0","typeLabel":"number"},{"type":"null","title":"Lon","description":"WGS84 longitude in decimal degrees. Null is accepted; see `lat`.","uniqueKey":"rows.items.[INDEX].lon.oneOf.1","typeLabel":"null"}],"uniqueKey":"rows.items.[INDEX].lon","typeLabel":"number | null"},"phone":{"default":"","description":"Store phone number; normalised to E.164 on write.","maxLength":50,"pattern":"^[^\\x00]{0,50}$","title":"Phone","type":"string","uniqueKey":"rows.items.[INDEX].phone","typeLabel":"string"},"website":{"default":"","description":"The store's own page on the retailer's site.","maxLength":1000,"pattern":"^[^\\x00]{0,1000}$","title":"Website","type":"string","uniqueKey":"rows.items.[INDEX].website","typeLabel":"string"},"opening_hours":{"default":"","description":"Opening hours in OSM `opening_hours` syntax (e.g. `Mo-Sa 10:00-20:00; Su 11:00-18:00`). There is no hours column on a location, so this is stored in `Place.source_extras` under this row's `source` — sending it here is equivalent to sending `extras.opening_hours`, and an explicit `extras.opening_hours` wins. A structured schema.org `openingHoursSpecification` can be sent alongside it in `extras`.","maxLength":1000,"pattern":"^[^\\x00]{0,1000}$","title":"Opening Hours","type":"string","uniqueKey":"rows.items.[INDEX].opening_hours","typeLabel":"string"},"source_url":{"default":"","description":"Where this specific row was read from.","maxLength":1000,"pattern":"^[^\\x00]{0,1000}$","title":"Source Url","type":"string","uniqueKey":"rows.items.[INDEX].source_url","typeLabel":"string"},"first_party":{"default":false,"description":"True when the row comes from the retailer's own site or feed. Only a first-party row may overwrite an existing non-placeholder value or rename a storefront; community mapping data enriches blanks instead.","title":"First Party","type":"boolean","uniqueKey":"rows.items.[INDEX].first_party","typeLabel":"boolean"},"allow_create":{"default":true,"description":"Whether a row that matches nothing may create a new store. Set false for a secondary source: it may enrich a store the retailer confirms exists, but a location only a community extract believes in is not evidence enough to seed a storefront customers would be sent to.","title":"Allow Create","type":"boolean","uniqueKey":"rows.items.[INDEX].allow_create","typeLabel":"boolean"},"country_derived":{"default":false,"description":"True when `country` came from a coordinate lookup rather than from a feed label or address field. This is a **provenance assertion, and it grants the row power**: only a derived country may correct a country already stored on the place. A country that came from a label can fill a blank and nothing more.\n\nEarn it by calling `GET /locations/api/v1/countries/resolve?lat=\u0026lon=` with the row's own coordinates and sending the returned `country` as `country`: that is the same rule the server applies, so you need no polygon dataset of your own. Set it only when the answer is not `flagged` and `method` is not `none`. The reason it exists is concrete — Sephora's North America feed labels 482 of its 483 rows `US`, and trusting that label would have filed 75 Canadian stores as American. A label is not evidence; a coordinate is. Asserting this on a label-derived country re-opens exactly that defect, so leave it false when in doubt: the cost is a country that stays wrong until a better row arrives, not one that gets overwritten with a worse value.","title":"Country Derived","type":"boolean","uniqueKey":"rows.items.[INDEX].country_derived","typeLabel":"boolean"},"extras":{"additionalProperties":true,"description":"Everything this source carries that has no column of its own — raw hours specifications, service lists, OSM tags, source-conflict flags. Stored in `Place.source_extras` under this row's `source`. Nesting is allowed here, unlike the flat-string `metadata` field on other resources. A *secondary* source's payload does not belong here — send it in `merged_extras` under that source's name.","title":"Extras","type":"object","uniqueKey":"rows.items.[INDEX].extras","typeLabel":"Extras · object"},"merged_extras":{"additionalProperties":{"additionalProperties":true,"type":"object","uniqueKey":"rows.items.[INDEX].merged_extras.additionalProperties","typeLabel":"object"},"description":"Provenance from **other** sources whose data was folded into this row before upload, keyed by each source's stable name — the same kind of name `source` takes. Use it when your importer merged a secondary dataset (e.g. an OSM extract) into a primary one: put the primary's payload in `extras` and each secondary's payload here, e.g. `{\"osm\": {\"licence\": \"ODbL\", \"tags\": {...}}}`. Each key is stored in `Place.source_extras` as its own sibling of `source`, so the sources stay separable and a later run of either one replaces only its own entry. Do **not** invent a convention such as an `extras[\"merged:osm\"]` key: that buries the secondary under the primary's namespace where no other reader will look for it. A key equal to this row's `source` is rejected, because it would overwrite the row's own `extras`. Only the payload is recorded — per-column authorship still goes to `source` alone.","propertyNames":{"maxLength":100,"minLength":1},"title":"Merged Extras","type":"object","uniqueKey":"rows.items.[INDEX].merged_extras","typeLabel":"Merged Extras · object"}},"required":["store_number","source"],"title":"StoreUpsertRowIn","type":"object","uniqueKey":"rows.items.[INDEX]","typeLabel":"StoreUpsertRowIn · object"},"maxItems":1000,"minItems":1,"title":"Rows","type":"array","isRequired":true,"uniqueKey":"rows","typeLabel":"StoreUpsertRowIn · object[]"},"already_claimed_store_ids":{"description":"For a dataset split across several calls: the `store_id` of every row result from the **other** batches of the same run (at most 50,000). No row in this call can match one of these stores, so matching stays one-to-one across the whole dataset rather than per call, and they are left out of `unmatched_existing` — which makes the last call's `unmatched_existing` and `unmatched_existing_store_ids` the dataset-wide figures. Leave out this batch's own earlier results when retrying it, or its rows cannot re-match their stores. Ids that are not this retailer's stores are ignored; `already_claimed_stores` reports how many were used.","items":{"description":"URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``).","format":"shortuuid","maxLength":22,"minLength":22,"pattern":"^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$","type":"string","uniqueKey":"already_claimed_store_ids.items.[INDEX]","typeLabel":"string\u003cshortuuid>"},"maxItems":50000,"title":"Already Claimed Store Ids","type":"array","uniqueKey":"already_claimed_store_ids","typeLabel":"string\u003cshortuuid>[]"},"dry_run":{"default":true,"description":"When true (the default) every path runs against real rows and the transaction is rolled back, so the results are the matcher's real verdict and nothing is written. Send false to commit.","title":"Dry Run","type":"boolean","uniqueKey":"dry_run","typeLabel":"boolean"},"proximity_m":{"default":100,"description":"Match radius in metres for the proximity tier (default 100). Capped at 500 m: pairs beyond the match radius but within it are reported as `near_misses` for a human to judge, and widening the radius to force a match is exactly what the tiered matcher exists to avoid.","exclusiveMinimum":0,"maximum":500,"title":"Proximity M","type":"number","uniqueKey":"proximity_m","typeLabel":"number"},"phone_region":{"default":"US","description":"ISO 3166-1 alpha-2 region used to parse national phone numbers into E.164. An unassigned code parses nothing, so every phone in the batch would be counted invalid rather than written — silently, since a bad parse is a counter and not an error.","format":"iso3166-alpha2","maxLength":2,"minLength":2,"pattern":"^[A-Za-z]{2}$","title":"Phone Region","type":"string","uniqueKey":"phone_region","typeLabel":"string\u003ciso3166-alpha2>"}},"required":["rows"],"title":"StoreUpsertBatchIn","type":"object","uniqueKey":"","typeLabel":"StoreUpsertBatchIn · object"},"examples":{"Example":{"title":"Example","value":{"dry_run":true,"phone_region":"US","proximity_m":100,"rows":[{"address_line_1":"1250 Main St","city":"Springfield","country":"US","first_party":true,"lat":39.7817,"lon":-89.6501,"name":"Ulta Beauty","postal_code":"62704","region":"IL","source":"ulta_site","store_number":"595"}]}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"211e691f-2903-4653-aeed-ce364612b2ab":{"description":"OK","content":{"application/json":{"schema":{"description":"Batch census plus the per-row results.\n\n``created + enriched + unchanged + not_created + errors`` equals the\nnumber of submitted rows for any 200 response. The endpoint returns 200\neven when individual rows fail: a per-row failure is reported here rather\nthan aborting the batch, so a single malformed row cannot cost the other\n999. Request-level failures (auth, an unwritable retailer, a batch over\nthe row cap) are 4xx instead.","examples":[{"already_claimed_stores":0,"committed":false,"coverage_after":{"stores":1622,"with_phone":3,"with_point":1622},"created":1,"enriched":2,"errors":0,"existing_stores":1621,"fields_superseded":4,"legacy_keys_preserved":2,"matched_address":0,"matched_proximity":2,"matched_store_number":0,"near_misses":1,"not_created":0,"phones_written":3,"rekey_skipped_conflict":0,"row_errors":[],"rows":[{"conflict":"","distance_m":18.4,"error":"","index":0,"match_method":"proximity","outcome":"enriched","store_id":"mhvXdrZT4jP5T8vBxuvm75","store_number":"595"}],"submitted_rows":3,"unchanged":0,"unmatched_existing":1619,"unmatched_existing_store_ids":["kX4bR8WqkQx2Y7jJ9mZt3P"],"urls_written":3}],"properties":{"committed":{"description":"False when this was a dry run — every path ran and the transaction was rolled back.","title":"Committed","type":"boolean","isRequired":true,"uniqueKey":"committed","typeLabel":"boolean"},"submitted_rows":{"description":"Number of rows in the request.","minimum":0,"title":"Submitted Rows","type":"integer","isRequired":true,"uniqueKey":"submitted_rows","typeLabel":"integer"},"existing_stores":{"description":"Stores this retailer had when this call started, including any in `already_claimed_store_ids`. Measured per call: on a committed split run it grows by the stores earlier batches created.","minimum":0,"title":"Existing Stores","type":"integer","isRequired":true,"uniqueKey":"existing_stores","typeLabel":"integer"},"created":{"description":"Rows that produced a new store.","minimum":0,"title":"Created","type":"integer","isRequired":true,"uniqueKey":"created","typeLabel":"integer"},"enriched":{"description":"Rows that matched and changed something.","minimum":0,"title":"Enriched","type":"integer","isRequired":true,"uniqueKey":"enriched","typeLabel":"integer"},"unchanged":{"description":"Rows that matched and needed no change.","minimum":0,"title":"Unchanged","type":"integer","isRequired":true,"uniqueKey":"unchanged","typeLabel":"integer"},"not_created":{"description":"Rows that matched nothing and were not allowed to create a store.","minimum":0,"title":"Not Created","type":"integer","isRequired":true,"uniqueKey":"not_created","typeLabel":"integer"},"errors":{"description":"Rows that raised. Equals the length of `row_errors`.","minimum":0,"title":"Errors","type":"integer","isRequired":true,"uniqueKey":"errors","typeLabel":"integer"},"matched_store_number":{"description":"Rows matched on the exact store-number tier.","minimum":0,"title":"Matched Store Number","type":"integer","isRequired":true,"uniqueKey":"matched_store_number","typeLabel":"integer"},"matched_proximity":{"description":"Rows matched on the proximity tier.","minimum":0,"title":"Matched Proximity","type":"integer","isRequired":true,"uniqueKey":"matched_proximity","typeLabel":"integer"},"matched_address":{"description":"Rows matched on the normalised-address tier.","minimum":0,"title":"Matched Address","type":"integer","isRequired":true,"uniqueKey":"matched_address","typeLabel":"integer"},"near_misses":{"description":"Pairs beyond `proximity_m` but within 500 m that were deliberately NOT matched. A judgement call for a human, never auto-matched by widening the radius. Per call: a split run's sum can include a pair whose store a *later* batch went on to claim.","minimum":0,"title":"Near Misses","type":"integer","isRequired":true,"uniqueKey":"near_misses","typeLabel":"integer"},"unmatched_existing":{"description":"Existing stores no submitted row claimed and not in `already_claimed_store_ids`. For a full-dataset run these are stores the retailer's own list no longer carries, i.e. probably closed — reported, never deactivated or deleted. Per call, measured against the whole retailer: for a split run, read it from the last call, sent with every other batch's `store_id`s; summing per-call values double-counts.","minimum":0,"title":"Unmatched Existing","type":"integer","isRequired":true,"uniqueKey":"unmatched_existing","typeLabel":"integer"},"already_claimed_stores":{"description":"How many `already_claimed_store_ids` were this retailer's stores and so were held out of matching. Lower than the number sent means some ids were ignored — for example `created` ids from a dry run, whose stores never persisted.","minimum":0,"title":"Already Claimed Stores","type":"integer","isRequired":true,"uniqueKey":"already_claimed_stores","typeLabel":"integer"},"phones_written":{"description":"Phone numbers written or refreshed.","minimum":0,"title":"Phones Written","type":"integer","isRequired":true,"uniqueKey":"phones_written","typeLabel":"integer"},"urls_written":{"description":"Store URLs written or refreshed.","minimum":0,"title":"Urls Written","type":"integer","isRequired":true,"uniqueKey":"urls_written","typeLabel":"integer"},"fields_superseded":{"description":"Existing non-placeholder values a first-party row overwrote. The previous value is preserved under `Place.source_extras['superseded']` rather than discarded.","minimum":0,"title":"Fields Superseded","type":"integer","isRequired":true,"uniqueKey":"fields_superseded","typeLabel":"integer"},"legacy_keys_preserved":{"description":"Stores whose pre-existing store number was replaced by this source's real one, with the old key kept in `Place.source_extras['legacy_store_key']`.","minimum":0,"title":"Legacy Keys Preserved","type":"integer","isRequired":true,"uniqueKey":"legacy_keys_preserved","typeLabel":"integer"},"rekey_skipped_conflict":{"description":"Stores left on their existing key because the evidence for re-keying was contradictory.","minimum":0,"title":"Rekey Skipped Conflict","type":"integer","isRequired":true,"uniqueKey":"rekey_skipped_conflict","typeLabel":"integer"},"unmatched_existing_store_ids":{"description":"The ids of the stores counted in `unmatched_existing`, so a human can review exactly which stores the dataset no longer carries.","items":{"description":"URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``).","format":"shortuuid","maxLength":22,"minLength":22,"pattern":"^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$","type":"string","uniqueKey":"unmatched_existing_store_ids.items.[INDEX]","typeLabel":"string\u003cshortuuid>"},"title":"Unmatched Existing Store Ids","type":"array","uniqueKey":"unmatched_existing_store_ids","typeLabel":"string\u003cshortuuid>[]"},"coverage_after":{"additionalProperties":{"type":"integer","uniqueKey":"coverage_after.additionalProperties","typeLabel":"integer"},"description":"Per-column coverage for this retailer's stores after the call — `stores`, `with_point`, `with_real_address`, `with_phone`, `with_url`, `with_source_extras`. On a dry run these are the post-rollback figures the run *would* have produced, measured inside the transaction.","title":"Coverage After","type":"object","uniqueKey":"coverage_after","typeLabel":"Coverage After · object"},"rows":{"description":"One result per submitted row, in request order.","items":{"description":"What happened to one submitted row.","examples":[{"conflict":"","distance_m":18.4,"error":"","index":0,"match_method":"proximity","outcome":"enriched","store_id":"mhvXdrZT4jP5T8vBxuvm75","store_number":"595"}],"properties":{"index":{"description":"Zero-based position of this row in the submitted `rows` array.","minimum":0,"title":"Index","type":"integer","isRequired":true,"uniqueKey":"rows.items.[INDEX].index","typeLabel":"integer"},"store_number":{"description":"The `store_number` submitted for this row.","title":"Store Number","type":"string","isRequired":true,"uniqueKey":"rows.items.[INDEX].store_number","typeLabel":"string"},"outcome":{"description":"`created` — a new store and place were written. `enriched` — an existing store matched and at least one column, link or provenance record changed. `unchanged` — an existing store matched and nothing needed changing (the idempotent rerun case). `not_created` — the row matched nothing and `allow_create` was false, so no storefront was invented. `error` — this row raised; see `error`. The rest of the batch still applied.","title":"Outcome","type":"string","isRequired":true,"uniqueKey":"rows.items.[INDEX].outcome","typeLabel":"string"},"match_method":{"description":"Which tier tied this row to an existing store: `store_number` (exact), `proximity` (within `proximity_m`, resolved globally nearest-pair-first), `address` (normalised street plus postal code), or `none` for a row that matched nothing.","enum":["store_number","proximity","address","none"],"title":"StoreMatchMethodEnum","type":"string","isRequired":true,"uniqueKey":"rows.items.[INDEX].match_method","typeLabel":"enum\u003cstring>"},"distance_m":{"oneOf":[{"type":"number","title":"Distance M","description":"Distance to the matched store in metres. Set for a `proximity` match, else null.","uniqueKey":"rows.items.[INDEX].distance_m.oneOf.0","typeLabel":"number"},{"type":"null","title":"Distance M","description":"Distance to the matched store in metres. Set for a `proximity` match, else null.","uniqueKey":"rows.items.[INDEX].distance_m.oneOf.1","typeLabel":"null"}],"uniqueKey":"rows.items.[INDEX].distance_m","typeLabel":"number | null"},"store_id":{"oneOf":[{"type":"string","title":"Store Id","description":"URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``).","format":"shortuuid","maxLength":22,"minLength":22,"pattern":"^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$","uniqueKey":"rows.items.[INDEX].store_id.oneOf.0","typeLabel":"string\u003cshortuuid>"},{"type":"null","title":"Store Id","description":"The store this row landed on: the existing store it matched, or the store it created. Null when the row created nothing (`not_created`, `error`) and for `created` on a dry run, where the new store was rolled back. Collect these across batches and send them as `already_claimed_store_ids` on the other batches of the same dataset.","uniqueKey":"rows.items.[INDEX].store_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"rows.items.[INDEX].store_id","typeLabel":"string\u003cshortuuid> | null"},"conflict":{"default":"","description":"Non-empty when the evidence was contradictory — typically the row's store number matches one existing store while a *different* existing store sits inside the proximity radius, meaning those two rows duplicate each other. The store is still enriched; its store number is deliberately **not** re-keyed on a guess, and the pair is left for a human to merge.","title":"Conflict","type":"string","uniqueKey":"rows.items.[INDEX].conflict","typeLabel":"string"},"error":{"default":"","description":"Failure message when `outcome` is `error`. Empty otherwise.","title":"Error","type":"string","uniqueKey":"rows.items.[INDEX].error","typeLabel":"string"}},"required":["index","store_number","outcome","match_method"],"title":"StoreRowResultOut","type":"object","uniqueKey":"rows.items.[INDEX]","typeLabel":"StoreRowResultOut · object"},"title":"Rows","type":"array","uniqueKey":"rows","typeLabel":"StoreRowResultOut · object[]"},"row_errors":{"description":"Batch-level restatement of every row that raised, for callers that read only the census.","items":{"type":"string","uniqueKey":"row_errors.items.[INDEX]","typeLabel":"string"},"title":"Row Errors","type":"array","uniqueKey":"row_errors","typeLabel":"string[]"}},"required":["committed","submitted_rows","existing_stores","created","enriched","unchanged","not_created","errors","matched_store_number","matched_proximity","matched_address","near_misses","unmatched_existing","already_claimed_stores","phones_written","urls_written","fields_superseded","legacy_keys_preserved","rekey_skipped_conflict"],"title":"StoreUpsertResultOut","type":"object","uniqueKey":"","typeLabel":"StoreUpsertResultOut · object"},"examples":{"Example":{"title":"Example","value":{"already_claimed_stores":0,"committed":false,"coverage_after":{"stores":1622,"with_phone":3,"with_point":1622},"created":1,"enriched":2,"errors":0,"existing_stores":1621,"fields_superseded":4,"legacy_keys_preserved":2,"matched_address":0,"matched_proximity":2,"matched_store_number":0,"near_misses":1,"not_created":0,"phones_written":3,"rekey_skipped_conflict":0,"row_errors":[],"rows":[{"conflict":"","distance_m":18.4,"error":"","index":0,"match_method":"proximity","outcome":"enriched","store_id":"mhvXdrZT4jP5T8vBxuvm75","store_number":"595"}],"submitted_rows":3,"unchanged":0,"unmatched_existing":1619,"unmatched_existing_store_ids":["kX4bR8WqkQx2Y7jJ9mZt3P"],"urls_written":3}}},"exampleType":"generated"}},"exampleType":"generated"},"221f38a2-b4b9-447e-9437-e950b87d4472":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"7f2c5bed-0813-480b-baef-2185db876a79":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"7841aa46-068e-4d66-b81b-d8d783e6e1d3":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"f0605ac2-91cd-4dfd-ba59-144a2b871f3e":{"description":"Not Found","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"ebfb0500-90db-4c26-981c-af68df9f5e3f":{"description":"Method Not Allowed","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"ae9dab45-a63d-418d-8a25-a980d502c4fa":{"description":"Content Too Large","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"3704a10f-17f9-4d9c-82a4-41a53b50fc40":{"description":"Unprocessable Content","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"dab7b2dd-8ef1-4c89-bff3-22391006d620":{"description":"Too Many Requests","content":{"application/problem+json":{"schema":{"description":"RFC 9457 Problem Details response.\n\nAll API errors are returned in this format with Content-Type:\napplication/problem+json.","examples":[{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"},{"detail":"Validation error.","details":[{"loc":["body","name"],"msg":"Field required","type":"missing"}],"error_code":"validation_error","retryable":false,"status":422,"timestamp":"2026-03-31T12:00:00+00:00","title":"Validation Error","type":"https://closient.com/docs/errors/validation_error"},{"detail":"Rate limit exceeded. Please try again later.","error_code":"rate_limited","retry_after":31,"retryable":true,"status":429,"timestamp":"2026-03-31T12:00:00+00:00","title":"Rate Limited","type":"https://closient.com/docs/errors/rate_limited"}],"properties":{"type":{"description":"URI reference identifying the error type.","title":"Type","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"description":"Short human-readable summary of the error.","title":"Title","type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"description":"HTTP status code.","title":"Status","type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"description":"Human-readable explanation of this specific occurrence.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"error_code":{"description":"Machine-readable error code (e.g. not_found, unauthorized).","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"timestamp":{"description":"ISO 8601 timestamp of when the error occurred.","title":"Timestamp","type":"string","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryable":{"default":false,"description":"Whether retrying the same request can succeed.","title":"Retryable","type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"},"retry_after":{"oneOf":[{"type":"integer","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Retry After","description":"Seconds to wait before retrying (when applicable).","uniqueKey":"retry_after.oneOf.1","typeLabel":"null"}],"uniqueKey":"retry_after","typeLabel":"integer | null"},"owner_action_required":{"oneOf":[{"type":"boolean","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Owner Action Required","description":"Whether the error requires account owner intervention.","uniqueKey":"owner_action_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"owner_action_required","typeLabel":"boolean | null"},"details":{"description":"Additional context (validation errors, etc.).","title":"Details","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","error_code","timestamp"],"title":"ErrorOut","type":"object","uniqueKey":"","typeLabel":"ErrorOut · object"},"examples":{"Example":{"title":"Example","value":{"detail":"The requested resource was not found.","error_code":"not_found","retryable":false,"status":404,"timestamp":"2026-03-31T12:00:00+00:00","title":"Not Found","type":"https://closient.com/docs/errors/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"083d9b6e-77a7-4efa-8585-262277139cd7":{"APIKeyHeaderAuth":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"APIKeyHeaderAuth"}},"7be6cc01-bdb1-48b3-98aa-fc6d3530e6b7":{"OAuthTokenAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"OAuthTokenAuth"}},"ce41774e-dca6-4f0f-8e17-fd72a277d02f":{"CookieGatedSessionAuth":{"type":"apiKey","in":"cookie","name":"sessionid","scopes":[],"schemeName":"CookieGatedSessionAuth"}}},"servers":{"de354878-f69b-41be-85c3-601a57e9530c":{"url":"https://www.closient.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"APIKeyHeaderAuth"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"APIKeyHeaderAuth","name":"X-API-Key"}],"title":"APIKeyHeaderAuth"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"OAuthTokenAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OAuthTokenAuth","name":"Authorization"}],"title":"OAuthTokenAuth"},{"schemes":[{"scheme":{"type":"apiKey","in":"cookie","name":"sessionid","scopes":[],"schemeName":"CookieGatedSessionAuth"},"schema":{"title":"sessionid","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"CookieGatedSessionAuth","name":"sessionid"}],"title":"CookieGatedSessionAuth"}]},"originalFileLocation":"openapi/openapi-retailers.json"},"subdomain":"closientsearchinc","siteName":"Closient","title":"Upsert physical stores in bulk - Closient","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-21T19:51:11.171Z","originalFileLocation":"api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result. Rows are reconciled, not inserted. Each row is tied to an existing store by exact store number, then by proximity within proximity_m, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer\u0026#x27;s own numbering. Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in unmatched_existing and left exactly as it is; a pair the matcher finds contradictory is reported in the row\u0026#x27;s conflict and left unrekeyed. dry_run defaults to true: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher\u0026#x27;s real verdict rather than an estimate, and a first call writes nothing. Send dry_run: false to commit. A dataset larger than one call. Batch it, and send each call the store_ids the other batches\u0026#x27; rows landed on as already_claimed_store_ids. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call\u0026#x27;s unmatched_existing is the dataset figure. Without it every census field is per call and unmatched_existing does not sum. retailer_id is a retailers.Retailer. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created. Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Closient\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upsert physical stores in bulk - Closient\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result. Rows are reconciled, not inserted. Each row is tied to an existing store by exact store number, then by proximity within proximity_m, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer\u0026#x27;s own numbering. Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in unmatched_existing and left exactly as it is; a pair the matcher finds contradictory is reported in the row\u0026#x27;s conflict and left unrekeyed. dry_run defaults to true: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher\u0026#x27;s real verdict rather than an estimate, and a first call writes nothing. Send dry_run: false to commit. A dataset larger than one call. Batch it, and send each call the store_ids the other batches\u0026#x27; rows landed on as already_claimed_store_ids. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call\u0026#x27;s unmatched_existing is the dataset figure. Without it every census field is per call and unmatched_existing does not sum. retailer_id is a retailers.Retailer. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created. Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Closient\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://closientsearchinc.mintlify.app/_mintlify/api/og/v2?division=Retailer+Stores\u0026amp;title=Upsert+physical+stores+in+bulk\u0026amp;description=Reconcile+and+apply+up+to+1%2C000+store+rows+for+one+retailer%2C+returning+a+per-row+result.%0A%0ARows+are+**reconciled%2C+not+inserted**.+Each+row+is+tied+to+an+existing\u0026amp;theme=b3c3c57337311a3ef6eeba51\u0026amp;signature=3c7b1eeac831e44366c6211990f222b785c36ba2a91b8ce99cf2398f2485e7d2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Upsert physical stores in bulk - Closient\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result. Rows are reconciled, not inserted. Each row is tied to an existing store by exact store number, then by proximity within proximity_m, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer\u0026#x27;s own numbering. Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in unmatched_existing and left exactly as it is; a pair the matcher finds contradictory is reported in the row\u0026#x27;s conflict and left unrekeyed. dry_run defaults to true: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher\u0026#x27;s real verdict rather than an estimate, and a first call writes nothing. Send dry_run: false to commit. A dataset larger than one call. Batch it, and send each call the store_ids the other batches\u0026#x27; rows landed on as already_claimed_store_ids. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call\u0026#x27;s unmatched_existing is the dataset figure. Without it every census field is per call and unmatched_existing does not sum. retailer_id is a retailers.Retailer. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created. Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://closientsearchinc.mintlify.app/_mintlify/api/og/v2?division=Retailer+Stores\u0026amp;title=Upsert+physical+stores+in+bulk\u0026amp;description=Reconcile+and+apply+up+to+1%2C000+store+rows+for+one+retailer%2C+returning+a+per-row+result.%0A%0ARows+are+**reconciled%2C+not+inserted**.+Each+row+is+tied+to+an+existing\u0026amp;theme=b3c3c57337311a3ef6eeba51\u0026amp;signature=3c7b1eeac831e44366c6211990f222b785c36ba2a91b8ce99cf2398f2485e7d2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/closientsearchinc/vtexSWpuGidbNkX_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Closient\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1d4ed8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.closient.com/#organization\",\"name\":\"Closient\",\"url\":\"https://docs.closient.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/closientsearchinc/vrxkrkGbKE0bLCPC/logo/light.svg?fit=max\u0026auto=format\u0026n=vrxkrkGbKE0bLCPC\u0026q=85\u0026s=478b3e4ffc42465d52691098e52c119e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.closient.com#website\",\"name\":\"Closient\",\"url\":\"https://docs.closient.com\",\"publisher\":{\"@id\":\"https://docs.closient.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk#webpage\",\"url\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk\",\"name\":\"Upsert physical stores in bulk\",\"description\":\"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result. Rows are reconciled, not inserted. Each row is tied to an existing store by exact store number, then by proximity within proximity_m, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer's own numbering. Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in unmatched_existing and left exactly as it is; a pair the matcher finds contradictory is reported in the row's conflict and left unrekeyed. dry_run defaults to true: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher's real verdict rather than an estimate, and a first call writes nothing. Send dry_run: false to commit. A dataset larger than one call. Batch it, and send each call the store_ids the other batches' rows landed on as already_claimed_store_ids. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call's unmatched_existing is the dataset figure. Without it every census field is per call and unmatched_existing does not sum. retailer_id is a retailers.Retailer. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created. Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.\",\"dateModified\":\"2026-10-21T19:51:11.171Z\",\"isPartOf\":{\"@id\":\"https://docs.closient.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Retailers\",\"item\":\"https://docs.closient.com/api-reference/retailers/retailers/list-retailers\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upsert physical stores in bulk\",\"item\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk#apireference\",\"headline\":\"Upsert physical stores in bulk\",\"name\":\"Upsert physical stores in bulk\",\"description\":\"Reconcile and apply up to 1,000 store rows for one retailer, returning a per-row result. Rows are reconciled, not inserted. Each row is tied to an existing store by exact store number, then by proximity within proximity_m, then by normalised street plus postal code — one-to-one, highest-confidence tier first. A match enriches the existing store in place; only a row that matches nothing creates one. This is why the endpoint is safe to point at a full dataset that overlaps rows already in the database: an insert-only surface would plant a duplicate beside every store whose recorded key predates the retailer's own numbering. Nothing is ever merged, deactivated or deleted here. An existing store no row claims is counted in unmatched_existing and left exactly as it is; a pair the matcher finds contradictory is reported in the row's conflict and left unrekeyed. dry_run defaults to true: every path executes against real rows inside a transaction that is then rolled back, so the counts and per-row outcomes are the matcher's real verdict rather than an estimate, and a first call writes nothing. Send dry_run: false to commit. A dataset larger than one call. Batch it, and send each call the store_ids the other batches' rows landed on as already_claimed_store_ids. Matching then stays one-to-one across the whole dataset — two rows in different batches can never both claim one existing store — and the last call's unmatched_existing is the dataset figure. Without it every census field is per call and unmatched_existing does not sum. retailer_id is a retailers.Retailer. An organization-private retailer requires OWNER or MANAGER on the organization that owns it; a canonical (Closient-curated) retailer requires a staff account, because those rows are Closient-curated. The organization this credential acts for becomes the owning organization of any location record created. Returns 200 with a per-row error report even on partial success — only request-level failures produce 4xx.\",\"url\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk\",\"mainEntityOfPage\":{\"@id\":\"https://docs.closient.com/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk#webpage\"},\"dateModified\":\"2026-10-21T19:51:11.171Z\",\"publisher\":{\"@id\":\"https://docs.closient.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.closient.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Closient\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Closient","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"group":"Account","pages":[{"group":"Organizations","pages":[{"title":"List all organizations","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations","href":"/api-reference/account/organizations/list-all-organizations"},{"title":"Create organization","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/organizations","href":"/api-reference/account/organizations/create-organization"},{"title":"Get organization","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations/{id}","href":"/api-reference/account/organizations/get-organization"},{"title":"Update organization","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json put /account/api/v1/organizations/{id}","href":"/api-reference/account/organizations/update-organization"},{"title":"Delete organization","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json delete /account/api/v1/organizations/{id}","href":"/api-reference/account/organizations/delete-organization"},{"title":"Fast-purge organization","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/organizations/{id}/fast-purge","href":"/api-reference/account/organizations/fast-purge-organization"}]},{"group":"API Keys","pages":[{"title":"List API keys","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations/{organization_id}/api-keys","href":"/api-reference/account/api-keys/list-api-keys"},{"title":"Create API key","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/organizations/{organization_id}/api-keys","href":"/api-reference/account/api-keys/create-api-key"},{"title":"Get API key","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations/{organization_id}/api-keys/{key_id}","href":"/api-reference/account/api-keys/get-api-key"},{"title":"Delete API key","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json delete /account/api/v1/organizations/{organization_id}/api-keys/{key_id}","href":"/api-reference/account/api-keys/delete-api-key"},{"title":"Update API key","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json patch /account/api/v1/organizations/{organization_id}/api-keys/{key_id}","href":"/api-reference/account/api-keys/update-api-key"}]},{"group":"Members","pages":[{"title":"List organization members","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations/{org_id}/members","href":"/api-reference/account/members/list-organization-members"},{"title":"Invite a member","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/organizations/{org_id}/members","href":"/api-reference/account/members/invite-a-member"},{"title":"Get organization member","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations/{org_id}/members/{member_id}","href":"/api-reference/account/members/get-organization-member"},{"title":"Update member role","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json put /account/api/v1/organizations/{org_id}/members/{member_id}","href":"/api-reference/account/members/update-member-role"},{"title":"Remove a member","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json delete /account/api/v1/organizations/{org_id}/members/{member_id}","href":"/api-reference/account/members/remove-a-member"}]},{"group":"Preferences","pages":[{"title":"List the caller's stored trait preferences","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/preferences","href":"/api-reference/account/preferences/list-the-callers-stored-trait-preferences"},{"title":"Create a trait preference","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/preferences","href":"/api-reference/account/preferences/create-a-trait-preference"},{"title":"Delete a trait preference","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json delete /account/api/v1/preferences/{preference_id}","href":"/api-reference/account/preferences/delete-a-trait-preference"},{"title":"Update a trait preference","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json patch /account/api/v1/preferences/{preference_id}","href":"/api-reference/account/preferences/update-a-trait-preference"}]},{"group":"Account","pages":[{"title":"Identify the authenticated caller","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/whoami","href":"/api-reference/account/account/identify-the-authenticated-caller"}]},{"group":"Scan History","pages":[{"title":"List scan history","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/history/scans","href":"/api-reference/account/scan-history/list-scan-history"},{"title":"Capture an anonymous scan","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/history/scans/capture","href":"/api-reference/account/scan-history/capture-an-anonymous-scan"},{"title":"List recently viewed products","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/history/viewed","href":"/api-reference/account/scan-history/list-recently-viewed-products"}]},{"group":"Enrollment Codes","pages":[{"title":"List enrollment codes","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/enrollment-codes","href":"/api-reference/account/enrollment-codes/list-enrollment-codes"},{"title":"Mint enrollment code","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/enrollment-codes","href":"/api-reference/account/enrollment-codes/mint-enrollment-code"},{"title":"Get live enrollment code","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/enrollment-codes/live/{retailer_id}","href":"/api-reference/account/enrollment-codes/get-live-enrollment-code"},{"title":"Get enrollment code","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/enrollment-codes/{enrollment_code_id}","href":"/api-reference/account/enrollment-codes/get-enrollment-code"},{"title":"Revoke enrollment code","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json delete /account/api/v1/enrollment-codes/{enrollment_code_id}","href":"/api-reference/account/enrollment-codes/revoke-enrollment-code"}]},{"group":"Retailer Links","pages":[{"title":"List retailer links","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/retailer-links","href":"/api-reference/account/retailer-links/list-retailer-links"},{"title":"Get retailer link detail","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/retailer-links/{link_id}","href":"/api-reference/account/retailer-links/get-retailer-link-detail"},{"title":"Unlink retailer","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/retailer-links/{link_id}/unlink","href":"/api-reference/account/retailer-links/unlink-retailer"},{"title":"Delete purchase history","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/retailer-links/{link_id}/delete-history","href":"/api-reference/account/retailer-links/delete-purchase-history"}]},{"group":"Retailer Enrollment","pages":[{"title":"Redeem enrollment code","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/retailer/enrollment-codes/redeem","href":"/api-reference/account/retailer-enrollment/redeem-enrollment-code"}]},{"group":"Retailer Clients","pages":[{"title":"List retailer clients","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json get /account/api/v1/organizations/{organization_id}/retailer-clients","href":"/api-reference/account/retailer-clients/list-retailer-clients"},{"title":"Register retailer client","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/organizations/{organization_id}/retailer-clients","href":"/api-reference/account/retailer-clients/register-retailer-client"},{"title":"Rotate retailer client secret","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json post /account/api/v1/organizations/{organization_id}/retailer-clients/{client_id}/rotate-secret","href":"/api-reference/account/retailer-clients/rotate-retailer-client-secret"},{"title":"Update retailer client","deprecated":null,"version":null,"openapi":"/openapi/openapi-account.json patch /account/api/v1/organizations/{organization_id}/retailer-clients/{client_id}","href":"/api-reference/account/retailer-clients/update-retailer-client"}]}]},{"group":"Products","pages":[{"group":"Products","pages":[{"title":"Create or update up to 1,000 products in one call","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/batch","href":"/api-reference/products/products/create-or-update-up-to-1000-products-in-one-call"},{"title":"Create a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products","href":"/api-reference/products/products/create-a-product"},{"title":"List claimed products","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/","href":"/api-reference/products/products/list-claimed-products"},{"title":"Look up a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}","href":"/api-reference/products/products/look-up-a-product"},{"title":"Delete (unclaim) a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/products/{gtin}","href":"/api-reference/products/products/delete-unclaim-a-product"},{"title":"Update a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/products/{gtin}","href":"/api-reference/products/products/update-a-product"},{"title":"Read per-field provenance","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/provenance","href":"/api-reference/products/products/read-per-field-provenance"},{"title":"Claim a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/claim","href":"/api-reference/products/products/claim-a-product"},{"title":"Unclaim a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/unclaim","href":"/api-reference/products/products/unclaim-a-product"},{"title":"Report a suspicious GTIN ownership claim","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/report-claim","href":"/api-reference/products/products/report-a-suspicious-gtin-ownership-claim"},{"title":"List product hierarchy","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/hierarchy","href":"/api-reference/products/products/list-product-hierarchy"},{"title":"List products","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/browse/products","href":"/api-reference/products/products/list-products"},{"title":"Get product detail","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/browse/products/{id}","href":"/api-reference/products/products/get-product-detail"},{"title":"List product categories","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/browse/categories","href":"/api-reference/products/products/list-product-categories"},{"title":"List catalog products","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/catalog/products","href":"/api-reference/products/products/list-catalog-products"},{"title":"Get catalog product detail","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/catalog/products/{gtin}","href":"/api-reference/products/products/get-catalog-product-detail"},{"title":"Get product content","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/content","href":"/api-reference/products/products/get-product-content"},{"title":"List product ingredients","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/ingredients","href":"/api-reference/products/products/list-product-ingredients"},{"title":"Read product ingredient","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/ingredients/{ingredient_id}","href":"/api-reference/products/products/read-product-ingredient"},{"title":"Get product nutrition facts","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/nutrition","href":"/api-reference/products/products/get-product-nutrition-facts"},{"title":"List product certifications","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/certifications","href":"/api-reference/products/products/list-product-certifications"},{"title":"List product claims","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/claims","href":"/api-reference/products/products/list-product-claims"},{"title":"List product recalls","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/recalls","href":"/api-reference/products/products/list-product-recalls"},{"title":"Render a product's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/barcode","href":"/api-reference/products/products/render-a-products-barcode"},{"title":"Render barcodes for many lots and serials","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/barcodes/bulk","href":"/api-reference/products/products/render-barcodes-for-many-lots-and-serials"},{"title":"Poll a bulk barcode job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/barcodes/bulk/{job}","href":"/api-reference/products/products/poll-a-bulk-barcode-job"},{"title":"List product images","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/images","href":"/api-reference/products/products/list-product-images"},{"title":"Upload a product image file","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/images","href":"/api-reference/products/products/upload-a-product-image-file"},{"title":"Attach a product image from a vendor-supplied URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/images/from-url","href":"/api-reference/products/products/attach-a-product-image-from-a-vendor-supplied-url"},{"title":"List and filter a product's documents","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/documents","href":"/api-reference/products/products/list-and-filter-a-products-documents"},{"title":"Create a document","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/documents","href":"/api-reference/products/products/create-a-document"},{"title":"Read a single document","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/documents/{document_id}","href":"/api-reference/products/products/read-a-single-document"},{"title":"Delete a document","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/products/{gtin}/documents/{document_id}","href":"/api-reference/products/products/delete-a-document"},{"title":"Update a document's facets and metadata","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/products/{gtin}/documents/{document_id}","href":"/api-reference/products/products/update-a-documents-facets-and-metadata"},{"title":"Redirect to the document's current file location","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/documents/{document_id}/download","href":"/api-reference/products/products/redirect-to-the-documents-current-file-location"},{"title":"Get a claim's verification status","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/verification","href":"/api-reference/products/products/get-a-claims-verification-status"},{"title":"Submit claim evidence for review","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/verification/evidence","href":"/api-reference/products/products/submit-claim-evidence-for-review"},{"title":"Check the brand domain's DNS TXT record","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/verification/dns-check","href":"/api-reference/products/products/check-the-brand-domains-dns-txt-record"},{"title":"Check the brand domain's .well-known file","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/verification/http-check","href":"/api-reference/products/products/check-the-brand-domains-well-known-file"}]},{"group":"Product Group","pages":[{"title":"Add hierarchy link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/hierarchy","href":"/api-reference/products/product-group/add-hierarchy-link"},{"title":"Read hierarchy link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/hierarchy/{hierarchy_id}","href":"/api-reference/products/product-group/read-hierarchy-link"},{"title":"Remove hierarchy link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/products/hierarchy/{hierarchy_id}","href":"/api-reference/products/product-group/remove-hierarchy-link"},{"title":"Update hierarchy link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/products/hierarchy/{hierarchy_id}","href":"/api-reference/products/product-group/update-hierarchy-link"}]},{"group":"Import","pages":[{"title":"Bulk import products from CSV","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/import/csv","href":"/api-reference/products/import/bulk-import-products-from-csv"},{"title":"Bulk import lots","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/import/lots","href":"/api-reference/products/import/bulk-import-lots"},{"title":"Bulk import serial numbers","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/import/serials","href":"/api-reference/products/import/bulk-import-serial-numbers"},{"title":"Download CSV import template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/import/template","href":"/api-reference/products/import/download-csv-import-template"},{"title":"Download lot import template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/import/lots/template","href":"/api-reference/products/import/download-lot-import-template"},{"title":"Download serial import template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/import/serials/template","href":"/api-reference/products/import/download-serial-import-template"}]},{"group":"Digital Link","pages":[{"title":"Parse a GS1 Digital Link URL into structured AIs","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/digital-link/parse","href":"/api-reference/products/digital-link/parse-a-gs1-digital-link-url-into-structured-ais"}]},{"group":"Labels","pages":[{"title":"Submit a bulk label-export job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/labels/export/","href":"/api-reference/products/labels/submit-a-bulk-label-export-job"},{"title":"Poll a bulk label-export job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/labels/export/{job_id}/","href":"/api-reference/products/labels/poll-a-bulk-label-export-job"},{"title":"List label sheet templates","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/labels/templates/","href":"/api-reference/products/labels/list-label-sheet-templates"}]},{"group":"Lots","pages":[{"title":"List lot templates","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/templates/","href":"/api-reference/products/lots/list-lot-templates"},{"title":"Create a lot template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/lots/templates/","href":"/api-reference/products/lots/create-a-lot-template"},{"title":"Read a lot template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/templates/{template_id}/","href":"/api-reference/products/lots/read-a-lot-template"},{"title":"Update a lot template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/lots/templates/{template_id}/","href":"/api-reference/products/lots/update-a-lot-template"},{"title":"List a template's versions","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/templates/{template_id}/versions/","href":"/api-reference/products/lots/list-a-templates-versions"},{"title":"Archive a lot template","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/lots/templates/{template_id}/archive/","href":"/api-reference/products/lots/archive-a-lot-template"},{"title":"Preview a template without persisting","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/lots/templates/{template_id}/preview/","href":"/api-reference/products/lots/preview-a-template-without-persisting"},{"title":"List lot runs","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/runs/","href":"/api-reference/products/lots/list-lot-runs"},{"title":"Generate a lot or serial run","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/lots/runs/","href":"/api-reference/products/lots/generate-a-lot-or-serial-run"},{"title":"Read a lot run","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/runs/{run_id}/","href":"/api-reference/products/lots/read-a-lot-run"},{"title":"Stream a run's status transitions (SSE)","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/runs/{run_id}/events/","href":"/api-reference/products/lots/stream-a-runs-status-transitions-sse"},{"title":"Stream a serial run's serials as CSV","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/runs/{run_id}/serials.csv","href":"/api-reference/products/lots/stream-a-serial-runs-serials-as-csv"},{"title":"Stream a serial run's serials as JSON Lines","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/lots/runs/{run_id}/serials.jsonl","href":"/api-reference/products/lots/stream-a-serial-runs-serials-as-json-lines"},{"title":"Commit a reserved run","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/lots/runs/{run_id}/commit/","href":"/api-reference/products/lots/commit-a-reserved-run"},{"title":"Discard a reserved run","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/lots/runs/{run_id}/discard/","href":"/api-reference/products/lots/discard-a-reserved-run"},{"title":"Latest committed run for a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/last-run/","href":"/api-reference/products/lots/latest-committed-run-for-a-product"},{"title":"Generate a PTI-compliant case label","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/lots/{lot_id}/pti-case-label/","href":"/api-reference/products/lots/generate-a-pti-compliant-case-label"},{"title":"Render a lot's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/lots/{lot_id}/barcode","href":"/api-reference/products/lots/render-a-lots-barcode"}]},{"group":"Lots and serials","pages":[{"title":"List a product's lots","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/lots","href":"/api-reference/products/lots-and-serials/list-a-products-lots"},{"title":"Create a lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/lots","href":"/api-reference/products/lots-and-serials/create-a-lot"},{"title":"Register an observed lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/lots/register-observed","href":"/api-reference/products/lots-and-serials/register-an-observed-lot"},{"title":"Get a lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/lots/{lot_id}","href":"/api-reference/products/lots-and-serials/get-a-lot"},{"title":"Delete a lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/products/{gtin}/lots/{lot_id}","href":"/api-reference/products/lots-and-serials/delete-a-lot"},{"title":"Update a lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/products/{gtin}/lots/{lot_id}","href":"/api-reference/products/lots-and-serials/update-a-lot"},{"title":"List a product's serials","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/serials","href":"/api-reference/products/lots-and-serials/list-a-products-serials"},{"title":"Create a serial","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/serials","href":"/api-reference/products/lots-and-serials/create-a-serial"},{"title":"Register an observed serial","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/serials/register-observed","href":"/api-reference/products/lots-and-serials/register-an-observed-serial"},{"title":"Get a serial","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/serials/{serial_id}","href":"/api-reference/products/lots-and-serials/get-a-serial"},{"title":"Delete a serial","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/products/{gtin}/serials/{serial_id}","href":"/api-reference/products/lots-and-serials/delete-a-serial"},{"title":"Update a serial","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/products/{gtin}/serials/{serial_id}","href":"/api-reference/products/lots-and-serials/update-a-serial"}]},{"group":"Serials","pages":[{"title":"Render a serial's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/serials/{serial_id}/barcode","href":"/api-reference/products/serials/render-a-serials-barcode"}]},{"group":"Logistic units","pages":[{"title":"Render an SSCC's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/logistic-units/{sscc}/barcode","href":"/api-reference/products/logistic-units/render-an-ssccs-barcode"}]},{"group":"Returnable assets","pages":[{"title":"Render a returnable asset's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/returnable-assets/{grai}/barcode","href":"/api-reference/products/returnable-assets/render-a-returnable-assets-barcode"}]},{"group":"Individual assets","pages":[{"title":"Render an individual asset's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/individual-assets/{giai}/barcode","href":"/api-reference/products/individual-assets/render-an-individual-assets-barcode"}]},{"group":"Product models","pages":[{"title":"Render a product model's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/product-models/{gmn}/barcode","href":"/api-reference/products/product-models/render-a-product-models-barcode"}]},{"group":"HRI Presets","pages":[{"title":"List HRI presets","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/hri-presets/","href":"/api-reference/products/hri-presets/list-hri-presets"},{"title":"Create an HRI preset","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/hri-presets/","href":"/api-reference/products/hri-presets/create-an-hri-preset"},{"title":"Read an HRI preset","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/hri-presets/{preset_id}/","href":"/api-reference/products/hri-presets/read-an-hri-preset"},{"title":"Update an HRI preset","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/hri-presets/{preset_id}/","href":"/api-reference/products/hri-presets/update-an-hri-preset"},{"title":"Archive an HRI preset","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/hri-presets/{preset_id}/archive/","href":"/api-reference/products/hri-presets/archive-an-hri-preset"}]},{"group":"Retailer Catalog Import","pages":[{"title":"Open a retailer catalog import job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/import/retailer-catalog/jobs","href":"/api-reference/products/retailer-catalog-import/open-a-retailer-catalog-import-job"},{"title":"Stage rows onto a catalog import job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/import/retailer-catalog/jobs/{job_id}/rows","href":"/api-reference/products/retailer-catalog-import/stage-rows-onto-a-catalog-import-job"},{"title":"Start or resume a catalog import job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/import/retailer-catalog/jobs/{job_id}/start","href":"/api-reference/products/retailer-catalog-import/start-or-resume-a-catalog-import-job"},{"title":"Poll a catalog import job","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/import/retailer-catalog/jobs/{job_id}","href":"/api-reference/products/retailer-catalog-import/poll-a-catalog-import-job"}]},{"group":"Product Links","pages":[{"title":"List product links","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/product-links","href":"/api-reference/products/product-links/list-product-links"},{"title":"Create product link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/product-links","href":"/api-reference/products/product-links/create-product-link"},{"title":"Reorder product links","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/product-links/reorder","href":"/api-reference/products/product-links/reorder-product-links"},{"title":"Get product link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/product-links/{link_id}","href":"/api-reference/products/product-links/get-product-link"},{"title":"Update product link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json put /products/api/v1/product-links/{link_id}","href":"/api-reference/products/product-links/update-product-link"},{"title":"Delete product link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/product-links/{link_id}","href":"/api-reference/products/product-links/delete-product-link"}]},{"group":"PIP Embed (Public)","pages":[{"title":"Product compliance panel for the embeddable PIP widget","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/public/pip/{gtin}","href":"/api-reference/products/pip-embed-public/product-compliance-panel-for-the-embeddable-pip-widget"}]},{"group":"Product Families","pages":[{"title":"List product families","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/families","href":"/api-reference/products/product-families/list-product-families"},{"title":"Create product family","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/families","href":"/api-reference/products/product-families/create-product-family"},{"title":"Get product family","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/families/{family_id}","href":"/api-reference/products/product-families/get-product-family"},{"title":"Delete product family","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/families/{family_id}","href":"/api-reference/products/product-families/delete-product-family"},{"title":"Update product family","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/families/{family_id}","href":"/api-reference/products/product-families/update-product-family"},{"title":"List product family members","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/families/{family_id}/members","href":"/api-reference/products/product-families/list-product-family-members"},{"title":"Add product family member","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/families/{family_id}/members","href":"/api-reference/products/product-families/add-product-family-member"},{"title":"Reorder product family members","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/families/{family_id}/members/reorder","href":"/api-reference/products/product-families/reorder-product-family-members"},{"title":"Get product family member","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/families/{family_id}/members/{member_id}","href":"/api-reference/products/product-families/get-product-family-member"},{"title":"Remove product family member","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/families/{family_id}/members/{member_id}","href":"/api-reference/products/product-families/remove-product-family-member"},{"title":"Update product family member","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/families/{family_id}/members/{member_id}","href":"/api-reference/products/product-families/update-product-family-member"}]},{"group":"Recipes","pages":[{"title":"List recipes","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/recipes","href":"/api-reference/products/recipes/list-recipes"},{"title":"Create recipe","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/recipes","href":"/api-reference/products/recipes/create-recipe"},{"title":"Get recipe","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/recipes/{recipe_id}","href":"/api-reference/products/recipes/get-recipe"},{"title":"Delete recipe","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/recipes/{recipe_id}","href":"/api-reference/products/recipes/delete-recipe"},{"title":"Update recipe","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/recipes/{recipe_id}","href":"/api-reference/products/recipes/update-recipe"}]},{"group":"Accessories","pages":[{"title":"List accessories","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/accessories","href":"/api-reference/products/accessories/list-accessories"},{"title":"Create accessory","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/accessories","href":"/api-reference/products/accessories/create-accessory"},{"title":"Get accessory","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/accessories/{accessory_id}","href":"/api-reference/products/accessories/get-accessory"},{"title":"Delete accessory","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/accessories/{accessory_id}","href":"/api-reference/products/accessories/delete-accessory"},{"title":"Update accessory","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/accessories/{accessory_id}","href":"/api-reference/products/accessories/update-accessory"}]},{"group":"Consumables","pages":[{"title":"List consumables","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/consumables","href":"/api-reference/products/consumables/list-consumables"},{"title":"Create consumable","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/consumables","href":"/api-reference/products/consumables/create-consumable"},{"title":"Get consumable","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/consumables/{consumable_id}","href":"/api-reference/products/consumables/get-consumable"},{"title":"Delete consumable","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/consumables/{consumable_id}","href":"/api-reference/products/consumables/delete-consumable"},{"title":"Update consumable","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/consumables/{consumable_id}","href":"/api-reference/products/consumables/update-consumable"}]},{"group":"App Links","pages":[{"title":"List app links","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/app-links","href":"/api-reference/products/app-links/list-app-links"},{"title":"Create app link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/app-links","href":"/api-reference/products/app-links/create-app-link"},{"title":"Get app link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/app-links/{link_id}","href":"/api-reference/products/app-links/get-app-link"},{"title":"Delete app link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/app-links/{link_id}","href":"/api-reference/products/app-links/delete-app-link"},{"title":"Update app link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/app-links/{link_id}","href":"/api-reference/products/app-links/update-app-link"}]},{"group":"Merchant Links","pages":[{"title":"List merchant links","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/merchant-links","href":"/api-reference/products/merchant-links/list-merchant-links"},{"title":"Create merchant link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/merchant-links","href":"/api-reference/products/merchant-links/create-merchant-link"},{"title":"Get merchant link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/merchant-links/{link_id}","href":"/api-reference/products/merchant-links/get-merchant-link"},{"title":"Delete merchant link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/merchant-links/{link_id}","href":"/api-reference/products/merchant-links/delete-merchant-link"},{"title":"Update merchant link","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/merchant-links/{link_id}","href":"/api-reference/products/merchant-links/update-merchant-link"}]},{"group":"Replacement Parts","pages":[{"title":"List replacement parts","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/replacement-parts","href":"/api-reference/products/replacement-parts/list-replacement-parts"},{"title":"Create replacement part","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/replacement-parts","href":"/api-reference/products/replacement-parts/create-replacement-part"},{"title":"Get replacement part","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/replacement-parts/{part_id}","href":"/api-reference/products/replacement-parts/get-replacement-part"},{"title":"Delete replacement part","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/replacement-parts/{part_id}","href":"/api-reference/products/replacement-parts/delete-replacement-part"},{"title":"Update replacement part","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/replacement-parts/{part_id}","href":"/api-reference/products/replacement-parts/update-replacement-part"}]},{"group":"Product Traits","pages":[{"title":"List product traits","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/products/{gtin}/traits","href":"/api-reference/products/product-traits/list-product-traits"},{"title":"Add product trait","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/products/{gtin}/traits","href":"/api-reference/products/product-traits/add-product-trait"},{"title":"Remove product trait","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/products/{gtin}/traits/{trait_id}","href":"/api-reference/products/product-traits/remove-product-trait"}]},{"group":"Firmware","pages":[{"title":"List firmware","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/firmware","href":"/api-reference/products/firmware/list-firmware"},{"title":"Create firmware","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json post /products/api/v1/firmware","href":"/api-reference/products/firmware/create-firmware"},{"title":"Get firmware","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json get /products/api/v1/firmware/{firmware_id}","href":"/api-reference/products/firmware/get-firmware"},{"title":"Delete firmware","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json delete /products/api/v1/firmware/{firmware_id}","href":"/api-reference/products/firmware/delete-firmware"},{"title":"Update firmware","deprecated":null,"version":null,"openapi":"/openapi/openapi-products.json patch /products/api/v1/firmware/{firmware_id}","href":"/api-reference/products/firmware/update-firmware"}]}]},{"group":"Brands","pages":[{"group":"Brands","pages":[{"title":"List brands","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands","href":"/api-reference/brands/brands/list-brands"},{"title":"Create brand","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands","href":"/api-reference/brands/brands/create-brand"},{"title":"Get brand detail","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}","href":"/api-reference/brands/brands/get-brand-detail"},{"title":"Delete brand","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}","href":"/api-reference/brands/brands/delete-brand"},{"title":"Update brand","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json patch /brands/api/v1/brands/{id}","href":"/api-reference/brands/brands/update-brand"},{"title":"Claim brand for organization","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/claim","href":"/api-reference/brands/brands/claim-brand-for-organization"},{"title":"Upload brand logo","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/logo","href":"/api-reference/brands/brands/upload-brand-logo"}]},{"group":"Brand GLNs","pages":[{"title":"List brand GLNs","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/glns","href":"/api-reference/brands/brand-glns/list-brand-glns"},{"title":"Link a GLN to a brand","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/glns","href":"/api-reference/brands/brand-glns/link-a-gln-to-a-brand"},{"title":"Get a brand GLN","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/glns/{gln_id}","href":"/api-reference/brands/brand-glns/get-a-brand-gln"},{"title":"Unlink a GLN from a brand","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/glns/{gln_id}","href":"/api-reference/brands/brand-glns/unlink-a-gln-from-a-brand"},{"title":"Render a brand GLN's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/glns/{gln_id}/barcode","href":"/api-reference/brands/brand-glns/render-a-brand-glns-barcode"},{"title":"Make a GLN the brand's primary","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/glns/{gln_id}/primary","href":"/api-reference/brands/brand-glns/make-a-gln-the-brands-primary"}]},{"group":"Brand locations","pages":[{"title":"List brand locations","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/locations","href":"/api-reference/brands/brand-locations/list-brand-locations"},{"title":"Add a brand location","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/locations","href":"/api-reference/brands/brand-locations/add-a-brand-location"},{"title":"Get a brand location","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/locations/{location_id}","href":"/api-reference/brands/brand-locations/get-a-brand-location"},{"title":"Delete a brand location","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/locations/{location_id}","href":"/api-reference/brands/brand-locations/delete-a-brand-location"},{"title":"Update a brand location","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json patch /brands/api/v1/brands/{id}/locations/{location_id}","href":"/api-reference/brands/brand-locations/update-a-brand-location"}]},{"group":"Brand editors","pages":[{"title":"List brand editors","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/editors","href":"/api-reference/brands/brand-editors/list-brand-editors"},{"title":"Grant brand editor access","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/editors","href":"/api-reference/brands/brand-editors/grant-brand-editor-access"},{"title":"Revoke brand editor access","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/editors/{grant_id}","href":"/api-reference/brands/brand-editors/revoke-brand-editor-access"}]},{"group":"Brand media intake","pages":[{"title":"Get the brand's media intake address","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/media-intake-email","href":"/api-reference/brands/brand-media-intake/get-the-brands-media-intake-address"},{"title":"Set or clear the brand's media intake address","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json put /brands/api/v1/brands/{id}/media-intake-email","href":"/api-reference/brands/brand-media-intake/set-or-clear-the-brands-media-intake-address"}]},{"group":"Brand assets","pages":[{"title":"List brand assets","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/assets","href":"/api-reference/brands/brand-assets/list-brand-assets"},{"title":"Upload a brand asset","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/assets","href":"/api-reference/brands/brand-assets/upload-a-brand-asset"},{"title":"Get a brand asset","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/assets/{asset_id}","href":"/api-reference/brands/brand-assets/get-a-brand-asset"},{"title":"Delete a brand asset","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/assets/{asset_id}","href":"/api-reference/brands/brand-assets/delete-a-brand-asset"},{"title":"Update a brand asset","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json patch /brands/api/v1/brands/{id}/assets/{asset_id}","href":"/api-reference/brands/brand-assets/update-a-brand-asset"}]},{"group":"Brand video pages","pages":[{"title":"List brand video pages","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/video-pages","href":"/api-reference/brands/brand-video-pages/list-brand-video-pages"},{"title":"Create a brand video page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/video-pages","href":"/api-reference/brands/brand-video-pages/create-a-brand-video-page"},{"title":"Get a brand video page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/video-pages/{page_id}","href":"/api-reference/brands/brand-video-pages/get-a-brand-video-page"},{"title":"Delete a brand video page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/video-pages/{page_id}","href":"/api-reference/brands/brand-video-pages/delete-a-brand-video-page"},{"title":"Update a brand video page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json patch /brands/api/v1/brands/{id}/video-pages/{page_id}","href":"/api-reference/brands/brand-video-pages/update-a-brand-video-page"}]},{"group":"Brand story pages","pages":[{"title":"List brand story pages","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/story-pages","href":"/api-reference/brands/brand-story-pages/list-brand-story-pages"},{"title":"Create a brand story page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/story-pages","href":"/api-reference/brands/brand-story-pages/create-a-brand-story-page"},{"title":"Get a brand story page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/story-pages/{page_id}","href":"/api-reference/brands/brand-story-pages/get-a-brand-story-page"},{"title":"Delete a brand story page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/story-pages/{page_id}","href":"/api-reference/brands/brand-story-pages/delete-a-brand-story-page"},{"title":"Update a brand story page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json patch /brands/api/v1/brands/{id}/story-pages/{page_id}","href":"/api-reference/brands/brand-story-pages/update-a-brand-story-page"}]},{"group":"Brand link pages","pages":[{"title":"List brand link pages","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/link-pages","href":"/api-reference/brands/brand-link-pages/list-brand-link-pages"},{"title":"Create a brand link page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/brands/{id}/link-pages","href":"/api-reference/brands/brand-link-pages/create-a-brand-link-page"},{"title":"Get a brand link page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/brands/{id}/link-pages/{page_id}","href":"/api-reference/brands/brand-link-pages/get-a-brand-link-page"},{"title":"Delete a brand link page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json delete /brands/api/v1/brands/{id}/link-pages/{page_id}","href":"/api-reference/brands/brand-link-pages/delete-a-brand-link-page"},{"title":"Update a brand link page","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json patch /brands/api/v1/brands/{id}/link-pages/{page_id}","href":"/api-reference/brands/brand-link-pages/update-a-brand-link-page"}]},{"group":"Brand Locator (Public)","pages":[{"title":"Find stores carrying a brand","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/public/brands/{brand_id}/locator","href":"/api-reference/brands/brand-locator-public/find-stores-carrying-a-brand"},{"title":"List a brand's products (locator catalog)","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/public/brands/{brand_id}/catalog","href":"/api-reference/brands/brand-locator-public/list-a-brands-products-locator-catalog"},{"title":"Approximate caller location","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/public/geo","href":"/api-reference/brands/brand-locator-public/approximate-caller-location"},{"title":"Geocode a free-text address","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json get /brands/api/v1/public/geocode","href":"/api-reference/brands/brand-locator-public/geocode-a-free-text-address"},{"title":"Track brand locator widget events","deprecated":null,"version":null,"openapi":"/openapi/openapi-brands.json post /brands/api/v1/public/widget-events","href":"/api-reference/brands/brand-locator-public/track-brand-locator-widget-events"}]}]},{"group":"Locations","pages":[{"group":"Store Locator (Public)","pages":[{"title":"Find nearby locations","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json get /locations/api/v1/public/locations","href":"/api-reference/locations/store-locator-public/find-nearby-locations"},{"title":"Approximate caller location","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json get /locations/api/v1/public/geo","href":"/api-reference/locations/store-locator-public/approximate-caller-location"},{"title":"Geocode a free-text address","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json get /locations/api/v1/public/geocode","href":"/api-reference/locations/store-locator-public/geocode-a-free-text-address"},{"title":"Track widget analytics events","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json post /locations/api/v1/public/widget-events","href":"/api-reference/locations/store-locator-public/track-widget-analytics-events"}]},{"group":"Countries","pages":[{"title":"Resolve a coordinate to a country","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json get /locations/api/v1/countries/resolve","href":"/api-reference/locations/countries/resolve-a-coordinate-to-a-country"}]},{"group":"Locations","pages":[{"title":"List places","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json get /locations/api/v1/organizations/{organization_id}/places","href":"/api-reference/locations/locations/list-places"},{"title":"Add a place","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json post /locations/api/v1/organizations/{organization_id}/places","href":"/api-reference/locations/locations/add-a-place"},{"title":"Get a place","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json get /locations/api/v1/organizations/{organization_id}/places/{place_id}","href":"/api-reference/locations/locations/get-a-place"},{"title":"Delete a place","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json delete /locations/api/v1/organizations/{organization_id}/places/{place_id}","href":"/api-reference/locations/locations/delete-a-place"},{"title":"Update a place","deprecated":null,"version":null,"openapi":"/openapi/openapi-locations.json patch /locations/api/v1/organizations/{organization_id}/places/{place_id}","href":"/api-reference/locations/locations/update-a-place"}]}]},{"group":"Retailers","pages":[{"group":"Retailers","pages":[{"title":"List retailers","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers","href":"/api-reference/retailers/retailers/list-retailers"},{"title":"Create retailer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/organizations/{organization_id}/retailers","href":"/api-reference/retailers/retailers/create-retailer"},{"title":"Get retailer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}","href":"/api-reference/retailers/retailers/get-retailer"},{"title":"Delete retailer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/retailers/{retailer_id}","href":"/api-reference/retailers/retailers/delete-retailer"},{"title":"Update retailer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json patch /retailers/api/v1/retailers/{retailer_id}","href":"/api-reference/retailers/retailers/update-retailer"}]},{"group":"In-store Offers","pages":[{"title":"List in-store offers","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/organizations/{organization_id}/in-store-offers","href":"/api-reference/retailers/in-store-offers/list-in-store-offers"},{"title":"Create in-store offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/organizations/{organization_id}/in-store-offers","href":"/api-reference/retailers/in-store-offers/create-in-store-offer"},{"title":"Get in-store offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/in-store-offers/{offer_id}","href":"/api-reference/retailers/in-store-offers/get-in-store-offer"},{"title":"Update in-store offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json put /retailers/api/v1/in-store-offers/{offer_id}","href":"/api-reference/retailers/in-store-offers/update-in-store-offer"},{"title":"Delete in-store offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/in-store-offers/{offer_id}","href":"/api-reference/retailers/in-store-offers/delete-in-store-offer"}]},{"group":"Online Offers","pages":[{"title":"List online offers","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/organizations/{organization_id}/online-offers","href":"/api-reference/retailers/online-offers/list-online-offers"},{"title":"Create online offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/organizations/{organization_id}/online-offers","href":"/api-reference/retailers/online-offers/create-online-offer"},{"title":"Get online offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/online-offers/{offer_id}","href":"/api-reference/retailers/online-offers/get-online-offer"},{"title":"Update online offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json put /retailers/api/v1/online-offers/{offer_id}","href":"/api-reference/retailers/online-offers/update-online-offer"},{"title":"Delete online offer","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/online-offers/{offer_id}","href":"/api-reference/retailers/online-offers/delete-online-offer"}]},{"group":"In-store Offer Promotions","pages":[{"title":"List in-store offer promotions","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/in-store-offers/{offer_id}/promotions","href":"/api-reference/retailers/in-store-offer-promotions/list-in-store-offer-promotions"},{"title":"Get in-store promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/in-store-promotions/{promotion_id}","href":"/api-reference/retailers/in-store-offer-promotions/get-in-store-promotion"},{"title":"Update in-store offer promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json put /retailers/api/v1/in-store-promotions/{promotion_id}","href":"/api-reference/retailers/in-store-offer-promotions/update-in-store-offer-promotion"},{"title":"Delete in-store offer promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/in-store-promotions/{promotion_id}","href":"/api-reference/retailers/in-store-offer-promotions/delete-in-store-offer-promotion"},{"title":"Create in-store offer promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/in-store-promotions","href":"/api-reference/retailers/in-store-offer-promotions/create-in-store-offer-promotion"}]},{"group":"Online Offer Promotions","pages":[{"title":"List online offer promotions","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/online-offers/{offer_id}/promotions","href":"/api-reference/retailers/online-offer-promotions/list-online-offer-promotions"},{"title":"Get online promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/online-promotions/{promotion_id}","href":"/api-reference/retailers/online-offer-promotions/get-online-promotion"},{"title":"Update online offer promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json put /retailers/api/v1/online-promotions/{promotion_id}","href":"/api-reference/retailers/online-offer-promotions/update-online-offer-promotion"},{"title":"Delete online offer promotion","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/online-promotions/{promotion_id}","href":"/api-reference/retailers/online-offer-promotions/delete-online-offer-promotion"},{"title":"Create online offer promotion","description":"Create a time-windowed promotional price on an online offer. ``end_date`` must be strictly after ``start_date``; the database enforces this with a check constraint. Currency is inherited from the offer's parent ``OnlineStore`` — there is no per-promotion currency override. Returns ``404`` (rather than ``403``) when the caller lacks ``MANAGE_OFFERS`` to avoid leaking offer existence.","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/online-promotions","href":"/api-reference/retailers/online-offer-promotions/create-online-offer-promotion"}]},{"group":"Retailer Stores","pages":[{"title":"Upsert physical stores in bulk","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/stores/batch","href":"/api-reference/retailers/retailer-stores/upsert-physical-stores-in-bulk"},{"title":"List a retailer's physical stores","description":"Every physical store on file for one retailer, paginated.\n\n**Unfiltered by default, retired stores included.** The count returned here is therefore the same population the store upsert reports as `existing_stores`, which is the point: after an import whose outcome is unknown, this is how you ask what the catalog holds without re-running a dry-run import to find out. Pass `is_active=true` for only the live ones.\n\nOrdered by name, then by id so the ordering is total and paging cannot skip or repeat a store whose name it shares with another.\n\nReading a canonical (Closient-curated) retailer's stores needs only an authenticated caller — those rows are already public on the Directory pages. An organization-private retailer requires view access on the organization that owns it, and a credential scoped to a different organization gets `404` rather than `403`, so the API never confirms that another organization's retailer exists.","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}/stores","href":"/api-reference/retailers/retailer-stores/list-a-retailers-physical-stores"},{"title":"Upsert one physical store","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/stores","href":"/api-reference/retailers/retailer-stores/upsert-one-physical-store"},{"title":"Get one physical store","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}/stores/{store_id}","href":"/api-reference/retailers/retailer-stores/get-one-physical-store"},{"title":"Retire one physical store","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/retailers/{retailer_id}/stores/{store_id}","href":"/api-reference/retailers/retailer-stores/retire-one-physical-store"},{"title":"Update one physical store","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json patch /retailers/api/v1/retailers/{retailer_id}/stores/{store_id}","href":"/api-reference/retailers/retailer-stores/update-one-physical-store"}]},{"group":"Retailer Listings","pages":[{"title":"Upsert retailer product listings in bulk","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/listings/batch","href":"/api-reference/retailers/retailer-listings/upsert-retailer-product-listings-in-bulk"},{"title":"List a retailer's product listings","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}/listings","href":"/api-reference/retailers/retailer-listings/list-a-retailers-product-listings"},{"title":"Upsert one retailer product listing","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/listings","href":"/api-reference/retailers/retailer-listings/upsert-one-retailer-product-listing"},{"title":"List a retailer's online storefronts","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}/storefronts","href":"/api-reference/retailers/retailer-listings/list-a-retailers-online-storefronts"},{"title":"Declare a retailer web property","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json post /retailers/api/v1/retailers/{retailer_id}/storefronts","href":"/api-reference/retailers/retailer-listings/declare-a-retailer-web-property"},{"title":"Get one retailer product listing","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}/listings/{listing_id}","href":"/api-reference/retailers/retailer-listings/get-one-retailer-product-listing"},{"title":"Drop one product from a retailer's catalog","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/retailers/{retailer_id}/listings/{listing_id}","href":"/api-reference/retailers/retailer-listings/drop-one-product-from-a-retailers-catalog"},{"title":"Update one retailer product listing","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json patch /retailers/api/v1/retailers/{retailer_id}/listings/{listing_id}","href":"/api-reference/retailers/retailer-listings/update-one-retailer-product-listing"},{"title":"Get one online storefront","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json get /retailers/api/v1/retailers/{retailer_id}/storefronts/{storefront_id}","href":"/api-reference/retailers/retailer-listings/get-one-online-storefront"},{"title":"Retire one online storefront","deprecated":null,"version":null,"openapi":"/openapi/openapi-retailers.json delete /retailers/api/v1/retailers/{retailer_id}/storefronts/{storefront_id}","href":"/api-reference/retailers/retailer-listings/retire-one-online-storefront"}]}]},{"group":"Search","pages":[{"group":"Search","pages":[{"title":"Search the catalog","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json get /search/api/v1/search","href":"/api-reference/search/search/search-the-catalog"},{"title":"Search for a product and where to buy it nearby","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json get /search/api/v1/search/products","href":"/api-reference/search/search/search-for-a-product-and-where-to-buy-it-nearby"},{"title":"Report a post-search interaction (click, radius expand, etc.) for CTR-by-position measurement","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json post /search/api/v1/search/click","href":"/api-reference/search/search/report-a-post-search-interaction-click-radius-expand-etc-for-ctr-by-position-measurement"},{"title":"Open a conversational search session","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json post /search/api/v1/search/session","href":"/api-reference/search/search/open-a-conversational-search-session"},{"title":"Submit a follow-up query within a session","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json post /search/api/v1/search/session/{session_id}/query","href":"/api-reference/search/search/submit-a-follow-up-query-within-a-session"},{"title":"Remove a constraint from the session","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json delete /search/api/v1/search/session/{session_id}/constraints/{key}","href":"/api-reference/search/search/remove-a-constraint-from-the-session"},{"title":"Clear a search session","deprecated":null,"version":null,"openapi":"/openapi/openapi-search.json delete /search/api/v1/search/session/{session_id}","href":"/api-reference/search/search/clear-a-search-session"}]}]},{"group":"GS1 Digital Link","pages":[{"group":"Resolver","pages":[{"title":"List resolution rules","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/resolution-rules","href":"/api-reference/resolver/resolver/list-resolution-rules"},{"title":"Create resolution rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/resolution-rules","href":"/api-reference/resolver/resolver/create-resolution-rule"},{"title":"Get the default resolution rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/resolution-rules/default","href":"/api-reference/resolver/resolver/get-the-default-resolution-rule"},{"title":"Reorder resolution rules","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/resolution-rules/reorder","href":"/api-reference/resolver/resolver/reorder-resolution-rules"},{"title":"Get resolution rule summary","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/resolution-rules/summary","href":"/api-reference/resolver/resolver/get-resolution-rule-summary"},{"title":"Get resolution rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/resolution-rules/{rule_id}","href":"/api-reference/resolver/resolver/get-resolution-rule"},{"title":"Update resolution rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json put /resolver/api/v1/resolution-rules/{rule_id}","href":"/api-reference/resolver/resolver/update-resolution-rule"},{"title":"Delete resolution rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/resolution-rules/{rule_id}","href":"/api-reference/resolver/resolver/delete-resolution-rule"}]},{"group":"Verification","pages":[{"title":"Verify a serialized GTIN (gs1:verificationService)","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/verify/01/{gtin}/21/{serial_number}","href":"/api-reference/resolver/verification/verify-a-serialized-gtin-gs1:verificationservice"}]},{"group":"Custom URLs","pages":[{"title":"List custom URLs","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/custom-urls","href":"/api-reference/resolver/custom-urls/list-custom-urls"},{"title":"Create custom URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/custom-urls","href":"/api-reference/resolver/custom-urls/create-custom-url"},{"title":"Get custom URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/custom-urls/{custom_url_id}","href":"/api-reference/resolver/custom-urls/get-custom-url"},{"title":"Update custom URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json put /resolver/api/v1/custom-urls/{custom_url_id}","href":"/api-reference/resolver/custom-urls/update-custom-url"},{"title":"Delete custom URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/custom-urls/{custom_url_id}","href":"/api-reference/resolver/custom-urls/delete-custom-url"},{"title":"Retry custom-URL health check","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/custom-urls/{custom_url_id}/retry","href":"/api-reference/resolver/custom-urls/retry-custom-url-health-check"}]},{"group":"Resolver Configuration","pages":[{"title":"Get resolver settings","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/resolver-settings","href":"/api-reference/resolver/resolver-configuration/get-resolver-settings"},{"title":"Update resolver settings","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json put /resolver/api/v1/resolver-settings","href":"/api-reference/resolver/resolver-configuration/update-resolver-settings"},{"title":"Get product resolver behavior","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/products/{gtin}/resolver-behavior","href":"/api-reference/resolver/resolver-configuration/get-product-resolver-behavior"},{"title":"Update product resolver behavior","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json patch /resolver/api/v1/products/{gtin}/resolver-behavior","href":"/api-reference/resolver/resolver-configuration/update-product-resolver-behavior"},{"title":"Set product resolver status","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json put /resolver/api/v1/products/{gtin}/resolver-enabled","href":"/api-reference/resolver/resolver-configuration/set-product-resolver-status"}]},{"group":"Link-type sections","pages":[{"title":"List link-type documents","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-documents","href":"/api-reference/resolver/link-type-sections/list-link-type-documents"},{"title":"Create link-type document","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/link-type-documents","href":"/api-reference/resolver/link-type-sections/create-link-type-document"},{"title":"Get link-type document","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-documents/{document_id}","href":"/api-reference/resolver/link-type-sections/get-link-type-document"},{"title":"Delete link-type document","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/link-type-documents/{document_id}","href":"/api-reference/resolver/link-type-sections/delete-link-type-document"},{"title":"Update link-type document","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json patch /resolver/api/v1/link-type-documents/{document_id}","href":"/api-reference/resolver/link-type-sections/update-link-type-document"},{"title":"List link-type coupons","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-coupons","href":"/api-reference/resolver/link-type-sections/list-link-type-coupons"},{"title":"Create link-type coupon","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/link-type-coupons","href":"/api-reference/resolver/link-type-sections/create-link-type-coupon"},{"title":"Get link-type coupon","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-coupons/{coupon_id}","href":"/api-reference/resolver/link-type-sections/get-link-type-coupon"},{"title":"Delete link-type coupon","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/link-type-coupons/{coupon_id}","href":"/api-reference/resolver/link-type-sections/delete-link-type-coupon"},{"title":"Update link-type coupon","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json patch /resolver/api/v1/link-type-coupons/{coupon_id}","href":"/api-reference/resolver/link-type-sections/update-link-type-coupon"},{"title":"List link-type service relations","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-service-relations","href":"/api-reference/resolver/link-type-sections/list-link-type-service-relations"},{"title":"Create link-type service relation","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/link-type-service-relations","href":"/api-reference/resolver/link-type-sections/create-link-type-service-relation"},{"title":"Get link-type service relation","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-service-relations/{service_relation_id}","href":"/api-reference/resolver/link-type-sections/get-link-type-service-relation"},{"title":"Delete link-type service relation","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/link-type-service-relations/{service_relation_id}","href":"/api-reference/resolver/link-type-sections/delete-link-type-service-relation"},{"title":"Update link-type service relation","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json patch /resolver/api/v1/link-type-service-relations/{service_relation_id}","href":"/api-reference/resolver/link-type-sections/update-link-type-service-relation"}]},{"group":"Link-type documents","pages":[{"title":"Render a GS1 document's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-documents/{document_id}/barcode","href":"/api-reference/resolver/link-type-documents/render-a-gs1-documents-barcode"}]},{"group":"Link-type coupons","pages":[{"title":"Render a GS1 coupon's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-coupons/{coupon_id}/barcode","href":"/api-reference/resolver/link-type-coupons/render-a-gs1-coupons-barcode"}]},{"group":"Link-type service relations","pages":[{"title":"Render a GS1 service relation's barcode","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/link-type-service-relations/{service_relation_id}/barcode","href":"/api-reference/resolver/link-type-service-relations/render-a-gs1-service-relations-barcode"}]},{"group":"Routing rules","pages":[{"title":"List routing rules","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/routing-rules","href":"/api-reference/resolver/routing-rules/list-routing-rules"},{"title":"Create routing rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/routing-rules","href":"/api-reference/resolver/routing-rules/create-routing-rule"},{"title":"Get routing rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/routing-rules/{rule_id}","href":"/api-reference/resolver/routing-rules/get-routing-rule"},{"title":"Update routing rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json patch /resolver/api/v1/routing-rules/{rule_id}","href":"/api-reference/resolver/routing-rules/update-routing-rule"},{"title":"Activate routing rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/routing-rules/{rule_id}/activate","href":"/api-reference/resolver/routing-rules/activate-routing-rule"},{"title":"Deactivate routing rule","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/routing-rules/{rule_id}/deactivate","href":"/api-reference/resolver/routing-rules/deactivate-routing-rule"}]},{"group":"Lot groups","pages":[{"title":"List lot groups","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/lot-groups","href":"/api-reference/resolver/lot-groups/list-lot-groups"},{"title":"Create lot group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/lot-groups","href":"/api-reference/resolver/lot-groups/create-lot-group"},{"title":"Get lot group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/lot-groups/{group_id}","href":"/api-reference/resolver/lot-groups/get-lot-group"},{"title":"List a lot group's lots","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/lot-groups/{group_id}/members","href":"/api-reference/resolver/lot-groups/list-a-lot-groups-lots"},{"title":"Add lots to a lot group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/lot-groups/{group_id}/members","href":"/api-reference/resolver/lot-groups/add-lots-to-a-lot-group"},{"title":"Remove a lot from a lot group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/lot-groups/{group_id}/members/{lot_id}","href":"/api-reference/resolver/lot-groups/remove-a-lot-from-a-lot-group"}]},{"group":"Serial groups","pages":[{"title":"List serial groups","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/serial-groups","href":"/api-reference/resolver/serial-groups/list-serial-groups"},{"title":"Create serial group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/serial-groups","href":"/api-reference/resolver/serial-groups/create-serial-group"},{"title":"Get serial group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/serial-groups/{group_id}","href":"/api-reference/resolver/serial-groups/get-serial-group"},{"title":"List a serial group's serials","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/serial-groups/{group_id}/members","href":"/api-reference/resolver/serial-groups/list-a-serial-groups-serials"},{"title":"Add serials to a serial group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/serial-groups/{group_id}/members","href":"/api-reference/resolver/serial-groups/add-serials-to-a-serial-group"},{"title":"Remove a serial from a serial group","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json delete /resolver/api/v1/serial-groups/{group_id}/members/{serial_id}","href":"/api-reference/resolver/serial-groups/remove-a-serial-from-a-serial-group"}]},{"group":"Resolver Custom Hostnames","pages":[{"title":"List custom resolver hostnames","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/custom-hostnames","href":"/api-reference/resolver/resolver-custom-hostnames/list-custom-resolver-hostnames"},{"title":"Register a custom resolver hostname","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/custom-hostnames","href":"/api-reference/resolver/resolver-custom-hostnames/register-a-custom-resolver-hostname"},{"title":"Verify a custom resolver hostname","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/custom-hostnames/verify","href":"/api-reference/resolver/resolver-custom-hostnames/verify-a-custom-resolver-hostname"},{"title":"Disable a custom resolver hostname","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/custom-hostnames/disable","href":"/api-reference/resolver/resolver-custom-hostnames/disable-a-custom-resolver-hostname"},{"title":"Set a custom resolver hostname's unresolved-scan fallback policy","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json post /resolver/api/v1/custom-hostnames/fallback-policy","href":"/api-reference/resolver/resolver-custom-hostnames/set-a-custom-resolver-hostnames-unresolved-scan-fallback-policy"},{"title":"Get a custom resolver hostname","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/custom-hostnames/{hostname}","href":"/api-reference/resolver/resolver-custom-hostnames/get-a-custom-resolver-hostname"},{"title":"Custom-hostname onboarding nudge","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/custom-hostname-nudge","href":"/api-reference/resolver/resolver-custom-hostnames/custom-hostname-onboarding-nudge"}]},{"group":"GS1 Primitives (Public)","pages":[{"title":"Validate a GS1 Digital Link URI against the specification","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/validate","href":"/api-reference/resolver/gs1-primitives-public/validate-a-gs1-digital-link-uri-against-the-specification"},{"title":"Parse a GS1 Digital Link URI into its Application Identifiers","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/parse","href":"/api-reference/resolver/gs1-primitives-public/parse-a-gs1-digital-link-uri-into-its-application-identifiers"},{"title":"Compose a GS1 Digital Link URI from Application Identifiers","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/build","href":"/api-reference/resolver/gs1-primitives-public/compose-a-gs1-digital-link-uri-from-application-identifiers"},{"title":"Compress Application Identifiers into a GS1 Digital Link path segment","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/compress","href":"/api-reference/resolver/gs1-primitives-public/compress-application-identifiers-into-a-gs1-digital-link-path-segment"},{"title":"Decode a GS1-compressed Digital Link path segment","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/decompress","href":"/api-reference/resolver/gs1-primitives-public/decode-a-gs1-compressed-digital-link-path-segment"},{"title":"Verify a GS1 key's check digit and identify its prefix","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/analyze","href":"/api-reference/resolver/gs1-primitives-public/verify-a-gs1-keys-check-digit-and-identify-its-prefix"},{"title":"Which Application Identifiers belong on the pack, per scan context","deprecated":null,"version":null,"openapi":"/openapi/openapi-resolver.json get /resolver/api/v1/public/gs1/placement","href":"/api-reference/resolver/gs1-primitives-public/which-application-identifiers-belong-on-the-pack-per-scan-context"}]}]},{"group":"EPCIS 2.0","pages":[{"group":"EPCIS 2.0","pages":[{"title":"List capture jobs","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/capture","href":"/api-reference/epcis/epcis-20/list-capture-jobs"},{"title":"Capture EPCIS events","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json post /epcis/api/2.0/capture","href":"/api-reference/epcis/epcis-20/capture-epcis-events"},{"title":"Discover /capture capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/capture","href":"/api-reference/epcis/epcis-20/discover-capture-capabilities"},{"title":"Get capture job","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/capture/{capture_id}","href":"/api-reference/epcis/epcis-20/get-capture-job"},{"title":"Discover /capture/{captureID} capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/capture/{capture_id}","href":"/api-reference/epcis/epcis-20/discover-capture-capabilities-1"},{"title":"Query EPCIS events","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/events","href":"/api-reference/epcis/epcis-20/query-epcis-events"},{"title":"Discover /events capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/events","href":"/api-reference/epcis/epcis-20/discover-events-capabilities"},{"title":"Get EPCIS event by ID","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/events/{event_id}","href":"/api-reference/epcis/epcis-20/get-epcis-event-by-id"},{"title":"Discover /events/{eventID} capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/events/{event_id}","href":"/api-reference/epcis/epcis-20/discover-events-capabilities-1"},{"title":"List supported event types","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/eventTypes","href":"/api-reference/epcis/epcis-20/list-supported-event-types"},{"title":"Discover /eventTypes capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/eventTypes","href":"/api-reference/epcis/epcis-20/discover-eventtypes-capabilities"},{"title":"Discover service-root capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/","href":"/api-reference/epcis/epcis-20/discover-service-root-capabilities"},{"title":"Capability declaration","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/capability","href":"/api-reference/epcis/epcis-20/capability-declaration"},{"title":"Enqueue an FSMA 204 traceability export for one lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/traceability/lots/{lot_id}/fda-export","href":"/api-reference/epcis/epcis-20/enqueue-an-fsma-204-traceability-export-for-one-lot"},{"title":"Quantified downstream footprint for one lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/traceability/lots/{lot_id}/blast-radius","href":"/api-reference/epcis/epcis-20/quantified-downstream-footprint-for-one-lot"},{"title":"Historical KDE/CTE snapshot for one lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/traceability/lots/{lot_id}/as-of","href":"/api-reference/epcis/epcis-20/historical-kdecte-snapshot-for-one-lot"},{"title":"One-click FSMA 204 readiness score for one lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/traceability/lots/{lot_id}/fsma-204-readiness","href":"/api-reference/epcis/epcis-20/one-click-fsma-204-readiness-score-for-one-lot"},{"title":"List named queries","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/queries","href":"/api-reference/epcis/epcis-20/list-named-queries"},{"title":"Create a named query","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json post /epcis/api/2.0/queries","href":"/api-reference/epcis/epcis-20/create-a-named-query"},{"title":"Discover /queries capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/queries","href":"/api-reference/epcis/epcis-20/discover-queries-capabilities"},{"title":"Get a named query","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/queries/{query_name}","href":"/api-reference/epcis/epcis-20/get-a-named-query"},{"title":"Delete a named query","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json delete /epcis/api/2.0/queries/{query_name}","href":"/api-reference/epcis/epcis-20/delete-a-named-query"},{"title":"Discover /queries/{queryName} capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/queries/{query_name}","href":"/api-reference/epcis/epcis-20/discover-queries-capabilities-1"},{"title":"Run a named query","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/queries/{query_name}/events","href":"/api-reference/epcis/epcis-20/run-a-named-query"},{"title":"Discover /queries/{queryName}/events capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/queries/{query_name}/events","href":"/api-reference/epcis/epcis-20/discover-queries-events-capabilities"},{"title":"List a named query's subscriptions","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/queries/{query_name}/subscriptions","href":"/api-reference/epcis/epcis-20/list-a-named-querys-subscriptions"},{"title":"Subscribe to a named query","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json post /epcis/api/2.0/queries/{query_name}/subscriptions","href":"/api-reference/epcis/epcis-20/subscribe-to-a-named-query"},{"title":"Discover /queries/{queryName}/subscriptions capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/queries/{query_name}/subscriptions","href":"/api-reference/epcis/epcis-20/discover-queries-subscriptions-capabilities"},{"title":"Get a subscription","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/queries/{query_name}/subscriptions/{subscription_id}","href":"/api-reference/epcis/epcis-20/get-a-subscription"},{"title":"Delete a subscription","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json delete /epcis/api/2.0/queries/{query_name}/subscriptions/{subscription_id}","href":"/api-reference/epcis/epcis-20/delete-a-subscription"},{"title":"Discover /queries/{queryName}/subscriptions/{subscriptionID} capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/queries/{query_name}/subscriptions/{subscription_id}","href":"/api-reference/epcis/epcis-20/discover-queries-subscriptions-capabilities-1"},{"title":"Query EPCIS events of one event type","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/eventTypes/{eventType}/events","href":"/api-reference/epcis/epcis-20/query-epcis-events-of-one-event-type"},{"title":"Discover /eventTypes/{eventType}/events capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/eventTypes/{eventType}/events","href":"/api-reference/epcis/epcis-20/discover-eventtypes-events-capabilities"},{"title":"Get the sub-resources of an event type","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/eventTypes/{eventType}","href":"/api-reference/epcis/epcis-20/get-the-sub-resources-of-an-event-type"},{"title":"Discover /eventTypes/{eventType} capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/eventTypes/{eventType}","href":"/api-reference/epcis/epcis-20/discover-eventtypes-capabilities-1"},{"title":"List EPCs","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/epcs","href":"/api-reference/epcis/epcis-20/list-epcs"},{"title":"Discover /epcs capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/epcs","href":"/api-reference/epcis/epcis-20/discover-epcs-capabilities"},{"title":"Query EPCIS events naming one EPC","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/epcs/{epc}/events","href":"/api-reference/epcis/epcis-20/query-epcis-events-naming-one-epc"},{"title":"Discover /epcs/{epc}/events capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/epcs/{epc}/events","href":"/api-reference/epcis/epcis-20/discover-epcs-events-capabilities"},{"title":"Get the sub-resources of an EPC","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/epcs/{epc}","href":"/api-reference/epcis/epcis-20/get-the-sub-resources-of-an-epc"},{"title":"Discover /epcs/{epc} capabilities","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json options /epcis/api/2.0/epcs/{epc}","href":"/api-reference/epcis/epcis-20/discover-epcs-capabilities-1"},{"title":"Verify a serialized unit for returns","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/verification/serial","href":"/api-reference/epcis/epcis-20/verify-a-serialized-unit-for-returns"},{"title":"Record an accepted return of a serialized unit","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json post /epcis/api/2.0/verification/returns","href":"/api-reference/epcis/epcis-20/record-an-accepted-return-of-a-serialized-unit"},{"title":"Fraud-blocked returns report","deprecated":null,"version":null,"openapi":"/openapi/openapi-epcis.json get /epcis/api/2.0/verification/report","href":"/api-reference/epcis/epcis-20/fraud-blocked-returns-report"}]}]},{"group":"Integrations","pages":[{"group":"Webhook Endpoints","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json get /integrations/api/v1/webhooks/endpoints/","href":"/api-reference/integrations/webhook-endpoints/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/endpoints/","href":"/api-reference/integrations/webhook-endpoints/create-a-webhook-endpoint"},{"title":"Get a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json get /integrations/api/v1/webhooks/endpoints/{endpoint_id}/","href":"/api-reference/integrations/webhook-endpoints/get-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json delete /integrations/api/v1/webhooks/endpoints/{endpoint_id}/","href":"/api-reference/integrations/webhook-endpoints/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json patch /integrations/api/v1/webhooks/endpoints/{endpoint_id}/","href":"/api-reference/integrations/webhook-endpoints/update-a-webhook-endpoint"},{"title":"Rotate signing secret","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/endpoints/{endpoint_id}/rotate-secret/","href":"/api-reference/integrations/webhook-endpoints/rotate-signing-secret"},{"title":"Send test event","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/endpoints/{endpoint_id}/test/","href":"/api-reference/integrations/webhook-endpoints/send-test-event"},{"title":"Pause a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/endpoints/{endpoint_id}/pause/","href":"/api-reference/integrations/webhook-endpoints/pause-a-webhook-endpoint"},{"title":"Resume a paused webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/endpoints/{endpoint_id}/resume/","href":"/api-reference/integrations/webhook-endpoints/resume-a-paused-webhook-endpoint"},{"title":"Verify endpoint ownership","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/endpoints/{endpoint_id}/verify/","href":"/api-reference/integrations/webhook-endpoints/verify-endpoint-ownership"}]},{"group":"Webhook Event Catalog","pages":[{"title":"List subscribable event types","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json get /integrations/api/v1/webhooks/event-types/","href":"/api-reference/integrations/webhook-event-catalog/list-subscribable-event-types"}]},{"group":"Webhook Deliveries","pages":[{"title":"List webhook deliveries","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json get /integrations/api/v1/webhooks/deliveries/","href":"/api-reference/integrations/webhook-deliveries/list-webhook-deliveries"},{"title":"Replay a dead-lettered delivery","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json post /integrations/api/v1/webhooks/deliveries/{delivery_id}/replay/","href":"/api-reference/integrations/webhook-deliveries/replay-a-dead-lettered-delivery"}]},{"group":"Webhook Events","pages":[{"title":"Replay events from a cursor (gap-fill on reconnect)","deprecated":null,"version":null,"openapi":"/openapi/openapi-integrations.json get /integrations/api/v1/webhooks/events/","href":"/api-reference/integrations/webhook-events/replay-events-from-a-cursor-gap-fill-on-reconnect"}]}]},{"group":"Billing","pages":[{"group":"Billing","pages":[{"title":"Stripe webhook","deprecated":null,"version":null,"openapi":"/openapi/openapi-billing.json post /billing/api/v1/billing/webhook","href":"/api-reference/billing/billing/stripe-webhook"},{"title":"Create resolver subscription checkout","deprecated":null,"version":null,"openapi":"/openapi/openapi-billing.json post /billing/api/v1/billing/resolver/checkout","href":"/api-reference/billing/billing/create-resolver-subscription-checkout"},{"title":"Cancel resolver subscription","deprecated":null,"version":null,"openapi":"/openapi/openapi-billing.json post /billing/api/v1/billing/resolver/{organization_id}/cancel","href":"/api-reference/billing/billing/cancel-resolver-subscription"},{"title":"Create billing portal session","deprecated":null,"version":null,"openapi":"/openapi/openapi-billing.json post /billing/api/v1/billing/resolver/{organization_id}/portal","href":"/api-reference/billing/billing/create-billing-portal-session"},{"title":"Get resolver billing summary","deprecated":null,"version":null,"openapi":"/openapi/openapi-billing.json get /billing/api/v1/billing/resolver/{organization_id}","href":"/api-reference/billing/billing/get-resolver-billing-summary"},{"title":"List issued invoices","deprecated":null,"version":null,"openapi":"/openapi/openapi-billing.json get /billing/api/v1/billing/resolver/{organization_id}/invoices","href":"/api-reference/billing/billing/list-issued-invoices"}]}]},{"group":"Scanner","pages":[{"group":"Scanner Sessions","pages":[{"title":"List scan sessions","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/sessions","href":"/api-reference/scanner/scanner-sessions/list-scan-sessions"},{"title":"Create a scan session","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/sessions","href":"/api-reference/scanner/scanner-sessions/create-a-scan-session"},{"title":"Get session details","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/sessions/{id}","href":"/api-reference/scanner/scanner-sessions/get-session-details"},{"title":"Poll session status","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/sessions/{id}/status","href":"/api-reference/scanner/scanner-sessions/poll-session-status"},{"title":"End a scan session","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/sessions/{id}/end","href":"/api-reference/scanner/scanner-sessions/end-a-scan-session"}]},{"group":"Scanner Captures","pages":[{"title":"List scan captures","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/captures","href":"/api-reference/scanner/scanner-captures/list-scan-captures"},{"title":"Submit a barcode or QR scan","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/captures","href":"/api-reference/scanner/scanner-captures/submit-a-barcode-or-qr-scan"},{"title":"Get capture status","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/captures/{id}","href":"/api-reference/scanner/scanner-captures/get-capture-status"},{"title":"Retry a failed capture","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/captures/{id}/retry","href":"/api-reference/scanner/scanner-captures/retry-a-failed-capture"}]},{"group":"Scanner Enrichment","pages":[{"title":"List enrichment proposals","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/captures/{id}/proposals","href":"/api-reference/scanner/scanner-enrichment/list-enrichment-proposals"},{"title":"Review an enrichment proposal","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json patch /scanner/api/v1/proposals/{proposal_id}","href":"/api-reference/scanner/scanner-enrichment/review-an-enrichment-proposal"},{"title":"Apply accepted proposals","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/captures/{id}/apply","href":"/api-reference/scanner/scanner-enrichment/apply-accepted-proposals"}]},{"group":"Scanner Photos","pages":[{"title":"Get presigned upload URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/sessions/{session_id}/presigned-upload-url","href":"/api-reference/scanner/scanner-photos/get-presigned-upload-url"},{"title":"Reorder product photos","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/sessions/{session_id}/photos/reorder","href":"/api-reference/scanner/scanner-photos/reorder-product-photos"},{"title":"Link unlinked photos to a capture","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/sessions/{session_id}/photos/link-capture","href":"/api-reference/scanner/scanner-photos/link-unlinked-photos-to-a-capture"},{"title":"List product photos","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/sessions/{session_id}/photos","href":"/api-reference/scanner/scanner-photos/list-product-photos"},{"title":"Register a product photo","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/sessions/{session_id}/photos","href":"/api-reference/scanner/scanner-photos/register-a-product-photo"},{"title":"Get a product photo","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/sessions/{session_id}/photos/{photo_id}","href":"/api-reference/scanner/scanner-photos/get-a-product-photo"},{"title":"Delete a product photo","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json delete /scanner/api/v1/sessions/{session_id}/photos/{photo_id}","href":"/api-reference/scanner/scanner-photos/delete-a-product-photo"},{"title":"Update photo classification","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json patch /scanner/api/v1/sessions/{session_id}/photos/{photo_id}","href":"/api-reference/scanner/scanner-photos/update-photo-classification"}]},{"group":"Scanner Upload","pages":[{"title":"Upload a product image","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/captures/upload-image","href":"/api-reference/scanner/scanner-upload/upload-a-product-image"}]},{"group":"Scanner Resolve","pages":[{"title":"Resolve a QR code URL","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/resolve-url","href":"/api-reference/scanner/scanner-resolve/resolve-a-qr-code-url"},{"title":"Save a QR-resolved URL as a product redirect","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json post /scanner/api/v1/captures/{short_id}/save-redirect","href":"/api-reference/scanner/scanner-resolve/save-a-qr-resolved-url-as-a-product-redirect"}]},{"group":"Scanner Freshness","pages":[{"title":"Resolve freshness chip thresholds for a scanned GTIN","deprecated":null,"version":null,"openapi":"/openapi/openapi-scanner.json get /scanner/api/v1/freshness-thresholds","href":"/api-reference/scanner/scanner-freshness/resolve-freshness-chip-thresholds-for-a-scanned-gtin"}]}]},{"group":"Compliance","pages":[{"group":"Compliance","pages":[{"title":"List product recalls","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/products/{gtin}/recalls","href":"/api-reference/compliance/compliance/list-product-recalls"},{"title":"List recalls affecting a specific batch/lot","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/products/{gtin}/batches/{batch}/recalls","href":"/api-reference/compliance/compliance/list-recalls-affecting-a-specific-batchlot"},{"title":"List your brand-issued recalls","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/recalls","href":"/api-reference/compliance/compliance/list-your-brand-issued-recalls"},{"title":"Issue a brand recall","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json post /compliance/api/v1/recalls","href":"/api-reference/compliance/compliance/issue-a-brand-recall"},{"title":"Withdraw a brand recall","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json post /compliance/api/v1/recalls/{recall_id}/withdraw","href":"/api-reference/compliance/compliance/withdraw-a-brand-recall"},{"title":"Recall coverage","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/recalls/coverage","href":"/api-reference/compliance/compliance/recall-coverage"},{"title":"Get a brand-issued recall","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/recalls/{recall_id}","href":"/api-reference/compliance/compliance/get-a-brand-issued-recall"}]},{"group":"FSMA configuration","pages":[{"title":"Get FSMA settings","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/organizations/{organization_id}/fsma-settings","href":"/api-reference/compliance/fsma-configuration/get-fsma-settings"},{"title":"Update FSMA settings","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json patch /compliance/api/v1/organizations/{organization_id}/fsma-settings","href":"/api-reference/compliance/fsma-configuration/update-fsma-settings"},{"title":"Get the retention policy","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/organizations/{organization_id}/retention-policy","href":"/api-reference/compliance/fsma-configuration/get-the-retention-policy"},{"title":"Update the retention policy","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json patch /compliance/api/v1/organizations/{organization_id}/retention-policy","href":"/api-reference/compliance/fsma-configuration/update-the-retention-policy"}]},{"group":"EPCIS capture configuration","pages":[{"title":"List EPCIS capture keys","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/organizations/{organization_id}/capture-keys","href":"/api-reference/compliance/epcis-capture-configuration/list-epcis-capture-keys"},{"title":"Create an EPCIS capture key","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json post /compliance/api/v1/organizations/{organization_id}/capture-keys","href":"/api-reference/compliance/epcis-capture-configuration/create-an-epcis-capture-key"},{"title":"Revoke an EPCIS capture key","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json post /compliance/api/v1/organizations/{organization_id}/capture-keys/{key_id}/revoke","href":"/api-reference/compliance/epcis-capture-configuration/revoke-an-epcis-capture-key"},{"title":"List serialization pools","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/organizations/{organization_id}/serial-pools","href":"/api-reference/compliance/epcis-capture-configuration/list-serialization-pools"},{"title":"Create a serialization pool","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json post /compliance/api/v1/organizations/{organization_id}/serial-pools","href":"/api-reference/compliance/epcis-capture-configuration/create-a-serialization-pool"},{"title":"Activate a serialization pool","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json post /compliance/api/v1/organizations/{organization_id}/serial-pools/{pool_id}/activate","href":"/api-reference/compliance/epcis-capture-configuration/activate-a-serialization-pool"},{"title":"Get the public-page visibility","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json get /compliance/api/v1/organizations/{organization_id}/visibility-config","href":"/api-reference/compliance/epcis-capture-configuration/get-the-public-page-visibility"},{"title":"Update the public-page visibility","deprecated":null,"version":null,"openapi":"/openapi/openapi-compliance.json patch /compliance/api/v1/organizations/{organization_id}/visibility-config","href":"/api-reference/compliance/epcis-capture-configuration/update-the-public-page-visibility"}]}]},{"group":"Certifications","pages":[{"group":"Certification Bodies","pages":[{"title":"List certification bodies","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/certification-bodies","href":"/api-reference/certifications/certification-bodies/list-certification-bodies"},{"title":"Get certification body","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/certification-bodies/{id}","href":"/api-reference/certifications/certification-bodies/get-certification-body"}]},{"group":"Certifications","pages":[{"title":"List certifications","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/certifications","href":"/api-reference/certifications/certifications/list-certifications"},{"title":"Get certification","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/certifications/{id}","href":"/api-reference/certifications/certifications/get-certification"}]},{"group":"Claims","pages":[{"title":"List claims","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/claims","href":"/api-reference/certifications/claims/list-claims"},{"title":"Get claim","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/claims/{id}","href":"/api-reference/certifications/claims/get-claim"}]},{"group":"Assignments","pages":[{"title":"List product certifications","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/products/{gtin}/certifications","href":"/api-reference/certifications/assignments/list-product-certifications"},{"title":"Assign certification to product","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json post /certifications/api/v1/products/{gtin}/certifications","href":"/api-reference/certifications/assignments/assign-certification-to-product"},{"title":"Get a product certification","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/products/{gtin}/certifications/{certification_id}","href":"/api-reference/certifications/assignments/get-a-product-certification"},{"title":"Remove certification from product","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json delete /certifications/api/v1/products/{gtin}/certifications/{certification_id}","href":"/api-reference/certifications/assignments/remove-certification-from-product"},{"title":"Update certification assignment","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json patch /certifications/api/v1/products/{gtin}/certifications/{certification_id}","href":"/api-reference/certifications/assignments/update-certification-assignment"},{"title":"List product claims","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/products/{gtin}/claims","href":"/api-reference/certifications/assignments/list-product-claims"},{"title":"Assign claim to product","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json post /certifications/api/v1/products/{gtin}/claims","href":"/api-reference/certifications/assignments/assign-claim-to-product"},{"title":"Get a product claim","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json get /certifications/api/v1/products/{gtin}/claims/{claim_id}","href":"/api-reference/certifications/assignments/get-a-product-claim"},{"title":"Remove claim from product","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json delete /certifications/api/v1/products/{gtin}/claims/{claim_id}","href":"/api-reference/certifications/assignments/remove-claim-from-product"},{"title":"Update claim assignment","deprecated":null,"version":null,"openapi":"/openapi/openapi-certifications.json patch /certifications/api/v1/products/{gtin}/claims/{claim_id}","href":"/api-reference/certifications/assignments/update-claim-assignment"}]}]},{"group":"Sustainability","pages":[{"group":"Sustainability","pages":[{"title":"Get product sustainability data","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/products/{gtin}/sustainability","href":"/api-reference/sustainability/sustainability/get-product-sustainability-data"}]},{"group":"Packaging","pages":[{"title":"List packaging elements","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/packaging","href":"/api-reference/sustainability/packaging/list-packaging-elements"},{"title":"Create packaging element","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/packaging","href":"/api-reference/sustainability/packaging/create-packaging-element"},{"title":"Get packaging element","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/packaging/{record_id}","href":"/api-reference/sustainability/packaging/get-packaging-element"},{"title":"Delete packaging element","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/packaging/{record_id}","href":"/api-reference/sustainability/packaging/delete-packaging-element"},{"title":"Update packaging element","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/packaging/{record_id}","href":"/api-reference/sustainability/packaging/update-packaging-element"}]},{"group":"Recyclability","pages":[{"title":"List recyclability assessments","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/recyclability","href":"/api-reference/sustainability/recyclability/list-recyclability-assessments"},{"title":"Create recyclability assessment","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/recyclability","href":"/api-reference/sustainability/recyclability/create-recyclability-assessment"},{"title":"Get recyclability assessment","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/recyclability/{record_id}","href":"/api-reference/sustainability/recyclability/get-recyclability-assessment"},{"title":"Delete recyclability assessment","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/recyclability/{record_id}","href":"/api-reference/sustainability/recyclability/delete-recyclability-assessment"},{"title":"Update recyclability assessment","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/recyclability/{record_id}","href":"/api-reference/sustainability/recyclability/update-recyclability-assessment"}]},{"group":"End-of-life instructions","pages":[{"title":"List end-of-life instructions","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/end-of-life-instructions","href":"/api-reference/sustainability/end-of-life-instructions/list-end-of-life-instructions"},{"title":"Create end-of-life instruction","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/end-of-life-instructions","href":"/api-reference/sustainability/end-of-life-instructions/create-end-of-life-instruction"},{"title":"Get end-of-life instruction","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/end-of-life-instructions/{record_id}","href":"/api-reference/sustainability/end-of-life-instructions/get-end-of-life-instruction"},{"title":"Delete end-of-life instruction","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/end-of-life-instructions/{record_id}","href":"/api-reference/sustainability/end-of-life-instructions/delete-end-of-life-instruction"},{"title":"Update end-of-life instruction","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/end-of-life-instructions/{record_id}","href":"/api-reference/sustainability/end-of-life-instructions/update-end-of-life-instruction"}]},{"group":"Environmental impacts","pages":[{"title":"List environmental impacts","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/environmental-impacts","href":"/api-reference/sustainability/environmental-impacts/list-environmental-impacts"},{"title":"Create environmental impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/environmental-impacts","href":"/api-reference/sustainability/environmental-impacts/create-environmental-impact"},{"title":"Get environmental impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/environmental-impacts/{record_id}","href":"/api-reference/sustainability/environmental-impacts/get-environmental-impact"},{"title":"Delete environmental impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/environmental-impacts/{record_id}","href":"/api-reference/sustainability/environmental-impacts/delete-environmental-impact"},{"title":"Update environmental impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/environmental-impacts/{record_id}","href":"/api-reference/sustainability/environmental-impacts/update-environmental-impact"}]},{"group":"Production processes","pages":[{"title":"List production processes","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/production-processes","href":"/api-reference/sustainability/production-processes/list-production-processes"},{"title":"Create production process","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/production-processes","href":"/api-reference/sustainability/production-processes/create-production-process"},{"title":"Get production process","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/production-processes/{record_id}","href":"/api-reference/sustainability/production-processes/get-production-process"},{"title":"Delete production process","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/production-processes/{record_id}","href":"/api-reference/sustainability/production-processes/delete-production-process"},{"title":"Update production process","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/production-processes/{record_id}","href":"/api-reference/sustainability/production-processes/update-production-process"},{"title":"List process types","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/process-types","href":"/api-reference/sustainability/production-processes/list-process-types"}]},{"group":"Transport impacts","pages":[{"title":"List transport impacts","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/transport-impacts","href":"/api-reference/sustainability/transport-impacts/list-transport-impacts"},{"title":"Create transport impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/transport-impacts","href":"/api-reference/sustainability/transport-impacts/create-transport-impact"},{"title":"Get transport impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/transport-impacts/{record_id}","href":"/api-reference/sustainability/transport-impacts/get-transport-impact"},{"title":"Delete transport impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/transport-impacts/{record_id}","href":"/api-reference/sustainability/transport-impacts/delete-transport-impact"},{"title":"Update transport impact","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/transport-impacts/{record_id}","href":"/api-reference/sustainability/transport-impacts/update-transport-impact"}]},{"group":"Substances of concern","pages":[{"title":"List substances of concern","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/substances-of-concern","href":"/api-reference/sustainability/substances-of-concern/list-substances-of-concern"},{"title":"Create substance of concern","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json post /sustainability/api/v1/substances-of-concern","href":"/api-reference/sustainability/substances-of-concern/create-substance-of-concern"},{"title":"Get substance of concern","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json get /sustainability/api/v1/substances-of-concern/{record_id}","href":"/api-reference/sustainability/substances-of-concern/get-substance-of-concern"},{"title":"Delete substance of concern","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json delete /sustainability/api/v1/substances-of-concern/{record_id}","href":"/api-reference/sustainability/substances-of-concern/delete-substance-of-concern"},{"title":"Update substance of concern","deprecated":null,"version":null,"openapi":"/openapi/openapi-sustainability.json patch /sustainability/api/v1/substances-of-concern/{record_id}","href":"/api-reference/sustainability/substances-of-concern/update-substance-of-concern"}]}]},{"group":"Notifications","pages":[{"group":"Notifications","pages":[{"title":"List notification channels","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json get /notifications/api/v1/notifications/channels","href":"/api-reference/notifications/notifications/list-notification-channels"},{"title":"Create a notification channel","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json post /notifications/api/v1/notifications/channels","href":"/api-reference/notifications/notifications/create-a-notification-channel"},{"title":"Get a notification channel","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json get /notifications/api/v1/notifications/channels/{channel_id}","href":"/api-reference/notifications/notifications/get-a-notification-channel"},{"title":"Delete a notification channel","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json delete /notifications/api/v1/notifications/channels/{channel_id}","href":"/api-reference/notifications/notifications/delete-a-notification-channel"},{"title":"Update a notification channel","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json patch /notifications/api/v1/notifications/channels/{channel_id}","href":"/api-reference/notifications/notifications/update-a-notification-channel"},{"title":"List in-app notifications","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json get /notifications/api/v1/notifications/in-app","href":"/api-reference/notifications/notifications/list-in-app-notifications"},{"title":"Mark a notification as read","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json post /notifications/api/v1/notifications/in-app/{notification_id}/read","href":"/api-reference/notifications/notifications/mark-a-notification-as-read"},{"title":"Mark all notifications as read","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json post /notifications/api/v1/notifications/in-app/read-all","href":"/api-reference/notifications/notifications/mark-all-notifications-as-read"},{"title":"Notification system health","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json get /notifications/api/v1/notifications/health","href":"/api-reference/notifications/notifications/notification-system-health"}]},{"group":"SMS Webhooks","pages":[{"title":"Carrier inbound-SMS callback","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json post /notifications/api/v1/sms/webhooks/inbound/","href":"/api-reference/notifications/sms-webhooks/carrier-inbound-sms-callback"},{"title":"Carrier delivery-receipt (DLR) callback","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json post /notifications/api/v1/sms/webhooks/status/","href":"/api-reference/notifications/sms-webhooks/carrier-delivery-receipt-dlr-callback"},{"title":"Unified Telnyx webhook (inbound + delivery-receipt)","deprecated":null,"version":null,"openapi":"/openapi/openapi-notifications.json post /notifications/api/v1/sms/webhooks/telnyx/","href":"/api-reference/notifications/sms-webhooks/unified-telnyx-webhook-inbound-+-delivery-receipt"}]}]},{"group":"Dashboard","pages":[{"group":"Stats","pages":[{"title":"Get dashboard statistics","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/stats/{organization_id}","href":"/api-reference/dashboard/stats/get-dashboard-statistics"}]},{"group":"Completeness","pages":[{"title":"Get product completeness score","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/completeness","href":"/api-reference/dashboard/completeness/get-product-completeness-score"}]},{"group":"Images","pages":[{"title":"List product images","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/images","href":"/api-reference/dashboard/images/list-product-images"},{"title":"Upload product image","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/products/{organization_id}/{gtin}/images","href":"/api-reference/dashboard/images/upload-product-image"},{"title":"Get product image","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/images/{image_id}","href":"/api-reference/dashboard/images/get-product-image"},{"title":"Delete product image","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/images/{image_id}","href":"/api-reference/dashboard/images/delete-product-image"},{"title":"Update product image","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json patch /dashboard/api/v1/products/{organization_id}/{gtin}/images/{image_id}","href":"/api-reference/dashboard/images/update-product-image"}]},{"group":"Nutrition","pages":[{"title":"Get product nutrition facts","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/nutrition","href":"/api-reference/dashboard/nutrition/get-product-nutrition-facts"},{"title":"Create or replace product nutrition header","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json put /dashboard/api/v1/products/{organization_id}/{gtin}/nutrition","href":"/api-reference/dashboard/nutrition/create-or-replace-product-nutrition-header"},{"title":"Delete product nutrition facts","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/nutrition","href":"/api-reference/dashboard/nutrition/delete-product-nutrition-facts"},{"title":"Add a product nutrient row","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/products/{organization_id}/{gtin}/nutrition/nutrients","href":"/api-reference/dashboard/nutrition/add-a-product-nutrient-row"},{"title":"Delete a product nutrient row","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/nutrition/nutrients/{nutrient_id}","href":"/api-reference/dashboard/nutrition/delete-a-product-nutrient-row"},{"title":"Update a product nutrient row","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json patch /dashboard/api/v1/products/{organization_id}/{gtin}/nutrition/nutrients/{nutrient_id}","href":"/api-reference/dashboard/nutrition/update-a-product-nutrient-row"}]},{"group":"Documents","pages":[{"title":"List product documents","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/documents","href":"/api-reference/dashboard/documents/list-product-documents"},{"title":"Upload product document","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/products/{organization_id}/{gtin}/documents","href":"/api-reference/dashboard/documents/upload-product-document"},{"title":"Suggest document labels","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/document-labels","href":"/api-reference/dashboard/documents/suggest-document-labels"},{"title":"Get product document","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/documents/{document_id}","href":"/api-reference/dashboard/documents/get-product-document"},{"title":"Delete product document","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/documents/{document_id}","href":"/api-reference/dashboard/documents/delete-product-document"},{"title":"Update product document metadata","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json patch /dashboard/api/v1/products/{organization_id}/{gtin}/documents/{document_id}","href":"/api-reference/dashboard/documents/update-product-document-metadata"}]},{"group":"Videos","pages":[{"title":"List product videos","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/videos","href":"/api-reference/dashboard/videos/list-product-videos"},{"title":"Add product video","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/products/{organization_id}/{gtin}/videos","href":"/api-reference/dashboard/videos/add-product-video"},{"title":"Get product video","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/videos/{video_id}","href":"/api-reference/dashboard/videos/get-product-video"},{"title":"Delete product video","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/videos/{video_id}","href":"/api-reference/dashboard/videos/delete-product-video"},{"title":"Update product video","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json patch /dashboard/api/v1/products/{organization_id}/{gtin}/videos/{video_id}","href":"/api-reference/dashboard/videos/update-product-video"}]},{"group":"Warranty Link","pages":[{"title":"Get product warranty link","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/warranty-link","href":"/api-reference/dashboard/warranty-link/get-product-warranty-link"},{"title":"Create or replace product warranty link","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json put /dashboard/api/v1/products/{organization_id}/{gtin}/warranty-link","href":"/api-reference/dashboard/warranty-link/create-or-replace-product-warranty-link"},{"title":"Delete product warranty link","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/warranty-link","href":"/api-reference/dashboard/warranty-link/delete-product-warranty-link"}]},{"group":"Register Product","pages":[{"title":"Get product registration link","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/products/{organization_id}/{gtin}/register-product","href":"/api-reference/dashboard/register-product/get-product-registration-link"},{"title":"Create or replace product registration link","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json put /dashboard/api/v1/products/{organization_id}/{gtin}/register-product","href":"/api-reference/dashboard/register-product/create-or-replace-product-registration-link"},{"title":"Delete product registration link","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/products/{organization_id}/{gtin}/register-product","href":"/api-reference/dashboard/register-product/delete-product-registration-link"}]},{"group":"Brand Analytics","pages":[{"title":"Brand search demand — where are people searching for my products?","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/brand-analytics/search-demand","href":"/api-reference/dashboard/brand-analytics/brand-search-demand-—-where-are-people-searching-for-my-products?"},{"title":"Brand retail footprint — where are my products being sold?","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/brand-analytics/retail-footprint","href":"/api-reference/dashboard/brand-analytics/brand-retail-footprint-—-where-are-my-products-being-sold?"},{"title":"Brand scan summary — which of my products are being scanned the most?","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/brand-analytics/scans","href":"/api-reference/dashboard/brand-analytics/brand-scan-summary-—-which-of-my-products-are-being-scanned-the-most?"}]},{"group":"Data Export","pages":[{"title":"Request an organization data export","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/data-export/{organization_id}","href":"/api-reference/dashboard/data-export/request-an-organization-data-export"},{"title":"Poll an organization data export","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/data-export/{organization_id}/{job_id}","href":"/api-reference/dashboard/data-export/poll-an-organization-data-export"}]},{"group":"GS1 Company Prefixes","pages":[{"title":"List the organization's GS1 Company Prefixes","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/company-prefixes/{organization_id}","href":"/api-reference/dashboard/gs1-company-prefixes/list-the-organizations-gs1-company-prefixes"},{"title":"Add a GS1 Company Prefix","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/company-prefixes/{organization_id}","href":"/api-reference/dashboard/gs1-company-prefixes/add-a-gs1-company-prefix"},{"title":"Get a GS1 Company Prefix","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json get /dashboard/api/v1/company-prefixes/{organization_id}/{company_prefix_id}","href":"/api-reference/dashboard/gs1-company-prefixes/get-a-gs1-company-prefix"},{"title":"Remove a GS1 Company Prefix","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json delete /dashboard/api/v1/company-prefixes/{organization_id}/{company_prefix_id}","href":"/api-reference/dashboard/gs1-company-prefixes/remove-a-gs1-company-prefix"},{"title":"Recheck a prefix's GS1 Verified / licence status","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/company-prefixes/{organization_id}/{company_prefix_id}/verify","href":"/api-reference/dashboard/gs1-company-prefixes/recheck-a-prefixs-gs1-verified-licence-status"},{"title":"Mint a GIAI from one of the organization's prefixes","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/company-prefixes/{organization_id}/{company_prefix_id}/giai","href":"/api-reference/dashboard/gs1-company-prefixes/mint-a-giai-from-one-of-the-organizations-prefixes"}]},{"group":"Agent Handoff Capsules","pages":[{"title":"Record a 'Copy for your AI agent' button click","deprecated":null,"version":null,"openapi":"/openapi/openapi-dashboard.json post /dashboard/api/v1/capsules/{capsule_id}/copied","href":"/api-reference/dashboard/agent-handoff-capsules/record-a-copy-for-your-ai-agent-button-click"}]}]},{"group":"Analytics","pages":[{"group":"Traffic","pages":[{"title":"Hierarchical traffic time series for a scope","deprecated":null,"version":null,"openapi":"/openapi/openapi-analytics.json get /analytics/api/v1/traffic","href":"/api-reference/analytics/traffic/hierarchical-traffic-time-series-for-a-scope"}]},{"group":"Exports","pages":[{"title":"Period summary for BI integration","deprecated":null,"version":null,"openapi":"/openapi/openapi-analytics.json get /analytics/api/v1/exports/overview","href":"/api-reference/analytics/exports/period-summary-for-bi-integration"},{"title":"Paginated raw scan events for BI integration","deprecated":null,"version":null,"openapi":"/openapi/openapi-analytics.json get /analytics/api/v1/exports/scan-events","href":"/api-reference/analytics/exports/paginated-raw-scan-events-for-bi-integration"}]}]},{"group":"Agent","pages":[{"group":"Resolve","pages":[{"title":"Resolve product query to nearby store availability","deprecated":null,"version":null,"openapi":"/openapi/openapi-agent.json post /agent/api/v1/resolve","href":"/api-reference/agent/resolve/resolve-product-query-to-nearby-store-availability"}]},{"group":"Products","pages":[{"title":"Get full product detail by GTIN","deprecated":null,"version":null,"openapi":"/openapi/openapi-agent.json get /agent/api/v1/products/{gtin}","href":"/api-reference/agent/products/get-full-product-detail-by-gtin"}]},{"group":"Availability","pages":[{"title":"Check store availability for a product","deprecated":null,"version":null,"openapi":"/openapi/openapi-agent.json get /agent/api/v1/products/{gtin}/availability","href":"/api-reference/agent/availability/check-store-availability-for-a-product"}]}]},{"group":"Substances","pages":[{"group":"Substances","pages":[{"title":"Search substances","deprecated":null,"version":null,"openapi":"/openapi/openapi-substances.json get /substances/api/v1/substances","href":"/api-reference/substances/substances/search-substances"},{"title":"Get substance by ID","deprecated":null,"version":null,"openapi":"/openapi/openapi-substances.json get /substances/api/v1/substances/{substance_id}","href":"/api-reference/substances/substances/get-substance-by-id"}]}]},{"group":"BYOS","pages":[{"group":"byos-trmnl","pages":[{"title":"TRMNL device setup","deprecated":null,"version":null,"openapi":"/openapi/openapi-byos.json get /byos/api/setup/","href":"/api-reference/byos/byos-trmnl/trmnl-device-setup"},{"title":"TRMNL display poll","deprecated":null,"version":null,"openapi":"/openapi/openapi-byos.json get /byos/api/display","href":"/api-reference/byos/byos-trmnl/trmnl-display-poll"},{"title":"TRMNL device log","deprecated":null,"version":null,"openapi":"/openapi/openapi-byos.json post /byos/api/log/","href":"/api-reference/byos/byos-trmnl/trmnl-device-log"}]}]},{"group":"Content","pages":[{"group":"Content","pages":[{"title":"Check product data readiness","deprecated":null,"version":null,"openapi":"/openapi/openapi-content.json post /content/api/v1/learn/readiness-check","href":"/api-reference/content/content/check-product-data-readiness"}]}]},{"group":"Signals","pages":[{"group":"Signals","pages":[{"title":"Submit a signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/signals/","href":"/api-reference/signals/signals/submit-a-signal"},{"title":"Capture a voice note (transcription only)","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/voice-sessions/","href":"/api-reference/signals/signals/capture-a-voice-note-transcription-only"},{"title":"List my signals","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/signals/mine/","href":"/api-reference/signals/signals/list-my-signals"},{"title":"List my verified contact addresses","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/signals/contact-emails/","href":"/api-reference/signals/signals/list-my-verified-contact-addresses"},{"title":"Get my signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/signals/{signal_id}/","href":"/api-reference/signals/signals/get-my-signal"},{"title":"Erase my signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json delete /signals/api/v1/signals/{signal_id}/","href":"/api-reference/signals/signals/erase-my-signal"},{"title":"Edit my signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json patch /signals/api/v1/signals/{signal_id}/","href":"/api-reference/signals/signals/edit-my-signal"},{"title":"Revoke my signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/signals/{signal_id}/revoke/","href":"/api-reference/signals/signals/revoke-my-signal"}]},{"group":"Brand Signals","pages":[{"title":"List brand signals","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/brand/signals/","href":"/api-reference/signals/brand-signals/list-brand-signals"},{"title":"Get brand signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/brand/signals/{signal_id}/","href":"/api-reference/signals/brand-signals/get-brand-signal"},{"title":"Report a signal as abusive","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/brand/signals/{signal_id}/report/","href":"/api-reference/signals/brand-signals/report-a-signal-as-abusive"}]},{"group":"Signal Review","pages":[{"title":"List flagged signals (review queue)","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/internal/signals/flagged/","href":"/api-reference/signals/signal-review/list-flagged-signals-review-queue"},{"title":"List reported signals (review queue)","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/internal/signals/reported/","href":"/api-reference/signals/signal-review/list-reported-signals-review-queue"},{"title":"Suppress a signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/internal/signals/{signal_id}/suppress/","href":"/api-reference/signals/signal-review/suppress-a-signal"},{"title":"Restore a suppressed signal","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/internal/signals/{signal_id}/unsuppress/","href":"/api-reference/signals/signal-review/restore-a-suppressed-signal"},{"title":"Ban a submitter identity","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/internal/bans/","href":"/api-reference/signals/signal-review/ban-a-submitter-identity"},{"title":"Lift a submitter ban","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json delete /signals/api/v1/internal/bans/{user_id}/","href":"/api-reference/signals/signal-review/lift-a-submitter-ban"}]},{"group":"Adverse Reports","pages":[{"title":"File an adverse report","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json post /signals/api/v1/adverse-reports/","href":"/api-reference/signals/adverse-reports/file-an-adverse-report"},{"title":"List my adverse reports","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/adverse-reports/mine/","href":"/api-reference/signals/adverse-reports/list-my-adverse-reports"},{"title":"Get my adverse report","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/adverse-reports/{reference_id}/","href":"/api-reference/signals/adverse-reports/get-my-adverse-report"},{"title":"List lot-level adverse alerts","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/brand/adverse-report-alerts/","href":"/api-reference/signals/adverse-reports/list-lot-level-adverse-alerts"},{"title":"List brand adverse reports","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/brand/adverse-reports/","href":"/api-reference/signals/adverse-reports/list-brand-adverse-reports"},{"title":"Get brand adverse report","deprecated":null,"version":null,"openapi":"/openapi/openapi-signals.json get /signals/api/v1/brand/adverse-reports/{report_id}/","href":"/api-reference/signals/adverse-reports/get-brand-adverse-report"}]}]}]}]},"basePath":"","title":"Upsert physical stores in bulk - Closient","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}