@minipim/sdk 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -1
- package/dist/index.d.cts +11 -6
- package/dist/index.d.ts +11 -6
- package/dist/openapi.d.cts +118 -14
- package/dist/openapi.d.ts +118 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -126,7 +126,11 @@ for await (const p of paginate<Product>(pim, '/v1/products', { query: { status:
|
|
|
126
126
|
const all = await collectAll<Product>(pim, '/v1/products');
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
`paginate` manages `limit`/`offset`, honors the server's `hasMore`, and defaults to the 200-row max page size (override with `pageSize`).
|
|
129
|
+
`paginate` manages `limit`/`offset`, honors the server's `hasMore`, and defaults to the 200-row max page size (override with `pageSize`).
|
|
130
|
+
|
|
131
|
+
`withTotal: true` is supported by **`/v1/products` only** — it adds one `COUNT(*)`, so leave it off on hot reads. Other list endpoints never return `total`, and as of v0.7.0 their types say so rather than declaring a field that was always `undefined`.
|
|
132
|
+
|
|
133
|
+
Against API **0.14.0 and newer, `hasMore` is present and exact on every list endpoint** — the server reads one row past the page, so a final page that happens to be exactly full reports `false` instead of sending you after an empty one. Older deployments omitted `hasMore` everywhere except `/v1/products`; `paginate` keeps a short-page fallback for those, which is the whole reason not to hand-roll the loop.
|
|
130
134
|
|
|
131
135
|
Endpoints that return a **plain array** instead of the envelope (`/v1/categories` without `?limit=`, `/v1/attributes`, `/v1/products/{id}/variants`) are handled too (v0.3.0+): the array is treated as the one-and-only page, so `collectAll` works uniformly across every list endpoint.
|
|
132
136
|
|
|
@@ -167,6 +171,44 @@ await pim.GET('/v1/products', {
|
|
|
167
171
|
|
|
168
172
|
Needs API **0.9.0+**. Check `GET /healthz`.
|
|
169
173
|
|
|
174
|
+
## Tags
|
|
175
|
+
|
|
176
|
+
Tags are **canonicalized on write**, so what you read back is not verbatim what you sent:
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
await pim.POST('/v1/content', { body: { /* … */ tags: ['Buying Guide', 'buying guide', 'FAQ!'] } });
|
|
180
|
+
// stored, and returned as: ['buying-guide', 'faq']
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Each tag is lower-cased, stripped of diacritics, has runs of non-alphanumerics collapsed to `-`, is trimmed of leading/trailing `-`, and is truncated to **60 characters**. Empties are dropped and duplicates removed (first occurrence wins), so **the array you get back can be shorter than the one you sent**. Note that the schema's `maxLength` is 80: two tags differing only past character 60 collapse into one.
|
|
184
|
+
|
|
185
|
+
This is deliberate — it is what makes `Featured`, `featured` and `FEATURED` one tag rather than three. Filters are canonicalized identically, so you never have to pre-slugify one:
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
await pim.GET('/v1/content', { params: { query: { tag: 'Buying Guide' } } }); // matches buying-guide
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`tag` is repeatable and ANDs: `{ tag: ['guide', 'seo'] }` returns only pages carrying both. `GET /v1/products/tags` and `GET /v1/content/tags` list the vocabulary actually in use, with counts — two **separate** vocabularies, since an editorial tag and a merchandising tag rarely mean the same thing.
|
|
192
|
+
|
|
193
|
+
Documented in the field descriptions from API **0.14.1+**, and in these types from v0.7.0.
|
|
194
|
+
|
|
195
|
+
## Uploading files
|
|
196
|
+
|
|
197
|
+
`POST /v1/media` is `multipart/form-data`, not JSON. The file field is named `file`; everything else is optional and lets you attach the upload in the same request:
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
const form = new FormData();
|
|
201
|
+
form.append('file', blob, 'sell-sheet.pdf');
|
|
202
|
+
form.append('entityType', 'product'); // 'product' | 'variant' | 'content_page'
|
|
203
|
+
form.append('entityId', productId);
|
|
204
|
+
form.append('role', 'technical'); // hero | gallery | thumbnail | technical | lifestyle | swatch
|
|
205
|
+
form.append('altText', JSON.stringify({ en_US: 'Sell sheet' })); // a JSON *string*, not an object
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`altText` is parsed as JSON and parse failures are swallowed, so passing a real object silently stores no alt text. Send `JSON.stringify(...)`.
|
|
209
|
+
|
|
210
|
+
Requires API **0.14.0+** to appear in the spec at all — before that this endpoint published no request body, so generated clients had nothing for it.
|
|
211
|
+
|
|
170
212
|
## Attribute helpers
|
|
171
213
|
|
|
172
214
|
Attribute values are `unknown` and keyed by `(locale, channel)`. List responses return the raw `{ code: [{ locale, channel, value }] }` shape (only product *detail* with `?locale=&channel=` returns a flat `resolvedAttributes`). The SDK ships the flatten + coercion helpers so you don't reimplement them:
|
package/dist/index.d.cts
CHANGED
|
@@ -78,12 +78,17 @@ declare function createMinipimClient(opts: CreateMinipimClientOptions): MinipimC
|
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Generic pagination helper. MiniPim list endpoints return
|
|
81
|
-
* `{ data, limit, offset }`,
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
81
|
+
* `{ data, limit, offset, hasMore }`, where `hasMore` is always present and
|
|
82
|
+
* exact — the server fetches one row past the page to decide it, so a final
|
|
83
|
+
* page that is exactly full reports `false` instead of sending you after an
|
|
84
|
+
* empty one. Yields one item at a time.
|
|
85
|
+
*
|
|
86
|
+
* `hasMore` stays OPTIONAL in the type below, and the short-page fallback
|
|
87
|
+
* stays, deliberately: this client talks to whatever version the deployment is
|
|
88
|
+
* running, and API ≤ 0.13.0 omitted the field everywhere except
|
|
89
|
+
* `/v1/products`. Keeping the fallback means an older instance paginates
|
|
90
|
+
* correctly rather than reading one page and stopping — which is exactly the
|
|
91
|
+
* bug a hand-rolled `while (hasMore)` loop hit against those versions.
|
|
87
92
|
*
|
|
88
93
|
* Typed loosely on purpose — openapi-fetch's per-path generics don't
|
|
89
94
|
* compose into a single reusable signature without a lot of conditional-
|
package/dist/index.d.ts
CHANGED
|
@@ -78,12 +78,17 @@ declare function createMinipimClient(opts: CreateMinipimClientOptions): MinipimC
|
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Generic pagination helper. MiniPim list endpoints return
|
|
81
|
-
* `{ data, limit, offset }`,
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
81
|
+
* `{ data, limit, offset, hasMore }`, where `hasMore` is always present and
|
|
82
|
+
* exact — the server fetches one row past the page to decide it, so a final
|
|
83
|
+
* page that is exactly full reports `false` instead of sending you after an
|
|
84
|
+
* empty one. Yields one item at a time.
|
|
85
|
+
*
|
|
86
|
+
* `hasMore` stays OPTIONAL in the type below, and the short-page fallback
|
|
87
|
+
* stays, deliberately: this client talks to whatever version the deployment is
|
|
88
|
+
* running, and API ≤ 0.13.0 omitted the field everywhere except
|
|
89
|
+
* `/v1/products`. Keeping the fallback means an older instance paginates
|
|
90
|
+
* correctly rather than reading one page and stopping — which is exactly the
|
|
91
|
+
* bug a hand-rolled `while (hasMore)` loop hit against those versions.
|
|
87
92
|
*
|
|
88
93
|
* Typed loosely on purpose — openapi-fetch's per-path generics don't
|
|
89
94
|
* compose into a single reusable signature without a lot of conditional-
|
package/dist/openapi.d.cts
CHANGED
|
@@ -914,11 +914,6 @@ interface paths {
|
|
|
914
914
|
content: {
|
|
915
915
|
"application/json": {
|
|
916
916
|
code?: string;
|
|
917
|
-
/**
|
|
918
|
-
* @default product
|
|
919
|
-
* @enum {string}
|
|
920
|
-
*/
|
|
921
|
-
entityKind?: "product" | "content";
|
|
922
917
|
label?: {
|
|
923
918
|
[key: string]: string;
|
|
924
919
|
};
|
|
@@ -1575,6 +1570,7 @@ interface paths {
|
|
|
1575
1570
|
categoryId?: string;
|
|
1576
1571
|
includeDescendants?: boolean | ("true" | "false" | "1" | "0");
|
|
1577
1572
|
brand?: string;
|
|
1573
|
+
/** @description Repeatable — `?tag=a&tag=b` matches records carrying ALL listed tags. Values are canonicalized exactly as writes are, so `?tag=Buying%20Guide` matches the stored `buying-guide`; you never have to pre-slugify a filter. Backed by the GIN index on `tags`. */
|
|
1578
1574
|
tag?: string | string[];
|
|
1579
1575
|
connectorId?: string;
|
|
1580
1576
|
updatedSince?: string;
|
|
@@ -1621,6 +1617,7 @@ interface paths {
|
|
|
1621
1617
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
1622
1618
|
[key: string]: unknown;
|
|
1623
1619
|
};
|
|
1620
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
1624
1621
|
tags: string[];
|
|
1625
1622
|
/** Format: uuid */
|
|
1626
1623
|
createdBy: string | null;
|
|
@@ -1631,7 +1628,7 @@ interface paths {
|
|
|
1631
1628
|
}[];
|
|
1632
1629
|
limit: number;
|
|
1633
1630
|
offset: number;
|
|
1634
|
-
hasMore
|
|
1631
|
+
hasMore: boolean;
|
|
1635
1632
|
total?: number;
|
|
1636
1633
|
};
|
|
1637
1634
|
};
|
|
@@ -1670,7 +1667,10 @@ interface paths {
|
|
|
1670
1667
|
value?: unknown;
|
|
1671
1668
|
}[];
|
|
1672
1669
|
};
|
|
1673
|
-
/**
|
|
1670
|
+
/**
|
|
1671
|
+
* @description Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one.
|
|
1672
|
+
* @default []
|
|
1673
|
+
*/
|
|
1674
1674
|
tags?: string[];
|
|
1675
1675
|
};
|
|
1676
1676
|
};
|
|
@@ -1700,6 +1700,7 @@ interface paths {
|
|
|
1700
1700
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
1701
1701
|
[key: string]: unknown;
|
|
1702
1702
|
};
|
|
1703
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
1703
1704
|
tags: string[];
|
|
1704
1705
|
/** Format: uuid */
|
|
1705
1706
|
createdBy: string | null;
|
|
@@ -1766,6 +1767,7 @@ interface paths {
|
|
|
1766
1767
|
categoryId?: string;
|
|
1767
1768
|
includeDescendants?: boolean | ("true" | "false" | "1" | "0");
|
|
1768
1769
|
brand?: string;
|
|
1770
|
+
/** @description Repeatable — `?tag=a&tag=b` matches records carrying ALL listed tags. Values are canonicalized exactly as writes are, so `?tag=Buying%20Guide` matches the stored `buying-guide`; you never have to pre-slugify a filter. Backed by the GIN index on `tags`. */
|
|
1769
1771
|
tag?: string | string[];
|
|
1770
1772
|
connectorId?: string;
|
|
1771
1773
|
updatedSince?: string;
|
|
@@ -1985,6 +1987,7 @@ interface paths {
|
|
|
1985
1987
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
1986
1988
|
[key: string]: unknown;
|
|
1987
1989
|
};
|
|
1990
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
1988
1991
|
tags: string[];
|
|
1989
1992
|
/** Format: uuid */
|
|
1990
1993
|
createdBy: string | null;
|
|
@@ -2108,6 +2111,7 @@ interface paths {
|
|
|
2108
2111
|
value?: unknown;
|
|
2109
2112
|
}[];
|
|
2110
2113
|
};
|
|
2114
|
+
/** @description Replaces the full tag list when present. Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one. */
|
|
2111
2115
|
tags?: string[];
|
|
2112
2116
|
};
|
|
2113
2117
|
};
|
|
@@ -2137,6 +2141,7 @@ interface paths {
|
|
|
2137
2141
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
2138
2142
|
[key: string]: unknown;
|
|
2139
2143
|
};
|
|
2144
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
2140
2145
|
tags: string[];
|
|
2141
2146
|
/** Format: uuid */
|
|
2142
2147
|
createdBy: string | null;
|
|
@@ -2304,6 +2309,7 @@ interface paths {
|
|
|
2304
2309
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
2305
2310
|
[key: string]: unknown;
|
|
2306
2311
|
};
|
|
2312
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
2307
2313
|
tags: string[];
|
|
2308
2314
|
/** Format: uuid */
|
|
2309
2315
|
createdBy: string | null;
|
|
@@ -2710,6 +2716,7 @@ interface paths {
|
|
|
2710
2716
|
productIds: string[];
|
|
2711
2717
|
/** @enum {string} */
|
|
2712
2718
|
mode: "add" | "remove" | "replace";
|
|
2719
|
+
/** @description Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one. */
|
|
2713
2720
|
tags: string[];
|
|
2714
2721
|
};
|
|
2715
2722
|
};
|
|
@@ -3523,6 +3530,7 @@ interface paths {
|
|
|
3523
3530
|
familyId?: string;
|
|
3524
3531
|
categoryId?: string;
|
|
3525
3532
|
channelId?: string;
|
|
3533
|
+
/** @description Repeatable — `?tag=a&tag=b` matches records carrying ALL listed tags. Values are canonicalized exactly as writes are, so `?tag=Buying%20Guide` matches the stored `buying-guide`; you never have to pre-slugify a filter. */
|
|
3526
3534
|
tag?: string | string[];
|
|
3527
3535
|
updatedSince?: string;
|
|
3528
3536
|
limit?: number;
|
|
@@ -3563,6 +3571,7 @@ interface paths {
|
|
|
3563
3571
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3564
3572
|
[key: string]: unknown;
|
|
3565
3573
|
};
|
|
3574
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3566
3575
|
tags: string[];
|
|
3567
3576
|
/** Format: uuid */
|
|
3568
3577
|
createdBy: string | null;
|
|
@@ -3571,8 +3580,7 @@ interface paths {
|
|
|
3571
3580
|
}[];
|
|
3572
3581
|
limit: number;
|
|
3573
3582
|
offset: number;
|
|
3574
|
-
hasMore
|
|
3575
|
-
total?: number;
|
|
3583
|
+
hasMore: boolean;
|
|
3576
3584
|
};
|
|
3577
3585
|
};
|
|
3578
3586
|
};
|
|
@@ -3629,7 +3637,10 @@ interface paths {
|
|
|
3629
3637
|
value?: unknown;
|
|
3630
3638
|
}[];
|
|
3631
3639
|
};
|
|
3632
|
-
/**
|
|
3640
|
+
/**
|
|
3641
|
+
* @description Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one.
|
|
3642
|
+
* @default []
|
|
3643
|
+
*/
|
|
3633
3644
|
tags?: string[];
|
|
3634
3645
|
};
|
|
3635
3646
|
};
|
|
@@ -3663,6 +3674,7 @@ interface paths {
|
|
|
3663
3674
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3664
3675
|
[key: string]: unknown;
|
|
3665
3676
|
};
|
|
3677
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3666
3678
|
tags: string[];
|
|
3667
3679
|
/** Format: uuid */
|
|
3668
3680
|
createdBy: string | null;
|
|
@@ -3739,6 +3751,63 @@ interface paths {
|
|
|
3739
3751
|
patch?: never;
|
|
3740
3752
|
trace?: never;
|
|
3741
3753
|
};
|
|
3754
|
+
"/v1/content/tags": {
|
|
3755
|
+
parameters: {
|
|
3756
|
+
query?: never;
|
|
3757
|
+
header?: never;
|
|
3758
|
+
path?: never;
|
|
3759
|
+
cookie?: never;
|
|
3760
|
+
};
|
|
3761
|
+
/**
|
|
3762
|
+
* List all content-page tags in use, with counts
|
|
3763
|
+
* @description Every distinct tag currently on at least one content page, ordered by usage. Powers tag autocomplete in the editor, which is what keeps a vocabulary from drifting into `guide` / `guides` / `Guides`. Filter pages by tag with `GET /v1/content?tag=<tag>` (repeatable; multiple tags AND together).
|
|
3764
|
+
*/
|
|
3765
|
+
get: {
|
|
3766
|
+
parameters: {
|
|
3767
|
+
query?: never;
|
|
3768
|
+
header?: never;
|
|
3769
|
+
path?: never;
|
|
3770
|
+
cookie?: never;
|
|
3771
|
+
};
|
|
3772
|
+
requestBody?: never;
|
|
3773
|
+
responses: {
|
|
3774
|
+
/** @description Default Response */
|
|
3775
|
+
200: {
|
|
3776
|
+
headers: {
|
|
3777
|
+
[name: string]: unknown;
|
|
3778
|
+
};
|
|
3779
|
+
content: {
|
|
3780
|
+
"application/json": {
|
|
3781
|
+
value: string;
|
|
3782
|
+
count: number;
|
|
3783
|
+
}[];
|
|
3784
|
+
};
|
|
3785
|
+
};
|
|
3786
|
+
/** @description Default Response */
|
|
3787
|
+
403: {
|
|
3788
|
+
headers: {
|
|
3789
|
+
[name: string]: unknown;
|
|
3790
|
+
};
|
|
3791
|
+
content: {
|
|
3792
|
+
"application/json": {
|
|
3793
|
+
error: {
|
|
3794
|
+
code: string;
|
|
3795
|
+
message: string;
|
|
3796
|
+
details?: unknown;
|
|
3797
|
+
};
|
|
3798
|
+
};
|
|
3799
|
+
};
|
|
3800
|
+
};
|
|
3801
|
+
};
|
|
3802
|
+
};
|
|
3803
|
+
put?: never;
|
|
3804
|
+
post?: never;
|
|
3805
|
+
delete?: never;
|
|
3806
|
+
options?: never;
|
|
3807
|
+
head?: never;
|
|
3808
|
+
patch?: never;
|
|
3809
|
+
trace?: never;
|
|
3810
|
+
};
|
|
3742
3811
|
"/v1/content/{id}": {
|
|
3743
3812
|
parameters: {
|
|
3744
3813
|
query?: never;
|
|
@@ -3786,6 +3855,7 @@ interface paths {
|
|
|
3786
3855
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3787
3856
|
[key: string]: unknown;
|
|
3788
3857
|
};
|
|
3858
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3789
3859
|
tags: string[];
|
|
3790
3860
|
/** Format: uuid */
|
|
3791
3861
|
createdBy: string | null;
|
|
@@ -3918,6 +3988,7 @@ interface paths {
|
|
|
3918
3988
|
value?: unknown;
|
|
3919
3989
|
}[];
|
|
3920
3990
|
};
|
|
3991
|
+
/** @description Replaces the full tag list when present. Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one. */
|
|
3921
3992
|
tags?: string[];
|
|
3922
3993
|
};
|
|
3923
3994
|
};
|
|
@@ -3951,6 +4022,7 @@ interface paths {
|
|
|
3951
4022
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3952
4023
|
[key: string]: unknown;
|
|
3953
4024
|
};
|
|
4025
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3954
4026
|
tags: string[];
|
|
3955
4027
|
/** Format: uuid */
|
|
3956
4028
|
createdBy: string | null;
|
|
@@ -5913,7 +5985,40 @@ interface paths {
|
|
|
5913
5985
|
path?: never;
|
|
5914
5986
|
cookie?: never;
|
|
5915
5987
|
};
|
|
5916
|
-
requestBody
|
|
5988
|
+
requestBody: {
|
|
5989
|
+
content: {
|
|
5990
|
+
"multipart/form-data": {
|
|
5991
|
+
/**
|
|
5992
|
+
* Format: binary
|
|
5993
|
+
* @description The file to upload. Images, video and PDF are accepted; see the 400 response for the rejected-mime and blocked-extension cases.
|
|
5994
|
+
*/
|
|
5995
|
+
file: string;
|
|
5996
|
+
/**
|
|
5997
|
+
* @description Attach the upload in the same transaction. Requires `entityId`; supplying only one of the pair uploads the file WITHOUT associating it.
|
|
5998
|
+
* @enum {string}
|
|
5999
|
+
*/
|
|
6000
|
+
entityType?: "product" | "variant" | "content_page";
|
|
6001
|
+
/**
|
|
6002
|
+
* Format: uuid
|
|
6003
|
+
* @description The id of the entity named by `entityType`.
|
|
6004
|
+
*/
|
|
6005
|
+
entityId?: string;
|
|
6006
|
+
/**
|
|
6007
|
+
* @description Association role. Ignored unless `entityType`+`entityId` are present.
|
|
6008
|
+
* @default gallery
|
|
6009
|
+
* @enum {string}
|
|
6010
|
+
*/
|
|
6011
|
+
role?: "hero" | "gallery" | "thumbnail" | "technical" | "lifestyle" | "swatch";
|
|
6012
|
+
/**
|
|
6013
|
+
* @description Sort position within the entity’s gallery.
|
|
6014
|
+
* @default 0
|
|
6015
|
+
*/
|
|
6016
|
+
position?: number;
|
|
6017
|
+
/** @description A JSON OBJECT keyed by locale, sent as a STRING — e.g. `{"en_US":"Blue widget on white"}`. Unparseable JSON is ignored rather than rejected, so malformed alt text costs you the alt text, not the upload. */
|
|
6018
|
+
altText?: string;
|
|
6019
|
+
};
|
|
6020
|
+
};
|
|
6021
|
+
};
|
|
5917
6022
|
responses: {
|
|
5918
6023
|
/** @description Default Response */
|
|
5919
6024
|
201: {
|
|
@@ -7471,7 +7576,7 @@ interface paths {
|
|
|
7471
7576
|
availability: "oss" | "hosted";
|
|
7472
7577
|
capabilities: {
|
|
7473
7578
|
/** @enum {string} */
|
|
7474
|
-
entity: "product" | "variant" | "media" | "category";
|
|
7579
|
+
entity: "product" | "variant" | "media" | "category" | "content_page";
|
|
7475
7580
|
/** @enum {string} */
|
|
7476
7581
|
direction: "push" | "pull" | "bidirectional";
|
|
7477
7582
|
}[];
|
|
@@ -8937,8 +9042,7 @@ interface paths {
|
|
|
8937
9042
|
}[];
|
|
8938
9043
|
limit: number;
|
|
8939
9044
|
offset: number;
|
|
8940
|
-
hasMore
|
|
8941
|
-
total?: number;
|
|
9045
|
+
hasMore: boolean;
|
|
8942
9046
|
};
|
|
8943
9047
|
};
|
|
8944
9048
|
};
|
package/dist/openapi.d.ts
CHANGED
|
@@ -914,11 +914,6 @@ interface paths {
|
|
|
914
914
|
content: {
|
|
915
915
|
"application/json": {
|
|
916
916
|
code?: string;
|
|
917
|
-
/**
|
|
918
|
-
* @default product
|
|
919
|
-
* @enum {string}
|
|
920
|
-
*/
|
|
921
|
-
entityKind?: "product" | "content";
|
|
922
917
|
label?: {
|
|
923
918
|
[key: string]: string;
|
|
924
919
|
};
|
|
@@ -1575,6 +1570,7 @@ interface paths {
|
|
|
1575
1570
|
categoryId?: string;
|
|
1576
1571
|
includeDescendants?: boolean | ("true" | "false" | "1" | "0");
|
|
1577
1572
|
brand?: string;
|
|
1573
|
+
/** @description Repeatable — `?tag=a&tag=b` matches records carrying ALL listed tags. Values are canonicalized exactly as writes are, so `?tag=Buying%20Guide` matches the stored `buying-guide`; you never have to pre-slugify a filter. Backed by the GIN index on `tags`. */
|
|
1578
1574
|
tag?: string | string[];
|
|
1579
1575
|
connectorId?: string;
|
|
1580
1576
|
updatedSince?: string;
|
|
@@ -1621,6 +1617,7 @@ interface paths {
|
|
|
1621
1617
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
1622
1618
|
[key: string]: unknown;
|
|
1623
1619
|
};
|
|
1620
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
1624
1621
|
tags: string[];
|
|
1625
1622
|
/** Format: uuid */
|
|
1626
1623
|
createdBy: string | null;
|
|
@@ -1631,7 +1628,7 @@ interface paths {
|
|
|
1631
1628
|
}[];
|
|
1632
1629
|
limit: number;
|
|
1633
1630
|
offset: number;
|
|
1634
|
-
hasMore
|
|
1631
|
+
hasMore: boolean;
|
|
1635
1632
|
total?: number;
|
|
1636
1633
|
};
|
|
1637
1634
|
};
|
|
@@ -1670,7 +1667,10 @@ interface paths {
|
|
|
1670
1667
|
value?: unknown;
|
|
1671
1668
|
}[];
|
|
1672
1669
|
};
|
|
1673
|
-
/**
|
|
1670
|
+
/**
|
|
1671
|
+
* @description Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one.
|
|
1672
|
+
* @default []
|
|
1673
|
+
*/
|
|
1674
1674
|
tags?: string[];
|
|
1675
1675
|
};
|
|
1676
1676
|
};
|
|
@@ -1700,6 +1700,7 @@ interface paths {
|
|
|
1700
1700
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
1701
1701
|
[key: string]: unknown;
|
|
1702
1702
|
};
|
|
1703
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
1703
1704
|
tags: string[];
|
|
1704
1705
|
/** Format: uuid */
|
|
1705
1706
|
createdBy: string | null;
|
|
@@ -1766,6 +1767,7 @@ interface paths {
|
|
|
1766
1767
|
categoryId?: string;
|
|
1767
1768
|
includeDescendants?: boolean | ("true" | "false" | "1" | "0");
|
|
1768
1769
|
brand?: string;
|
|
1770
|
+
/** @description Repeatable — `?tag=a&tag=b` matches records carrying ALL listed tags. Values are canonicalized exactly as writes are, so `?tag=Buying%20Guide` matches the stored `buying-guide`; you never have to pre-slugify a filter. Backed by the GIN index on `tags`. */
|
|
1769
1771
|
tag?: string | string[];
|
|
1770
1772
|
connectorId?: string;
|
|
1771
1773
|
updatedSince?: string;
|
|
@@ -1985,6 +1987,7 @@ interface paths {
|
|
|
1985
1987
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
1986
1988
|
[key: string]: unknown;
|
|
1987
1989
|
};
|
|
1990
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
1988
1991
|
tags: string[];
|
|
1989
1992
|
/** Format: uuid */
|
|
1990
1993
|
createdBy: string | null;
|
|
@@ -2108,6 +2111,7 @@ interface paths {
|
|
|
2108
2111
|
value?: unknown;
|
|
2109
2112
|
}[];
|
|
2110
2113
|
};
|
|
2114
|
+
/** @description Replaces the full tag list when present. Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one. */
|
|
2111
2115
|
tags?: string[];
|
|
2112
2116
|
};
|
|
2113
2117
|
};
|
|
@@ -2137,6 +2141,7 @@ interface paths {
|
|
|
2137
2141
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
2138
2142
|
[key: string]: unknown;
|
|
2139
2143
|
};
|
|
2144
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
2140
2145
|
tags: string[];
|
|
2141
2146
|
/** Format: uuid */
|
|
2142
2147
|
createdBy: string | null;
|
|
@@ -2304,6 +2309,7 @@ interface paths {
|
|
|
2304
2309
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
2305
2310
|
[key: string]: unknown;
|
|
2306
2311
|
};
|
|
2312
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
2307
2313
|
tags: string[];
|
|
2308
2314
|
/** Format: uuid */
|
|
2309
2315
|
createdBy: string | null;
|
|
@@ -2710,6 +2716,7 @@ interface paths {
|
|
|
2710
2716
|
productIds: string[];
|
|
2711
2717
|
/** @enum {string} */
|
|
2712
2718
|
mode: "add" | "remove" | "replace";
|
|
2719
|
+
/** @description Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one. */
|
|
2713
2720
|
tags: string[];
|
|
2714
2721
|
};
|
|
2715
2722
|
};
|
|
@@ -3523,6 +3530,7 @@ interface paths {
|
|
|
3523
3530
|
familyId?: string;
|
|
3524
3531
|
categoryId?: string;
|
|
3525
3532
|
channelId?: string;
|
|
3533
|
+
/** @description Repeatable — `?tag=a&tag=b` matches records carrying ALL listed tags. Values are canonicalized exactly as writes are, so `?tag=Buying%20Guide` matches the stored `buying-guide`; you never have to pre-slugify a filter. */
|
|
3526
3534
|
tag?: string | string[];
|
|
3527
3535
|
updatedSince?: string;
|
|
3528
3536
|
limit?: number;
|
|
@@ -3563,6 +3571,7 @@ interface paths {
|
|
|
3563
3571
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3564
3572
|
[key: string]: unknown;
|
|
3565
3573
|
};
|
|
3574
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3566
3575
|
tags: string[];
|
|
3567
3576
|
/** Format: uuid */
|
|
3568
3577
|
createdBy: string | null;
|
|
@@ -3571,8 +3580,7 @@ interface paths {
|
|
|
3571
3580
|
}[];
|
|
3572
3581
|
limit: number;
|
|
3573
3582
|
offset: number;
|
|
3574
|
-
hasMore
|
|
3575
|
-
total?: number;
|
|
3583
|
+
hasMore: boolean;
|
|
3576
3584
|
};
|
|
3577
3585
|
};
|
|
3578
3586
|
};
|
|
@@ -3629,7 +3637,10 @@ interface paths {
|
|
|
3629
3637
|
value?: unknown;
|
|
3630
3638
|
}[];
|
|
3631
3639
|
};
|
|
3632
|
-
/**
|
|
3640
|
+
/**
|
|
3641
|
+
* @description Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one.
|
|
3642
|
+
* @default []
|
|
3643
|
+
*/
|
|
3633
3644
|
tags?: string[];
|
|
3634
3645
|
};
|
|
3635
3646
|
};
|
|
@@ -3663,6 +3674,7 @@ interface paths {
|
|
|
3663
3674
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3664
3675
|
[key: string]: unknown;
|
|
3665
3676
|
};
|
|
3677
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3666
3678
|
tags: string[];
|
|
3667
3679
|
/** Format: uuid */
|
|
3668
3680
|
createdBy: string | null;
|
|
@@ -3739,6 +3751,63 @@ interface paths {
|
|
|
3739
3751
|
patch?: never;
|
|
3740
3752
|
trace?: never;
|
|
3741
3753
|
};
|
|
3754
|
+
"/v1/content/tags": {
|
|
3755
|
+
parameters: {
|
|
3756
|
+
query?: never;
|
|
3757
|
+
header?: never;
|
|
3758
|
+
path?: never;
|
|
3759
|
+
cookie?: never;
|
|
3760
|
+
};
|
|
3761
|
+
/**
|
|
3762
|
+
* List all content-page tags in use, with counts
|
|
3763
|
+
* @description Every distinct tag currently on at least one content page, ordered by usage. Powers tag autocomplete in the editor, which is what keeps a vocabulary from drifting into `guide` / `guides` / `Guides`. Filter pages by tag with `GET /v1/content?tag=<tag>` (repeatable; multiple tags AND together).
|
|
3764
|
+
*/
|
|
3765
|
+
get: {
|
|
3766
|
+
parameters: {
|
|
3767
|
+
query?: never;
|
|
3768
|
+
header?: never;
|
|
3769
|
+
path?: never;
|
|
3770
|
+
cookie?: never;
|
|
3771
|
+
};
|
|
3772
|
+
requestBody?: never;
|
|
3773
|
+
responses: {
|
|
3774
|
+
/** @description Default Response */
|
|
3775
|
+
200: {
|
|
3776
|
+
headers: {
|
|
3777
|
+
[name: string]: unknown;
|
|
3778
|
+
};
|
|
3779
|
+
content: {
|
|
3780
|
+
"application/json": {
|
|
3781
|
+
value: string;
|
|
3782
|
+
count: number;
|
|
3783
|
+
}[];
|
|
3784
|
+
};
|
|
3785
|
+
};
|
|
3786
|
+
/** @description Default Response */
|
|
3787
|
+
403: {
|
|
3788
|
+
headers: {
|
|
3789
|
+
[name: string]: unknown;
|
|
3790
|
+
};
|
|
3791
|
+
content: {
|
|
3792
|
+
"application/json": {
|
|
3793
|
+
error: {
|
|
3794
|
+
code: string;
|
|
3795
|
+
message: string;
|
|
3796
|
+
details?: unknown;
|
|
3797
|
+
};
|
|
3798
|
+
};
|
|
3799
|
+
};
|
|
3800
|
+
};
|
|
3801
|
+
};
|
|
3802
|
+
};
|
|
3803
|
+
put?: never;
|
|
3804
|
+
post?: never;
|
|
3805
|
+
delete?: never;
|
|
3806
|
+
options?: never;
|
|
3807
|
+
head?: never;
|
|
3808
|
+
patch?: never;
|
|
3809
|
+
trace?: never;
|
|
3810
|
+
};
|
|
3742
3811
|
"/v1/content/{id}": {
|
|
3743
3812
|
parameters: {
|
|
3744
3813
|
query?: never;
|
|
@@ -3786,6 +3855,7 @@ interface paths {
|
|
|
3786
3855
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3787
3856
|
[key: string]: unknown;
|
|
3788
3857
|
};
|
|
3858
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3789
3859
|
tags: string[];
|
|
3790
3860
|
/** Format: uuid */
|
|
3791
3861
|
createdBy: string | null;
|
|
@@ -3918,6 +3988,7 @@ interface paths {
|
|
|
3918
3988
|
value?: unknown;
|
|
3919
3989
|
}[];
|
|
3920
3990
|
};
|
|
3991
|
+
/** @description Replaces the full tag list when present. Free-form tags, canonicalized on write and echoed back in canonical form — the response will NOT match your input verbatim. Each tag is lower-cased, stripped of diacritics, has every run of non-alphanumerics replaced with `-`, is trimmed of leading/trailing `-`, and is then truncated to 60 characters. So `"Buying Guide"` is stored and filtered as `buying-guide`. Tags that normalize to nothing (`""`, `"!!"`) are dropped, and duplicates are removed keeping first-occurrence order, so the array you get back may be SHORTER than the one you sent. Note the asymmetry with `maxLength`: an item may be up to 80 characters on input but is truncated to 60 once canonicalized, which can collapse two long tags into one. */
|
|
3921
3992
|
tags?: string[];
|
|
3922
3993
|
};
|
|
3923
3994
|
};
|
|
@@ -3951,6 +4022,7 @@ interface paths {
|
|
|
3951
4022
|
attributes: (string | number | boolean | ("null" | null)) | unknown[] | {
|
|
3952
4023
|
[key: string]: unknown;
|
|
3953
4024
|
};
|
|
4025
|
+
/** @description Tags in canonical form. These are normalized on write (lower-cased, slugified, deduplicated, truncated), so this array will not necessarily match what was submitted — see the `tags` field on the create/update request body for the exact rules. Filter with `?tag=` using either form. */
|
|
3954
4026
|
tags: string[];
|
|
3955
4027
|
/** Format: uuid */
|
|
3956
4028
|
createdBy: string | null;
|
|
@@ -5913,7 +5985,40 @@ interface paths {
|
|
|
5913
5985
|
path?: never;
|
|
5914
5986
|
cookie?: never;
|
|
5915
5987
|
};
|
|
5916
|
-
requestBody
|
|
5988
|
+
requestBody: {
|
|
5989
|
+
content: {
|
|
5990
|
+
"multipart/form-data": {
|
|
5991
|
+
/**
|
|
5992
|
+
* Format: binary
|
|
5993
|
+
* @description The file to upload. Images, video and PDF are accepted; see the 400 response for the rejected-mime and blocked-extension cases.
|
|
5994
|
+
*/
|
|
5995
|
+
file: string;
|
|
5996
|
+
/**
|
|
5997
|
+
* @description Attach the upload in the same transaction. Requires `entityId`; supplying only one of the pair uploads the file WITHOUT associating it.
|
|
5998
|
+
* @enum {string}
|
|
5999
|
+
*/
|
|
6000
|
+
entityType?: "product" | "variant" | "content_page";
|
|
6001
|
+
/**
|
|
6002
|
+
* Format: uuid
|
|
6003
|
+
* @description The id of the entity named by `entityType`.
|
|
6004
|
+
*/
|
|
6005
|
+
entityId?: string;
|
|
6006
|
+
/**
|
|
6007
|
+
* @description Association role. Ignored unless `entityType`+`entityId` are present.
|
|
6008
|
+
* @default gallery
|
|
6009
|
+
* @enum {string}
|
|
6010
|
+
*/
|
|
6011
|
+
role?: "hero" | "gallery" | "thumbnail" | "technical" | "lifestyle" | "swatch";
|
|
6012
|
+
/**
|
|
6013
|
+
* @description Sort position within the entity’s gallery.
|
|
6014
|
+
* @default 0
|
|
6015
|
+
*/
|
|
6016
|
+
position?: number;
|
|
6017
|
+
/** @description A JSON OBJECT keyed by locale, sent as a STRING — e.g. `{"en_US":"Blue widget on white"}`. Unparseable JSON is ignored rather than rejected, so malformed alt text costs you the alt text, not the upload. */
|
|
6018
|
+
altText?: string;
|
|
6019
|
+
};
|
|
6020
|
+
};
|
|
6021
|
+
};
|
|
5917
6022
|
responses: {
|
|
5918
6023
|
/** @description Default Response */
|
|
5919
6024
|
201: {
|
|
@@ -7471,7 +7576,7 @@ interface paths {
|
|
|
7471
7576
|
availability: "oss" | "hosted";
|
|
7472
7577
|
capabilities: {
|
|
7473
7578
|
/** @enum {string} */
|
|
7474
|
-
entity: "product" | "variant" | "media" | "category";
|
|
7579
|
+
entity: "product" | "variant" | "media" | "category" | "content_page";
|
|
7475
7580
|
/** @enum {string} */
|
|
7476
7581
|
direction: "push" | "pull" | "bidirectional";
|
|
7477
7582
|
}[];
|
|
@@ -8937,8 +9042,7 @@ interface paths {
|
|
|
8937
9042
|
}[];
|
|
8938
9043
|
limit: number;
|
|
8939
9044
|
offset: number;
|
|
8940
|
-
hasMore
|
|
8941
|
-
total?: number;
|
|
9045
|
+
hasMore: boolean;
|
|
8942
9046
|
};
|
|
8943
9047
|
};
|
|
8944
9048
|
};
|