@hostinger/mcp 1.52.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.
Files changed (75) hide show
  1. package/.env.example +14 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  3. package/.github/workflows/build-release.yaml +163 -0
  4. package/CODEOWNERS +1 -0
  5. package/Dockerfile +15 -0
  6. package/LICENSE +21 -0
  7. package/README.md +4343 -0
  8. package/build.js +60 -0
  9. package/gemini-extension.json +25 -0
  10. package/glama.json +7 -0
  11. package/package.json +59 -0
  12. package/server.json +29 -0
  13. package/skills/headless/SKILL.md +55 -0
  14. package/skills/headless/entry/bootstrap.mjs +109 -0
  15. package/skills/headless/entry/skill.md +79 -0
  16. package/skills/headless/references/DEPLOYMENT.md +34 -0
  17. package/skills/headless/references/SETUP.md +34 -0
  18. package/skills/headless/references/STORE.md +52 -0
  19. package/skills/headless/references/WORDPRESS.md +51 -0
  20. package/src/core/oauth-error.html +90 -0
  21. package/src/core/oauth-success.html +77 -0
  22. package/src/core/oauth.js +406 -0
  23. package/src/core/oauth.ts +374 -0
  24. package/src/core/runtime.js +2673 -0
  25. package/src/core/runtime.ts +2724 -0
  26. package/src/core/tools/agency-hosting.js +1535 -0
  27. package/src/core/tools/agency-hosting.ts +1550 -0
  28. package/src/core/tools/all.js +15361 -0
  29. package/src/core/tools/all.ts +15376 -0
  30. package/src/core/tools/billing.js +310 -0
  31. package/src/core/tools/billing.ts +325 -0
  32. package/src/core/tools/dns.js +393 -0
  33. package/src/core/tools/dns.ts +408 -0
  34. package/src/core/tools/domains.js +1435 -0
  35. package/src/core/tools/domains.ts +1450 -0
  36. package/src/core/tools/ecommerce.js +1426 -0
  37. package/src/core/tools/ecommerce.ts +1441 -0
  38. package/src/core/tools/horizons.js +84 -0
  39. package/src/core/tools/horizons.ts +99 -0
  40. package/src/core/tools/hosting.js +2479 -0
  41. package/src/core/tools/hosting.ts +2494 -0
  42. package/src/core/tools/mail.js +1641 -0
  43. package/src/core/tools/mail.ts +1656 -0
  44. package/src/core/tools/reach.js +2270 -0
  45. package/src/core/tools/reach.ts +2285 -0
  46. package/src/core/tools/vps.js +2248 -0
  47. package/src/core/tools/vps.ts +2263 -0
  48. package/src/core/tools/wordpress.js +1570 -0
  49. package/src/core/tools/wordpress.ts +1585 -0
  50. package/src/servers/agency-hosting.js +6 -0
  51. package/src/servers/agency-hosting.ts +6 -0
  52. package/src/servers/all.js +6 -0
  53. package/src/servers/all.ts +6 -0
  54. package/src/servers/billing.js +6 -0
  55. package/src/servers/billing.ts +6 -0
  56. package/src/servers/dns.js +6 -0
  57. package/src/servers/dns.ts +6 -0
  58. package/src/servers/domains.js +6 -0
  59. package/src/servers/domains.ts +6 -0
  60. package/src/servers/ecommerce.js +6 -0
  61. package/src/servers/ecommerce.ts +6 -0
  62. package/src/servers/horizons.js +6 -0
  63. package/src/servers/horizons.ts +6 -0
  64. package/src/servers/hosting.js +6 -0
  65. package/src/servers/hosting.ts +6 -0
  66. package/src/servers/mail.js +6 -0
  67. package/src/servers/mail.ts +6 -0
  68. package/src/servers/reach.js +6 -0
  69. package/src/servers/reach.ts +6 -0
  70. package/src/servers/vps.js +6 -0
  71. package/src/servers/vps.ts +6 -0
  72. package/src/servers/wordpress.js +6 -0
  73. package/src/servers/wordpress.ts +6 -0
  74. package/tsconfig.json +15 -0
  75. package/types.d.ts +8836 -0
@@ -0,0 +1,1426 @@
1
+ // Auto-generated tool list for group: ecommerce
2
+ export default [
3
+ {
4
+ "name": "ecommerce_listDiscountsV1",
5
+ "title": "List discounts",
6
+ "annotations": {
7
+ "title": "List discounts",
8
+ "readOnlyHint": true,
9
+ "destructiveHint": false
10
+ },
11
+ "description": "List a store's discounts. Filter by free text over code and name, or by disabled state.\nAmounts for fixed discounts are integers in the smallest currency unit; percentage\ndiscounts carry a whole-number value between 1 and 100.",
12
+ "method": "GET",
13
+ "path": "/api/ecommerce/v1/stores/{store_id}/discounts",
14
+ "inputSchema": {
15
+ "type": "object",
16
+ "properties": {
17
+ "store_id": {
18
+ "type": "string",
19
+ "description": "The ID of the store to list discounts for."
20
+ },
21
+ "q": {
22
+ "type": "string",
23
+ "description": "Free-text search over discount code and name."
24
+ },
25
+ "is_disabled": {
26
+ "type": "string",
27
+ "description": "Filter by disabled state.",
28
+ "enum": [
29
+ "true",
30
+ "false"
31
+ ]
32
+ },
33
+ "page": {
34
+ "type": "integer",
35
+ "description": "Page number"
36
+ }
37
+ },
38
+ "required": [
39
+ "store_id"
40
+ ]
41
+ },
42
+ "security": [
43
+ {
44
+ "apiToken": []
45
+ }
46
+ ],
47
+ "group": "ecommerce"
48
+ },
49
+ {
50
+ "name": "ecommerce_createADiscountV1",
51
+ "title": "Create a discount",
52
+ "annotations": {
53
+ "title": "Create a discount",
54
+ "readOnlyHint": false,
55
+ "destructiveHint": false
56
+ },
57
+ "description": "Create a discount for a store. Fixed discounts take an amount in the smallest currency\nunit (e.g. $10 is 1000); percentage discounts take a whole-number value between 1 and 100.\nFree-shipping discounts ignore value. Returns the created discount.",
58
+ "method": "POST",
59
+ "path": "/api/ecommerce/v1/stores/{store_id}/discounts",
60
+ "inputSchema": {
61
+ "type": "object",
62
+ "properties": {
63
+ "store_id": {
64
+ "type": "string",
65
+ "description": "The ID of the store to create the discount for."
66
+ },
67
+ "code": {
68
+ "type": "string",
69
+ "description": "The discount code customers enter at checkout."
70
+ },
71
+ "name": {
72
+ "type": "string",
73
+ "description": "A human-friendly discount name."
74
+ },
75
+ "type": {
76
+ "type": "string",
77
+ "description": "The discount type.",
78
+ "enum": [
79
+ "percentage",
80
+ "fixed",
81
+ "free_shipping"
82
+ ]
83
+ },
84
+ "value": {
85
+ "type": "integer",
86
+ "description": "For percentage discounts a whole number 1-100; for fixed discounts an amount in the smallest currency unit (e.g. $10 is 1000). Ignored for free_shipping."
87
+ },
88
+ "allocation": {
89
+ "type": "string",
90
+ "description": "Whether the discount applies to the cart total or to each eligible item.",
91
+ "enum": [
92
+ "total",
93
+ "item"
94
+ ]
95
+ },
96
+ "starts_at": {
97
+ "type": "string",
98
+ "description": "When the discount becomes active. A bare date (2026-11-27) anchors to time_zone. Defaults to now when omitted."
99
+ },
100
+ "ends_at": {
101
+ "type": "string",
102
+ "description": "When the discount expires. A bare date runs to the end of that day in time_zone. Never expires when omitted."
103
+ },
104
+ "usage_limit": {
105
+ "type": "integer",
106
+ "description": "Maximum number of times the discount can be redeemed."
107
+ },
108
+ "min_cart_value": {
109
+ "type": "integer",
110
+ "description": "Minimum cart value in the smallest currency unit required for the discount to apply."
111
+ },
112
+ "time_zone": {
113
+ "type": "string",
114
+ "description": "IANA time zone used to interpret starts_at and ends_at."
115
+ }
116
+ },
117
+ "required": [
118
+ "store_id",
119
+ "code",
120
+ "type",
121
+ "value"
122
+ ]
123
+ },
124
+ "security": [
125
+ {
126
+ "apiToken": []
127
+ }
128
+ ],
129
+ "group": "ecommerce"
130
+ },
131
+ {
132
+ "name": "ecommerce_getCustomStorefrontSetupInstructionsV1",
133
+ "title": "Get custom storefront setup instructions",
134
+ "annotations": {
135
+ "title": "Get custom storefront setup instructions",
136
+ "readOnlyHint": true,
137
+ "destructiveHint": false
138
+ },
139
+ "description": "Retrieve step-by-step setup instructions, formatted as Markdown, for connecting a custom sales\nchannel to your store and keeping your catalog, orders, shipping and payments in sync through\nthe Ecommerce API.",
140
+ "method": "GET",
141
+ "path": "/api/ecommerce/v1/miscellaneous/custom-storefront-instructions",
142
+ "inputSchema": {
143
+ "type": "object",
144
+ "properties": {},
145
+ "required": []
146
+ },
147
+ "security": [
148
+ {
149
+ "apiToken": []
150
+ }
151
+ ],
152
+ "group": "ecommerce"
153
+ },
154
+ {
155
+ "name": "ecommerce_cancelAnOrderV1",
156
+ "title": "Cancel an order",
157
+ "annotations": {
158
+ "title": "Cancel an order",
159
+ "readOnlyHint": false,
160
+ "destructiveHint": false
161
+ },
162
+ "description": "Cancel the order and optionally email the customer. Returns the updated order summary.",
163
+ "method": "POST",
164
+ "path": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/cancel",
165
+ "inputSchema": {
166
+ "type": "object",
167
+ "properties": {
168
+ "store_id": {
169
+ "type": "string",
170
+ "description": "The ID of the store that owns the order."
171
+ },
172
+ "order_id": {
173
+ "type": "string",
174
+ "description": "The ID of the order to cancel."
175
+ },
176
+ "notify_customer": {
177
+ "type": "boolean",
178
+ "description": "Whether to email the customer about the cancellation. Defaults to true."
179
+ }
180
+ },
181
+ "required": [
182
+ "store_id",
183
+ "order_id"
184
+ ]
185
+ },
186
+ "security": [
187
+ {
188
+ "apiToken": []
189
+ }
190
+ ],
191
+ "group": "ecommerce"
192
+ },
193
+ {
194
+ "name": "ecommerce_fulfilAnOrderV1",
195
+ "title": "Fulfil an order",
196
+ "annotations": {
197
+ "title": "Fulfil an order",
198
+ "readOnlyHint": false,
199
+ "destructiveHint": false
200
+ },
201
+ "description": "Create a fulfilment for the order and attach tracking in one call. Omit items to fulfil\nevery remaining unfulfilled item. Returns the updated order summary.",
202
+ "method": "POST",
203
+ "path": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}/fulfill",
204
+ "inputSchema": {
205
+ "type": "object",
206
+ "properties": {
207
+ "store_id": {
208
+ "type": "string",
209
+ "description": "The ID of the store that owns the order."
210
+ },
211
+ "order_id": {
212
+ "type": "string",
213
+ "description": "The ID of the order to fulfil."
214
+ },
215
+ "items": {
216
+ "type": "array",
217
+ "description": "Line items to fulfil. Omit to fulfil every remaining unfulfilled item.",
218
+ "items": {
219
+ "type": "object",
220
+ "description": "items parameter",
221
+ "properties": {
222
+ "line_item_id": {
223
+ "type": "string",
224
+ "description": "The line item to fulfil, from the order detail items[].id."
225
+ },
226
+ "quantity": {
227
+ "type": "integer",
228
+ "description": "Quantity of the line item to fulfil."
229
+ }
230
+ },
231
+ "required": [
232
+ "line_item_id",
233
+ "quantity"
234
+ ]
235
+ }
236
+ },
237
+ "tracking_number": {
238
+ "type": "string",
239
+ "description": "Carrier tracking number for the shipment."
240
+ },
241
+ "tracking_url": {
242
+ "type": "string",
243
+ "description": "Public tracking URL for the shipment. Requires tracking_number."
244
+ },
245
+ "notify_customer": {
246
+ "type": "boolean",
247
+ "description": "Whether to email the customer about the fulfilment. Defaults to true."
248
+ }
249
+ },
250
+ "required": [
251
+ "store_id",
252
+ "order_id"
253
+ ]
254
+ },
255
+ "security": [
256
+ {
257
+ "apiToken": []
258
+ }
259
+ ],
260
+ "group": "ecommerce"
261
+ },
262
+ {
263
+ "name": "ecommerce_listStoreOrdersV1",
264
+ "title": "List store orders",
265
+ "annotations": {
266
+ "title": "List store orders",
267
+ "readOnlyHint": true,
268
+ "destructiveHint": false
269
+ },
270
+ "description": "List a store's orders newest first as summaries. Filter by status, payment or fulfilment\nstatus, customer email, order number or a free-text query. Amounts are in the smallest\ncurrency unit. Retrieve a single order for its line items, addresses and fulfilments.",
271
+ "method": "GET",
272
+ "path": "/api/ecommerce/v1/stores/{store_id}/orders",
273
+ "inputSchema": {
274
+ "type": "object",
275
+ "properties": {
276
+ "store_id": {
277
+ "type": "string",
278
+ "description": "The ID of the store to list orders for."
279
+ },
280
+ "status": {
281
+ "type": "array",
282
+ "description": "Order statuses to include.",
283
+ "items": {
284
+ "type": "string",
285
+ "description": "status parameter",
286
+ "enum": [
287
+ "pending",
288
+ "completed",
289
+ "archived",
290
+ "canceled",
291
+ "requires_action"
292
+ ]
293
+ }
294
+ },
295
+ "payment_status": {
296
+ "type": "array",
297
+ "description": "Payment statuses to include. A paid order is \"captured\".",
298
+ "items": {
299
+ "type": "string",
300
+ "description": "payment_status parameter",
301
+ "enum": [
302
+ "not_paid",
303
+ "awaiting",
304
+ "captured",
305
+ "partially_refunded",
306
+ "refunded",
307
+ "canceled",
308
+ "requires_action",
309
+ "not_required"
310
+ ]
311
+ }
312
+ },
313
+ "fulfillment_status": {
314
+ "type": "array",
315
+ "description": "Fulfilment statuses to include.",
316
+ "items": {
317
+ "type": "string",
318
+ "description": "fulfillment_status parameter",
319
+ "enum": [
320
+ "not_fulfilled",
321
+ "partially_fulfilled",
322
+ "fulfilled",
323
+ "partially_shipped",
324
+ "shipped",
325
+ "partially_returned",
326
+ "returned",
327
+ "canceled",
328
+ "requires_action"
329
+ ]
330
+ }
331
+ },
332
+ "email": {
333
+ "type": "string",
334
+ "description": "Customer email, matched exactly."
335
+ },
336
+ "display_id": {
337
+ "type": "string",
338
+ "description": "The order number the merchant and customer see."
339
+ },
340
+ "q": {
341
+ "type": "string",
342
+ "description": "Free-text search over customer name, email, order number and line items."
343
+ },
344
+ "created_at_from": {
345
+ "type": "string",
346
+ "description": "Earliest creation time to include, inclusive. Accepts a date or ISO date-time (UTC)."
347
+ },
348
+ "created_at_to": {
349
+ "type": "string",
350
+ "description": "Latest creation time to include, inclusive. A bare date covers that whole day."
351
+ },
352
+ "page": {
353
+ "type": "integer",
354
+ "description": "Page number"
355
+ }
356
+ },
357
+ "required": [
358
+ "store_id"
359
+ ]
360
+ },
361
+ "security": [
362
+ {
363
+ "apiToken": []
364
+ }
365
+ ],
366
+ "group": "ecommerce"
367
+ },
368
+ {
369
+ "name": "ecommerce_retrieveAnOrderV1",
370
+ "title": "Retrieve an order",
371
+ "annotations": {
372
+ "title": "Retrieve an order",
373
+ "readOnlyHint": true,
374
+ "destructiveHint": false
375
+ },
376
+ "description": "Retrieve one order in full: line items (each with the id the fulfil endpoint needs),\naddresses, the totals breakdown and fulfilments with tracking. Amounts are in the\nsmallest currency unit.",
377
+ "method": "GET",
378
+ "path": "/api/ecommerce/v1/stores/{store_id}/orders/{order_id}",
379
+ "inputSchema": {
380
+ "type": "object",
381
+ "properties": {
382
+ "store_id": {
383
+ "type": "string",
384
+ "description": "The ID of the store that owns the order."
385
+ },
386
+ "order_id": {
387
+ "type": "string",
388
+ "description": "The ID of the order to retrieve."
389
+ }
390
+ },
391
+ "required": [
392
+ "store_id",
393
+ "order_id"
394
+ ]
395
+ },
396
+ "security": [
397
+ {
398
+ "apiToken": []
399
+ }
400
+ ],
401
+ "group": "ecommerce"
402
+ },
403
+ {
404
+ "name": "ecommerce_enableManualPaymentMethodV1",
405
+ "title": "Enable manual payment method",
406
+ "annotations": {
407
+ "title": "Enable manual payment method",
408
+ "readOnlyHint": false,
409
+ "destructiveHint": false
410
+ },
411
+ "description": "Enable a manual payment method so the store can accept orders without an online payment provider.",
412
+ "method": "POST",
413
+ "path": "/api/ecommerce/v1/stores/{store_id}/payment-methods/manual",
414
+ "inputSchema": {
415
+ "type": "object",
416
+ "properties": {
417
+ "store_id": {
418
+ "type": "string",
419
+ "description": "The ID of the store to enable manual payment for."
420
+ },
421
+ "title": {
422
+ "type": "string",
423
+ "description": "Optional display name shown to customers at checkout."
424
+ }
425
+ },
426
+ "required": [
427
+ "store_id"
428
+ ]
429
+ },
430
+ "security": [
431
+ {
432
+ "apiToken": []
433
+ }
434
+ ],
435
+ "group": "ecommerce"
436
+ },
437
+ {
438
+ "name": "ecommerce_createAPaymentProviderConnectLinkV1",
439
+ "title": "Create a payment provider connect link",
440
+ "annotations": {
441
+ "title": "Create a payment provider connect link",
442
+ "readOnlyHint": false,
443
+ "destructiveHint": false
444
+ },
445
+ "description": "Create an onboarding link for connecting a payment gateway to the store. Returns the gateway\nonboarding URL for the merchant to open and a deep-link into the store admin.",
446
+ "method": "POST",
447
+ "path": "/api/ecommerce/v1/stores/{store_id}/payment-providers/{provider_id}/connect-link",
448
+ "inputSchema": {
449
+ "type": "object",
450
+ "properties": {
451
+ "store_id": {
452
+ "type": "string",
453
+ "description": "The ID of the store to connect the payment provider to."
454
+ },
455
+ "provider_id": {
456
+ "type": "string",
457
+ "description": "The ID of the payment gateway to connect, e.g. stripe."
458
+ }
459
+ },
460
+ "required": [
461
+ "store_id",
462
+ "provider_id"
463
+ ]
464
+ },
465
+ "security": [
466
+ {
467
+ "apiToken": []
468
+ }
469
+ ],
470
+ "group": "ecommerce"
471
+ },
472
+ {
473
+ "name": "ecommerce_listStorePaymentProvidersV1",
474
+ "title": "List store payment providers",
475
+ "annotations": {
476
+ "title": "List store payment providers",
477
+ "readOnlyHint": true,
478
+ "destructiveHint": false
479
+ },
480
+ "description": "List a store's payment providers, split into providers already connected to the store and\ngateways available to install. Never exposes gateway credentials, secrets, or configuration.",
481
+ "method": "GET",
482
+ "path": "/api/ecommerce/v1/stores/{store_id}/payment-providers",
483
+ "inputSchema": {
484
+ "type": "object",
485
+ "properties": {
486
+ "store_id": {
487
+ "type": "string",
488
+ "description": "The ID of the store to list payment providers for."
489
+ },
490
+ "include_currency_unsupported": {
491
+ "type": "boolean",
492
+ "description": "Include gateways that do not support the store currency in the available list."
493
+ }
494
+ },
495
+ "required": [
496
+ "store_id"
497
+ ]
498
+ },
499
+ "security": [
500
+ {
501
+ "apiToken": []
502
+ }
503
+ ],
504
+ "group": "ecommerce"
505
+ },
506
+ {
507
+ "name": "ecommerce_createAProductImageUploadURLV1",
508
+ "title": "Create a product image upload URL",
509
+ "annotations": {
510
+ "title": "Create a product image upload URL",
511
+ "readOnlyHint": false,
512
+ "destructiveHint": false
513
+ },
514
+ "description": "Returns a signed URL to upload a product image to (multipart/form-data POST). Then call the\nattach-image endpoint with the returned object_name to scan and attach it to the product.",
515
+ "method": "POST",
516
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images/upload-url",
517
+ "inputSchema": {
518
+ "type": "object",
519
+ "properties": {
520
+ "store_id": {
521
+ "type": "string",
522
+ "description": "The ID of the store the product belongs to."
523
+ },
524
+ "product_id": {
525
+ "type": "string",
526
+ "description": "The ID of the product the image will be attached to."
527
+ }
528
+ },
529
+ "required": [
530
+ "store_id",
531
+ "product_id"
532
+ ]
533
+ },
534
+ "security": [
535
+ {
536
+ "apiToken": []
537
+ }
538
+ ],
539
+ "group": "ecommerce"
540
+ },
541
+ {
542
+ "name": "ecommerce_deleteAProductV1",
543
+ "title": "Delete a product",
544
+ "annotations": {
545
+ "title": "Delete a product",
546
+ "readOnlyHint": false,
547
+ "destructiveHint": true,
548
+ "idempotentHint": true
549
+ },
550
+ "description": "Delete a product and its variants from the store. A subscription product with active\nsubscribers is archived instead of deleted so its data stays available.",
551
+ "method": "DELETE",
552
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}",
553
+ "inputSchema": {
554
+ "type": "object",
555
+ "properties": {
556
+ "store_id": {
557
+ "type": "string",
558
+ "description": "The ID of the store that owns the product."
559
+ },
560
+ "product_id": {
561
+ "type": "string",
562
+ "description": "The ID of the product to delete."
563
+ }
564
+ },
565
+ "required": [
566
+ "store_id",
567
+ "product_id"
568
+ ]
569
+ },
570
+ "security": [
571
+ {
572
+ "apiToken": []
573
+ }
574
+ ],
575
+ "group": "ecommerce"
576
+ },
577
+ {
578
+ "name": "ecommerce_updateAProductV1",
579
+ "title": "Update a product",
580
+ "annotations": {
581
+ "title": "Update a product",
582
+ "readOnlyHint": false,
583
+ "destructiveHint": true,
584
+ "idempotentHint": true
585
+ },
586
+ "description": "Update a product's name, description or status. Set status to published to make it buyable,\ndraft to hide it, or archived to retire it. Variants, prices and inventory are managed\nthrough the variant endpoints, not here. Returns the updated product summary.",
587
+ "method": "PATCH",
588
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}",
589
+ "inputSchema": {
590
+ "type": "object",
591
+ "properties": {
592
+ "store_id": {
593
+ "type": "string",
594
+ "description": "The ID of the store that owns the product."
595
+ },
596
+ "product_id": {
597
+ "type": "string",
598
+ "description": "The ID of the product to update."
599
+ },
600
+ "name": {
601
+ "type": "string",
602
+ "description": "The product name."
603
+ },
604
+ "description": {
605
+ "type": "string",
606
+ "description": "The product description."
607
+ },
608
+ "status": {
609
+ "type": "string",
610
+ "description": "Set \"published\" to make the product buyable, \"draft\" to hide it, or \"archived\" to retire it.",
611
+ "enum": [
612
+ "draft",
613
+ "published",
614
+ "archived"
615
+ ]
616
+ }
617
+ },
618
+ "required": [
619
+ "store_id",
620
+ "product_id"
621
+ ]
622
+ },
623
+ "security": [
624
+ {
625
+ "apiToken": []
626
+ }
627
+ ],
628
+ "group": "ecommerce"
629
+ },
630
+ {
631
+ "name": "ecommerce_createDigitalProductV1",
632
+ "title": "Create digital product",
633
+ "annotations": {
634
+ "title": "Create digital product",
635
+ "readOnlyHint": false,
636
+ "destructiveHint": false
637
+ },
638
+ "description": "Create a published digital product with a single variant and an optional external download link.",
639
+ "method": "POST",
640
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/digital",
641
+ "inputSchema": {
642
+ "type": "object",
643
+ "properties": {
644
+ "store_id": {
645
+ "type": "string",
646
+ "description": "The ID of the store to create the product in."
647
+ },
648
+ "name": {
649
+ "type": "string",
650
+ "description": "The product name."
651
+ },
652
+ "price": {
653
+ "type": "integer",
654
+ "description": "Price in the smallest currency unit (e.g. cents). Must be positive."
655
+ },
656
+ "description": {
657
+ "type": "string",
658
+ "description": "The product description."
659
+ },
660
+ "currency": {
661
+ "type": "string",
662
+ "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted."
663
+ },
664
+ "download_url": {
665
+ "type": "string",
666
+ "description": "Optional external download link delivered to the customer after purchase."
667
+ }
668
+ },
669
+ "required": [
670
+ "store_id",
671
+ "name",
672
+ "price"
673
+ ]
674
+ },
675
+ "security": [
676
+ {
677
+ "apiToken": []
678
+ }
679
+ ],
680
+ "group": "ecommerce"
681
+ },
682
+ {
683
+ "name": "ecommerce_listProductsV1",
684
+ "title": "List products",
685
+ "annotations": {
686
+ "title": "List products",
687
+ "readOnlyHint": true,
688
+ "destructiveHint": false
689
+ },
690
+ "description": "List a store's products newest first as lean summaries (name, status, thumbnail, variant\ncount and price range). Prices are integers in the smallest currency unit and live on\nvariants. Filter by status, free text or a set of product ids. Use include=variants to\nembed each product's variants with prices and inventory, and include=media to embed its media.",
691
+ "method": "GET",
692
+ "path": "/api/ecommerce/v1/stores/{store_id}/products",
693
+ "inputSchema": {
694
+ "type": "object",
695
+ "properties": {
696
+ "store_id": {
697
+ "type": "string",
698
+ "description": "The ID of the store to list products for."
699
+ },
700
+ "product_ids": {
701
+ "type": "array",
702
+ "description": "Restrict to these product ids. Doubles as a single-product lookup. Up to 200 ids.",
703
+ "items": {
704
+ "type": "string",
705
+ "description": "product_ids parameter"
706
+ }
707
+ },
708
+ "status": {
709
+ "type": "array",
710
+ "description": "Product statuses to include.",
711
+ "items": {
712
+ "type": "string",
713
+ "description": "status parameter",
714
+ "enum": [
715
+ "draft",
716
+ "proposed",
717
+ "published",
718
+ "rejected",
719
+ "archived"
720
+ ]
721
+ }
722
+ },
723
+ "q": {
724
+ "type": "string",
725
+ "description": "Free-text search over product title and SKU."
726
+ },
727
+ "include": {
728
+ "type": "array",
729
+ "description": "Opt-in heavy data: \"variants\" embeds each product's variants; \"media\" embeds its media.",
730
+ "items": {
731
+ "type": "string",
732
+ "description": "include parameter",
733
+ "enum": [
734
+ "variants",
735
+ "media"
736
+ ]
737
+ }
738
+ },
739
+ "page": {
740
+ "type": "integer",
741
+ "description": "Page number"
742
+ }
743
+ },
744
+ "required": [
745
+ "store_id"
746
+ ]
747
+ },
748
+ "security": [
749
+ {
750
+ "apiToken": []
751
+ }
752
+ ],
753
+ "group": "ecommerce"
754
+ },
755
+ {
756
+ "name": "ecommerce_createPhysicalProductV1",
757
+ "title": "Create physical product",
758
+ "annotations": {
759
+ "title": "Create physical product",
760
+ "readOnlyHint": false,
761
+ "destructiveHint": false
762
+ },
763
+ "description": "Create a published physical product with a single variant priced in the store currency.",
764
+ "method": "POST",
765
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/physical",
766
+ "inputSchema": {
767
+ "type": "object",
768
+ "properties": {
769
+ "store_id": {
770
+ "type": "string",
771
+ "description": "The ID of the store to create the product in."
772
+ },
773
+ "name": {
774
+ "type": "string",
775
+ "description": "The product name."
776
+ },
777
+ "price": {
778
+ "type": "integer",
779
+ "description": "Price in the smallest currency unit (e.g. cents). Must be positive."
780
+ },
781
+ "description": {
782
+ "type": "string",
783
+ "description": "The product description."
784
+ },
785
+ "currency": {
786
+ "type": "string",
787
+ "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted."
788
+ }
789
+ },
790
+ "required": [
791
+ "store_id",
792
+ "name",
793
+ "price"
794
+ ]
795
+ },
796
+ "security": [
797
+ {
798
+ "apiToken": []
799
+ }
800
+ ],
801
+ "group": "ecommerce"
802
+ },
803
+ {
804
+ "name": "ecommerce_uploadAndAttachAProductImageV1",
805
+ "title": "Upload and attach a product image",
806
+ "annotations": {
807
+ "title": "Upload and attach a product image",
808
+ "readOnlyHint": false,
809
+ "destructiveHint": false
810
+ },
811
+ "description": "Fetch a raster image (JPEG, PNG, GIF or WebP, max 15MB) from a URL and attach it to a product in a\nsingle call. The image is virus-scanned and validated by content, then stored on the CDN. Set\nis_thumbnail to make it the product's primary image.",
812
+ "method": "POST",
813
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/images",
814
+ "inputSchema": {
815
+ "type": "object",
816
+ "properties": {
817
+ "store_id": {
818
+ "type": "string",
819
+ "description": "The ID of the store the product belongs to."
820
+ },
821
+ "product_id": {
822
+ "type": "string",
823
+ "description": "The ID of the product to attach the image to."
824
+ },
825
+ "image_url": {
826
+ "type": "string",
827
+ "description": "Publicly reachable URL of the raster image (JPEG, PNG, GIF or WebP), maximum 15MB. The image is\nfetched, virus-scanned and validated by content, then stored on the CDN. SVG is not accepted.\nProvide either this or object_name."
828
+ },
829
+ "object_name": {
830
+ "type": "string",
831
+ "description": "Key returned by the upload-url endpoint. Provide this instead of image_url to attach an uploaded image."
832
+ },
833
+ "is_thumbnail": {
834
+ "type": "boolean",
835
+ "description": "When true, the image becomes the product's thumbnail (primary image). When omitted, it becomes the\nthumbnail only if the product does not have one yet."
836
+ }
837
+ },
838
+ "required": [
839
+ "store_id",
840
+ "product_id"
841
+ ]
842
+ },
843
+ "security": [
844
+ {
845
+ "apiToken": []
846
+ }
847
+ ],
848
+ "group": "ecommerce"
849
+ },
850
+ {
851
+ "name": "ecommerce_listSalesChannelsV1",
852
+ "title": "List sales channels",
853
+ "annotations": {
854
+ "title": "List sales channels",
855
+ "readOnlyHint": true,
856
+ "destructiveHint": false
857
+ },
858
+ "description": "List a store's active sales channels with their full metadata.",
859
+ "method": "GET",
860
+ "path": "/api/ecommerce/v1/stores/{store_id}/sales-channels",
861
+ "inputSchema": {
862
+ "type": "object",
863
+ "properties": {
864
+ "store_id": {
865
+ "type": "string",
866
+ "description": "The ID of the store to list sales channels for."
867
+ }
868
+ },
869
+ "required": [
870
+ "store_id"
871
+ ]
872
+ },
873
+ "security": [
874
+ {
875
+ "apiToken": []
876
+ }
877
+ ],
878
+ "group": "ecommerce"
879
+ },
880
+ {
881
+ "name": "ecommerce_createASalesChannelV1",
882
+ "title": "Create a sales channel",
883
+ "annotations": {
884
+ "title": "Create a sales channel",
885
+ "readOnlyHint": false,
886
+ "destructiveHint": false
887
+ },
888
+ "description": "Create a sales channel for a store. A \"custom\" channel is headless: build your own frontend and keep\nyour catalog, orders, shipping and payments in sync through the Ecommerce API. A \"quick-link\" channel\nis a hosted one-page store whose handle is auto-generated.",
889
+ "method": "POST",
890
+ "path": "/api/ecommerce/v1/stores/{store_id}/sales-channels",
891
+ "inputSchema": {
892
+ "type": "object",
893
+ "properties": {
894
+ "store_id": {
895
+ "type": "string",
896
+ "description": "The ID of the store to create the sales channel for."
897
+ },
898
+ "type": {
899
+ "type": "string",
900
+ "description": "Sales channel type. \"custom\" is a headless channel: it requires a name and takes an optional public url.\n\"quick-link\" is a one-page store whose handle is auto-generated; it supports neither name nor url.",
901
+ "enum": [
902
+ "custom",
903
+ "quick-link"
904
+ ]
905
+ },
906
+ "name": {
907
+ "type": "string",
908
+ "description": "Merchant-facing custom name. Required for custom channels; not supported for quick-link."
909
+ },
910
+ "url": {
911
+ "type": "string",
912
+ "description": "Optional public url for the channel. Custom channels only; not supported for quick-link."
913
+ }
914
+ },
915
+ "required": [
916
+ "store_id",
917
+ "type"
918
+ ]
919
+ },
920
+ "security": [
921
+ {
922
+ "apiToken": []
923
+ }
924
+ ],
925
+ "group": "ecommerce"
926
+ },
927
+ {
928
+ "name": "ecommerce_updateSalesChannelV1",
929
+ "title": "Update sales channel",
930
+ "annotations": {
931
+ "title": "Update sales channel",
932
+ "readOnlyHint": false,
933
+ "destructiveHint": true,
934
+ "idempotentHint": true
935
+ },
936
+ "description": "Update a custom sales channel. The merchant-facing `name` and the public `url`\n(returned as the channel `domain`) can be changed. Pass `null` to clear a value.",
937
+ "method": "PATCH",
938
+ "path": "/api/ecommerce/v1/stores/{store_id}/sales-channels/{sales_channel_id}",
939
+ "inputSchema": {
940
+ "type": "object",
941
+ "properties": {
942
+ "store_id": {
943
+ "type": "string",
944
+ "description": "The ID of the store that owns the sales channel."
945
+ },
946
+ "sales_channel_id": {
947
+ "type": "string",
948
+ "description": "The ID of the sales channel to update."
949
+ },
950
+ "name": {
951
+ "type": "string",
952
+ "description": "Merchant-facing custom name shown in the sales channels list. Pass null to clear it."
953
+ },
954
+ "url": {
955
+ "type": "string",
956
+ "description": "Public address where the custom sales channel lives. Pass null to clear it."
957
+ }
958
+ },
959
+ "required": [
960
+ "store_id",
961
+ "sales_channel_id"
962
+ ]
963
+ },
964
+ "security": [
965
+ {
966
+ "apiToken": []
967
+ }
968
+ ],
969
+ "group": "ecommerce"
970
+ },
971
+ {
972
+ "name": "ecommerce_setStoreShippingV1",
973
+ "title": "Set store shipping",
974
+ "annotations": {
975
+ "title": "Set store shipping",
976
+ "readOnlyHint": false,
977
+ "destructiveHint": false
978
+ },
979
+ "description": "Set the flat-rate shipping price for a store, creating the shipping zone if it does not exist yet.",
980
+ "method": "POST",
981
+ "path": "/api/ecommerce/v1/stores/{store_id}/shipping",
982
+ "inputSchema": {
983
+ "type": "object",
984
+ "properties": {
985
+ "store_id": {
986
+ "type": "string",
987
+ "description": "The ID of the store to configure shipping for."
988
+ },
989
+ "price": {
990
+ "type": "integer",
991
+ "description": "Flat shipping rate in the smallest currency unit (e.g. cents). Use 0 for free shipping."
992
+ }
993
+ },
994
+ "required": [
995
+ "store_id",
996
+ "price"
997
+ ]
998
+ },
999
+ "security": [
1000
+ {
1001
+ "apiToken": []
1002
+ }
1003
+ ],
1004
+ "group": "ecommerce"
1005
+ },
1006
+ {
1007
+ "name": "ecommerce_deleteStoreV1",
1008
+ "title": "Delete store",
1009
+ "annotations": {
1010
+ "title": "Delete store",
1011
+ "readOnlyHint": false,
1012
+ "destructiveHint": true,
1013
+ "idempotentHint": true
1014
+ },
1015
+ "description": "Soft-delete a store owned by your account.\n\nThe underlying store data is preserved; only the store is marked as deleted.",
1016
+ "method": "DELETE",
1017
+ "path": "/api/ecommerce/v1/stores/{store_id}",
1018
+ "inputSchema": {
1019
+ "type": "object",
1020
+ "properties": {
1021
+ "store_id": {
1022
+ "type": "string",
1023
+ "description": "The ID of the store to delete."
1024
+ }
1025
+ },
1026
+ "required": [
1027
+ "store_id"
1028
+ ]
1029
+ },
1030
+ "security": [
1031
+ {
1032
+ "apiToken": []
1033
+ }
1034
+ ],
1035
+ "group": "ecommerce"
1036
+ },
1037
+ {
1038
+ "name": "ecommerce_getStoresV1",
1039
+ "title": "Get stores",
1040
+ "annotations": {
1041
+ "title": "Get stores",
1042
+ "readOnlyHint": true,
1043
+ "destructiveHint": false
1044
+ },
1045
+ "description": "Retrieve the stores associated with your account.",
1046
+ "method": "GET",
1047
+ "path": "/api/ecommerce/v1/stores",
1048
+ "inputSchema": {
1049
+ "type": "object",
1050
+ "properties": {
1051
+ "page": {
1052
+ "type": "integer",
1053
+ "description": "Page number"
1054
+ }
1055
+ },
1056
+ "required": []
1057
+ },
1058
+ "security": [
1059
+ {
1060
+ "apiToken": []
1061
+ }
1062
+ ],
1063
+ "group": "ecommerce"
1064
+ },
1065
+ {
1066
+ "name": "ecommerce_createStoreV1",
1067
+ "title": "Create store",
1068
+ "annotations": {
1069
+ "title": "Create store",
1070
+ "readOnlyHint": false,
1071
+ "destructiveHint": false
1072
+ },
1073
+ "description": "Create a new store for your account.\n\nA primary sales channel is created alongside the store.",
1074
+ "method": "POST",
1075
+ "path": "/api/ecommerce/v1/stores",
1076
+ "inputSchema": {
1077
+ "type": "object",
1078
+ "properties": {
1079
+ "name": {
1080
+ "type": "string",
1081
+ "description": "name parameter"
1082
+ },
1083
+ "country_code": {
1084
+ "type": "string",
1085
+ "description": "ISO 3166-1 alpha-2 country code."
1086
+ },
1087
+ "company_email": {
1088
+ "type": "string",
1089
+ "description": "company_email parameter"
1090
+ },
1091
+ "company_name": {
1092
+ "type": "string",
1093
+ "description": "company_name parameter"
1094
+ },
1095
+ "language": {
1096
+ "type": "string",
1097
+ "description": "ISO 639-1 language code."
1098
+ },
1099
+ "sales_channel": {
1100
+ "type": "object",
1101
+ "description": "sales_channel parameter",
1102
+ "properties": {
1103
+ "type": {
1104
+ "type": "string",
1105
+ "description": "Sales channel type. Only \"custom\" channels can be created via the API.",
1106
+ "enum": [
1107
+ "custom"
1108
+ ]
1109
+ },
1110
+ "external_id": {
1111
+ "type": "string",
1112
+ "description": "External identifier for the sales channel."
1113
+ }
1114
+ }
1115
+ }
1116
+ },
1117
+ "required": []
1118
+ },
1119
+ "security": [
1120
+ {
1121
+ "apiToken": []
1122
+ }
1123
+ ],
1124
+ "group": "ecommerce"
1125
+ },
1126
+ {
1127
+ "name": "ecommerce_getStoreMetadataV1",
1128
+ "title": "Get store metadata",
1129
+ "annotations": {
1130
+ "title": "Get store metadata",
1131
+ "readOnlyHint": true,
1132
+ "destructiveHint": false
1133
+ },
1134
+ "description": "Get a store's readiness metadata: whether payment methods and shipping are configured,\nplus its default currency. Useful to verify prerequisites before building a storefront.",
1135
+ "method": "GET",
1136
+ "path": "/api/ecommerce/v1/stores/{store_id}/metadata",
1137
+ "inputSchema": {
1138
+ "type": "object",
1139
+ "properties": {
1140
+ "store_id": {
1141
+ "type": "string",
1142
+ "description": "The ID of the store to read metadata for."
1143
+ }
1144
+ },
1145
+ "required": [
1146
+ "store_id"
1147
+ ]
1148
+ },
1149
+ "security": [
1150
+ {
1151
+ "apiToken": []
1152
+ }
1153
+ ],
1154
+ "group": "ecommerce"
1155
+ },
1156
+ {
1157
+ "name": "ecommerce_updateProductVariantsInBatchV1",
1158
+ "title": "Update product variants in batch",
1159
+ "annotations": {
1160
+ "title": "Update product variants in batch",
1161
+ "readOnlyHint": false,
1162
+ "destructiveHint": true,
1163
+ "idempotentHint": true
1164
+ },
1165
+ "description": "Update up to 100 existing variants in place by id — title, inventory, stock tracking and\nprices. Variants omitted from the request are left untouched. Prices replace the variant's\nexisting prices in full. Returns the updated variants.",
1166
+ "method": "PATCH",
1167
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/batch",
1168
+ "inputSchema": {
1169
+ "type": "object",
1170
+ "properties": {
1171
+ "store_id": {
1172
+ "type": "string",
1173
+ "description": "The ID of the store that owns the product."
1174
+ },
1175
+ "product_id": {
1176
+ "type": "string",
1177
+ "description": "The ID of the product whose variants are being updated."
1178
+ },
1179
+ "variants": {
1180
+ "type": "array",
1181
+ "description": "Variants to update in place by id, up to 100. Variants omitted from the list are left untouched.",
1182
+ "items": {
1183
+ "type": "object",
1184
+ "description": "variants parameter",
1185
+ "properties": {
1186
+ "variant_id": {
1187
+ "type": "string",
1188
+ "description": "The id of the variant to update."
1189
+ },
1190
+ "title": {
1191
+ "type": "string",
1192
+ "description": "The variant title."
1193
+ },
1194
+ "inventory_quantity": {
1195
+ "type": "integer",
1196
+ "description": "Units in stock."
1197
+ },
1198
+ "manage_inventory": {
1199
+ "type": "boolean",
1200
+ "description": "Whether stock is tracked for this variant."
1201
+ },
1202
+ "prices": {
1203
+ "type": "array",
1204
+ "description": "The full list of prices for the variant, replacing the existing ones. A free item is amount: 0.",
1205
+ "items": {
1206
+ "type": "object",
1207
+ "description": "prices parameter",
1208
+ "properties": {
1209
+ "amount": {
1210
+ "type": "integer",
1211
+ "description": "Price in the smallest currency unit (e.g. cents)."
1212
+ },
1213
+ "sale_amount": {
1214
+ "type": "integer",
1215
+ "description": "Optional sale price in the smallest currency unit; must be lower than amount."
1216
+ },
1217
+ "currency": {
1218
+ "type": "string",
1219
+ "description": "ISO 4217 currency code. Defaults to the store's default currency."
1220
+ }
1221
+ },
1222
+ "required": [
1223
+ "amount"
1224
+ ]
1225
+ }
1226
+ }
1227
+ },
1228
+ "required": [
1229
+ "variant_id"
1230
+ ]
1231
+ }
1232
+ }
1233
+ },
1234
+ "required": [
1235
+ "store_id",
1236
+ "product_id",
1237
+ "variants"
1238
+ ]
1239
+ },
1240
+ "security": [
1241
+ {
1242
+ "apiToken": []
1243
+ }
1244
+ ],
1245
+ "group": "ecommerce"
1246
+ },
1247
+ {
1248
+ "name": "ecommerce_deleteAProductVariantV1",
1249
+ "title": "Delete a product variant",
1250
+ "annotations": {
1251
+ "title": "Delete a product variant",
1252
+ "readOnlyHint": false,
1253
+ "destructiveHint": true,
1254
+ "idempotentHint": true
1255
+ },
1256
+ "description": "Delete a single variant from the product.",
1257
+ "method": "DELETE",
1258
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants/{variant_id}",
1259
+ "inputSchema": {
1260
+ "type": "object",
1261
+ "properties": {
1262
+ "store_id": {
1263
+ "type": "string",
1264
+ "description": "The ID of the store that owns the product."
1265
+ },
1266
+ "product_id": {
1267
+ "type": "string",
1268
+ "description": "The ID of the product that owns the variant."
1269
+ },
1270
+ "variant_id": {
1271
+ "type": "string",
1272
+ "description": "The ID of the variant to delete."
1273
+ }
1274
+ },
1275
+ "required": [
1276
+ "store_id",
1277
+ "product_id",
1278
+ "variant_id"
1279
+ ]
1280
+ },
1281
+ "security": [
1282
+ {
1283
+ "apiToken": []
1284
+ }
1285
+ ],
1286
+ "group": "ecommerce"
1287
+ },
1288
+ {
1289
+ "name": "ecommerce_listProductVariantsV1",
1290
+ "title": "List product variants",
1291
+ "annotations": {
1292
+ "title": "List product variants",
1293
+ "readOnlyHint": true,
1294
+ "destructiveHint": false
1295
+ },
1296
+ "description": "List a product's variants, ordered by rank, with their options, prices and inventory.\nPrices are integers in the smallest currency unit and live on variants.",
1297
+ "method": "GET",
1298
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants",
1299
+ "inputSchema": {
1300
+ "type": "object",
1301
+ "properties": {
1302
+ "store_id": {
1303
+ "type": "string",
1304
+ "description": "The ID of the store that owns the product."
1305
+ },
1306
+ "product_id": {
1307
+ "type": "string",
1308
+ "description": "The ID of the product to list variants for."
1309
+ },
1310
+ "page": {
1311
+ "type": "integer",
1312
+ "description": "Page number"
1313
+ }
1314
+ },
1315
+ "required": [
1316
+ "store_id",
1317
+ "product_id"
1318
+ ]
1319
+ },
1320
+ "security": [
1321
+ {
1322
+ "apiToken": []
1323
+ }
1324
+ ],
1325
+ "group": "ecommerce"
1326
+ },
1327
+ {
1328
+ "name": "ecommerce_createAProductVariantV1",
1329
+ "title": "Create a product variant",
1330
+ "annotations": {
1331
+ "title": "Create a product variant",
1332
+ "readOnlyHint": false,
1333
+ "destructiveHint": false
1334
+ },
1335
+ "description": "Add a variant to a product along one or more option dimensions (e.g. Size, Color). Options\nmissing from the product are created automatically; provide a value for every option the\nproduct already has. Prices are integers in the smallest currency unit and default to the\nstore currency. Returns the created variant.",
1336
+ "method": "POST",
1337
+ "path": "/api/ecommerce/v1/stores/{store_id}/products/{product_id}/variants",
1338
+ "inputSchema": {
1339
+ "type": "object",
1340
+ "properties": {
1341
+ "store_id": {
1342
+ "type": "string",
1343
+ "description": "The ID of the store that owns the product."
1344
+ },
1345
+ "product_id": {
1346
+ "type": "string",
1347
+ "description": "The ID of the product to add the variant to."
1348
+ },
1349
+ "title": {
1350
+ "type": "string",
1351
+ "description": "The variant title. Defaults to the option values joined with ' / ' (e.g. 'Red / L')."
1352
+ },
1353
+ "sku": {
1354
+ "type": "string",
1355
+ "description": "The variant SKU."
1356
+ },
1357
+ "options": {
1358
+ "type": "array",
1359
+ "description": "Option name/value pairs that distinguish this variant, e.g. [{name: Size, value: M}]. Options missing from the product are created; provide a value for every option the product already has.",
1360
+ "items": {
1361
+ "type": "object",
1362
+ "description": "options parameter",
1363
+ "properties": {
1364
+ "name": {
1365
+ "type": "string",
1366
+ "description": "Option name, e.g. Size."
1367
+ },
1368
+ "value": {
1369
+ "type": "string",
1370
+ "description": "Option value for this variant, e.g. M."
1371
+ }
1372
+ },
1373
+ "required": [
1374
+ "name",
1375
+ "value"
1376
+ ]
1377
+ }
1378
+ },
1379
+ "prices": {
1380
+ "type": "array",
1381
+ "description": "Prices per currency. Amounts are integers in the smallest currency unit. A free item is amount: 0.",
1382
+ "items": {
1383
+ "type": "object",
1384
+ "description": "prices parameter",
1385
+ "properties": {
1386
+ "amount": {
1387
+ "type": "integer",
1388
+ "description": "Price in the smallest currency unit (e.g. cents)."
1389
+ },
1390
+ "sale_amount": {
1391
+ "type": "integer",
1392
+ "description": "Optional sale price in the smallest currency unit; must be lower than amount."
1393
+ },
1394
+ "currency": {
1395
+ "type": "string",
1396
+ "description": "ISO 4217 currency code. Defaults to the store's default currency when omitted."
1397
+ }
1398
+ },
1399
+ "required": [
1400
+ "amount"
1401
+ ]
1402
+ }
1403
+ },
1404
+ "inventory_quantity": {
1405
+ "type": "integer",
1406
+ "description": "Units in stock. Defaults to 0."
1407
+ },
1408
+ "manage_inventory": {
1409
+ "type": "boolean",
1410
+ "description": "Whether stock is tracked for this variant. Defaults to false."
1411
+ }
1412
+ },
1413
+ "required": [
1414
+ "store_id",
1415
+ "product_id",
1416
+ "options"
1417
+ ]
1418
+ },
1419
+ "security": [
1420
+ {
1421
+ "apiToken": []
1422
+ }
1423
+ ],
1424
+ "group": "ecommerce"
1425
+ }
1426
+ ];