[{"data":1,"prerenderedAt":1915},["ShallowReactive",2],{"shop-api-document":3,"shop-agent-surface":830},{"openapi":4,"info":5,"servers":11,"x-complete-document":15,"x-write-document":16,"tags":17,"security":33,"paths":36,"components":264},"3.0.3",{"title":6,"version":7,"description":8,"license":9},"Shopayla shop API","1.0.0","The read only API a shop reaches with its own key.\n\nA shop mints a key on the API keys screen of the owner portal, and its own software uses it\nto read that shop: products, orders, subscriptions and the shipping setup.\n\nA key authenticates a shop, not a person. It carries a set of abilities, which are the same\npermission codes a staff role carries, and it can never read a different shop.\n\nVersion 1 is read only. Every endpoint is a GET.\n\nThe prose guide, with worked `curl` examples and the full error table, is published at\nhttps:\u002F\u002Fshopayla.co\u002Fdocs\u002Fapi.\n",{"name":10},"Proprietary",[12],{"url":13,"description":14},"https:\u002F\u002Fshopayla.co\u002Fapi\u002Fv1","Production","https:\u002F\u002Fshopayla.co\u002Fapi\u002Fopenapi.key.json","https:\u002F\u002Fshopayla.co\u002Fapi\u002Fmcp\u002Fopenapi.json",[18,21,24,27,30],{"name":19,"description":20},"Shop","The shop the key belongs to.",{"name":22,"description":23},"Catalogue","Products, including their choices.",{"name":25,"description":26},"Orders","Orders taken by the shop.",{"name":28,"description":29},"Subscriptions","Standing instructions to charge again.",{"name":31,"description":32},"Shipping","Where the shop posts a parcel, and what it charges.",[34],{"bearerKey":35},[],{"\u002Fshop":37,"\u002Fproducts":65,"\u002Fproducts\u002F{id}":102,"\u002Forders":134,"\u002Forders\u002F{reference}":175,"\u002Fsubscriptions":203,"\u002Fshipping":241},{"get":38},{"tags":39,"operationId":40,"summary":41,"description":42,"security":43,"responses":46,"x-ability":64},[19],"getShop","The shop","The shop the key belongs to, as a customer of it would know it.",[44],{"bearerKey":45},[],{"200":47,"401":58,"403":60,"429":62},{"description":48,"content":49},"The shop.",{"application\u002Fjson":50},{"schema":51},{"type":52,"required":53,"properties":55},"object",[54],"data",{"data":56},{"$ref":57},"#\u002Fcomponents\u002Fschemas\u002FShop",{"$ref":59},"#\u002Fcomponents\u002Fresponses\u002FUnauthorised",{"$ref":61},"#\u002Fcomponents\u002Fresponses\u002FForbidden",{"$ref":63},"#\u002Fcomponents\u002Fresponses\u002FRateLimited","settings.view",{"get":66},{"tags":67,"operationId":68,"summary":69,"description":70,"security":71,"parameters":74,"responses":81,"x-ability":101},[22],"listProducts","The catalogue, paged","Every product, with the whole product on each row, so a script pulling stock into another\nsite needs no second call per row.\n",[72],{"bearerKey":73},[],[75,77,79],{"$ref":76},"#\u002Fcomponents\u002Fparameters\u002FPerPage",{"$ref":78},"#\u002Fcomponents\u002Fparameters\u002FPage",{"$ref":80},"#\u002Fcomponents\u002Fparameters\u002FUpdatedSince",{"200":82,"401":96,"403":97,"422":98,"429":100},{"description":83,"content":84},"A page of the catalogue.",{"application\u002Fjson":85},{"schema":86},{"allOf":87},[88,90],{"$ref":89},"#\u002Fcomponents\u002Fschemas\u002FListEnvelope",{"type":52,"properties":91},{"data":92},{"type":93,"items":94},"array",{"$ref":95},"#\u002Fcomponents\u002Fschemas\u002FProduct",{"$ref":59},{"$ref":61},{"$ref":99},"#\u002Fcomponents\u002Fresponses\u002FInvalidParameter",{"$ref":63},"products.view",{"get":103},{"tags":104,"operationId":105,"summary":106,"description":107,"security":108,"parameters":111,"responses":120,"x-ability":101},[22],"getProduct","One product","One product, in the same shape as a row of the list.",[109],{"bearerKey":110},[],[112],{"name":113,"in":114,"required":115,"description":116,"schema":117},"id","path",true,"The product id.",{"type":118,"example":119},"integer",7,{"200":121,"401":129,"403":130,"404":131,"429":133},{"description":122,"content":123},"The product.",{"application\u002Fjson":124},{"schema":125},{"type":52,"required":126,"properties":127},[54],{"data":128},{"$ref":95},{"$ref":59},{"$ref":61},{"$ref":132},"#\u002Fcomponents\u002Fresponses\u002FNotFound",{"$ref":63},{"get":135},{"tags":136,"operationId":137,"summary":138,"security":139,"parameters":142,"responses":157,"x-ability":174},[25],"listOrders","The orders, paged",[140],{"bearerKey":141},[],[143,144,145,146],{"$ref":76},{"$ref":78},{"$ref":80},{"name":147,"in":148,"required":149,"description":150,"schema":151},"status","query",false,"Only orders in this state.",{"type":152,"enum":153},"string",[154,155,156],"pending","paid","cancelled",{"200":158,"401":170,"403":171,"422":172,"429":173},{"description":159,"content":160},"A page of orders, each carrying its lines, the choice on each line, the shipping it was charged and its totals.",{"application\u002Fjson":161},{"schema":162},{"allOf":163},[164,165],{"$ref":89},{"type":52,"properties":166},{"data":167},{"type":93,"items":168},{"$ref":169},"#\u002Fcomponents\u002Fschemas\u002FOrder",{"$ref":59},{"$ref":61},{"$ref":99},{"$ref":63},"orders.view",{"get":176},{"tags":177,"operationId":178,"summary":179,"description":180,"security":181,"parameters":184,"responses":190,"x-ability":174},[25],"getOrder","One order","One order, addressed by its reference: the string both sides say out loud. The option label\non a line and the shipping rate label were copied onto the order when it was placed, not\nread from the live catalogue, so an order read back always says what was agreed.\n",[182],{"bearerKey":183},[],[185],{"name":186,"in":114,"required":115,"description":187,"schema":188},"reference","The order reference, such as `ORD-261005-W2VVBJ`.",{"type":152,"example":189},"ORD-261005-W2VVBJ",{"200":191,"401":199,"403":200,"404":201,"429":202},{"description":192,"content":193},"The order.",{"application\u002Fjson":194},{"schema":195},{"type":52,"required":196,"properties":197},[54],{"data":198},{"$ref":169},{"$ref":59},{"$ref":61},{"$ref":132},{"$ref":63},{"get":204},{"tags":205,"operationId":206,"summary":207,"description":208,"security":209,"parameters":212,"responses":223,"x-ability":240},[28],"listSubscriptions","The subscribers and their state, paged","There is no by id read. Read the list and filter by state.",[210],{"bearerKey":211},[],[213,214,215,216],{"$ref":76},{"$ref":78},{"$ref":80},{"name":147,"in":148,"required":149,"description":217,"schema":218},"Only subscriptions in this state.",{"type":152,"enum":219},[220,221,156,222],"active","paused","failed",{"200":224,"401":236,"403":237,"422":238,"429":239},{"description":225,"content":226},"A page of subscriptions.",{"application\u002Fjson":227},{"schema":228},{"allOf":229},[230,231],{"$ref":89},{"type":52,"properties":232},{"data":233},{"type":93,"items":234},{"$ref":235},"#\u002Fcomponents\u002Fschemas\u002FSubscription",{"$ref":59},{"$ref":61},{"$ref":99},{"$ref":63},"subscriptions.view",{"get":242},{"tags":243,"operationId":244,"summary":245,"description":246,"security":247,"responses":250,"x-ability":263},[31],"getShipping","The whole shipping setup","The zones, the rates inside each zone, the bands of a table rate, the class overrides and\nthe handling classes. This read never installs a default zone or rate: a shop that has set\nnothing is answered honestly with nothing, because a read only endpoint must not write.\n",[248],{"bearerKey":249},[],{"200":251,"401":260,"403":261,"429":262},{"description":252,"content":253},"The shipping setup.",{"application\u002Fjson":254},{"schema":255},{"type":52,"required":256,"properties":257},[54],{"data":258},{"$ref":259},"#\u002Fcomponents\u002Fschemas\u002FShippingSetup",{"$ref":59},{"$ref":61},{"$ref":63},"shipping.view",{"securitySchemes":265,"parameters":270,"schemas":288,"responses":772},{"bearerKey":266},{"type":267,"scheme":268,"description":269},"http","bearer","The shop's key, sent whole: `Authorization: Bearer ks_live_\u003Cprefix>_\u003Csecret>`. Do not also\nsend `X-Shop-Id`: a key decides its own shop, and a header naming a different one is\nrefused with `400` rather than quietly answered. A portal session token is refused here.\n",{"PerPage":271,"Page":278,"UpdatedSince":282},{"name":272,"in":148,"required":149,"description":273,"schema":274},"per_page","How many rows per page. Default 20, capped at 100. Asking for more than the cap is answered with the cap rather than refused.",{"type":118,"minimum":275,"default":276,"maximum":277},1,20,100,{"name":279,"in":148,"required":149,"description":280,"schema":281},"page","Which page to read, counting from 1.",{"type":118,"minimum":275,"default":275},{"name":283,"in":148,"required":149,"description":284,"schema":285},"updated_since","An ISO 8601 timestamp. Only rows changed at or after it are returned. The comparison is inclusive. Poll with this instead of reading the whole shop.",{"type":152,"format":286,"example":287},"date-time","2026-10-01T00:00:00+08:00",{"ListEnvelope":289,"PageMeta":295,"Shop":307,"Product":328,"HandlingClass":420,"ProductOption":426,"Order":450,"Customer":488,"ShippingCharge":496,"Totals":512,"OrderLine":531,"Subscription":551,"ShippingSetup":603,"ShippingZone":646,"ShippingRate":668,"ShippingBand":700,"ClassOverride":709,"ShippingClass":715,"RateType":724,"TableBase":733,"Error":745},{"type":52,"required":290,"properties":292},[291],"meta",{"meta":293},{"$ref":294},"#\u002Fcomponents\u002Fschemas\u002FPageMeta",{"type":52,"required":296,"properties":300},[297,272,298,299],"current_page","last_page","total",{"current_page":301,"per_page":302,"last_page":303,"total":305},{"type":118,"example":275},{"type":118,"example":276},{"type":118,"example":304},3,{"type":118,"example":306},47,{"type":52,"required":308,"properties":315},[309,310,311,312,313,314],"name","slug","domain","currency","timezone","created_at",{"name":316,"slug":318,"domain":320,"currency":323,"timezone":325,"created_at":327},{"type":152,"example":317},"New Store",{"type":152,"example":319},"demo-new",{"type":152,"description":321,"example":322},"The host the storefront answers on, custom domain or platform subdomain.","demo-new.shopayla.co",{"type":152,"example":324},"MYR",{"type":152,"example":326},"Asia\u002FKuala_Lumpur",{"type":152,"format":286,"nullable":115},{"type":52,"required":329,"properties":348},[113,309,310,330,220,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,314,347],"description","kind","fulfilment","billing","requires_shipping","price_minor","price","compare_at_minor","compare_at","on_sale","stock","weight_grams","weight","handling_class","external_url","external_button_label","options","updated_at",{"id":349,"name":350,"slug":352,"description":354,"active":355,"kind":357,"fulfilment":365,"billing":373,"billing_interval":378,"billing_interval_count":386,"requires_shipping":388,"price_minor":390,"price":392,"compare_at_minor":395,"compare_at":397,"on_sale":400,"stock":402,"weight_grams":404,"weight":406,"handling_class":408,"external_url":410,"external_button_label":412,"options":413,"created_at":417,"updated_at":418},{"type":118,"example":119},{"type":152,"example":351},"Kemeja Linen",{"type":152,"example":353},"kemeja-linen",{"type":152,"nullable":115},{"type":356},"boolean",{"type":152,"description":358,"enum":359},"The shape of the product.",[360,361,362,363,364],"simple","variable","grouped","bundle","chained",{"type":152,"description":366,"enum":367},"How it is delivered.",[368,369,370,371,372],"ship","virtual","download","external","booking",{"type":152,"description":374,"enum":375},"Whether it is charged once or repeatedly.",[376,377],"once","recurring",{"type":152,"nullable":115,"description":379,"enum":380},"Only when billing is `recurring`.",[381,382,383,384,385],"day","week","month","year",null,{"type":118,"nullable":115,"description":387},"Only when billing is `recurring`. Every how many intervals.",{"type":356,"description":389},"Derived from fulfilment, never stored, so it cannot disagree with it.",{"type":118,"nullable":115,"description":391},"The price in sen. Null means no price was set, which is not a free item.",{"type":152,"nullable":115,"description":393,"example":394},"The same amount formatted for display. Null for an external listing.","RM 39.00",{"type":118,"nullable":115,"description":396},"The older price in sen, when the shop has reduced the product. Null means no reduction, which is not the same as an older price of zero. The price the shopper pays is `price_minor`, so nothing here is ever charged.",{"type":152,"nullable":115,"description":398,"example":399},"The older price formatted for a screen, crossed out beside `price`. Null when there is no reduction to draw, or when the shop switched the crossing out off.","RM 99.00",{"type":356,"description":401},"Whether `compare_at_minor` is above `price_minor`. Derived, never stored, so it cannot disagree with the two numbers beside it. Ask this rather than comparing them yourself.",{"type":118,"nullable":115,"description":403},"How many are on hand when the product is bought as its own line. Null means the shop does not count it, which is not the same as none left: a product nobody counts sells in any quantity. A product whose choices carry the counts reports null here and the counts on its options instead.",{"type":118,"nullable":115,"description":405},"Null means nothing was ever weighed, which is not zero grams.",{"type":152,"nullable":115,"example":407},"250 g",{"$ref":409},"#\u002Fcomponents\u002Fschemas\u002FHandlingClass",{"type":152,"nullable":115,"description":411},"Only meaningful for an external listing.",{"type":152,"nullable":115,"description":411},{"type":93,"description":414,"items":415},"The choices the product offers. Empty for a product with none.",{"$ref":416},"#\u002Fcomponents\u002Fschemas\u002FProductOption",{"type":152,"format":286,"nullable":115},{"type":152,"format":286,"nullable":115,"description":419},"What `updated_since` compares against.",{"type":52,"nullable":115,"required":421,"properties":422},[113,309],{"id":423,"name":424},{"type":118},{"type":152,"example":425},"Bulky",{"type":52,"required":427,"properties":432},[113,428,429,335,336,337,338,430,340,341,342,431,220],"group_label","label","sku","sort",{"id":433,"group_label":434,"label":436,"price_minor":438,"price":440,"compare_at_minor":441,"compare_at":443,"sku":444,"stock":445,"weight_grams":446,"weight":447,"sort":448,"active":449},{"type":118},{"type":152,"example":435},"Size",{"type":152,"example":437},"Medium",{"type":118,"nullable":115,"description":439},"Null means the choice costs what the product costs; it is not a missing price.",{"type":152,"nullable":115},{"type":118,"nullable":115,"description":442},"A struck through price, when the shop set one.",{"type":152,"nullable":115},{"type":152,"nullable":115},{"type":118,"nullable":115},{"type":118,"nullable":115},{"type":152,"nullable":115},{"type":118},{"type":356},{"type":52,"required":451,"properties":461},[186,147,452,453,454,455,456,457,458,459,460,347],"payment_method","payment_method_label","customer","shipping","totals","lines","placed_at","paid_at","cancelled_at",{"reference":462,"status":463,"payment_method":465,"payment_method_label":473,"customer":475,"shipping":477,"totals":479,"lines":481,"placed_at":484,"paid_at":485,"cancelled_at":486,"updated_at":487},{"type":152,"example":189},{"type":152,"enum":464},[154,155,156],{"type":152,"nullable":115,"enum":466},[467,468,469,470,471,472,385],"bank_transfer","duitnow","cod","whatsapp","card","subscription",{"type":152,"nullable":115,"example":474},"DuitNow QR",{"$ref":476},"#\u002Fcomponents\u002Fschemas\u002FCustomer",{"$ref":478},"#\u002Fcomponents\u002Fschemas\u002FShippingCharge",{"$ref":480},"#\u002Fcomponents\u002Fschemas\u002FTotals",{"type":93,"items":482},{"$ref":483},"#\u002Fcomponents\u002Fschemas\u002FOrderLine",{"type":152,"format":286,"nullable":115},{"type":152,"format":286,"nullable":115},{"type":152,"format":286,"nullable":115},{"type":152,"format":286,"nullable":115,"description":419},{"type":52,"required":489,"properties":492},[309,490,491],"email","phone",{"name":493,"email":494,"phone":495},{"type":152,"nullable":115},{"type":152,"nullable":115},{"type":152,"nullable":115},{"type":52,"nullable":115,"required":497,"description":503,"properties":504},[498,499,500,501,502],"address","rate_label","zone_id","amount_minor","amount","The shipping the order was charged, with the rate label as it was copied onto the order.",{"address":505,"rate_label":506,"zone_id":508,"amount_minor":509,"amount":510},{"type":152,"nullable":115},{"type":152,"nullable":115,"example":507},"Pos laju",{"type":118,"nullable":115},{"type":118},{"type":152,"example":511},"RM 8.00",{"type":52,"required":513,"properties":520},[514,515,516,455,517,518,519,299],"subtotal_minor","subtotal","shipping_minor","tax_minor","tax","total_minor",{"subtotal_minor":521,"subtotal":522,"shipping_minor":523,"shipping":524,"tax_minor":525,"tax":526,"total_minor":527,"total":529},{"type":118},{"type":152},{"type":118},{"type":152},{"type":118},{"type":152},{"type":118,"example":528},9700,{"type":152,"example":530},"RM 97.00",{"type":52,"required":532,"properties":539},[309,533,534,535,536,537,538,341,342],"option_label","quantity","unit_price_minor","unit_price","line_total_minor","line_total",{"name":540,"option_label":541,"quantity":544,"unit_price_minor":545,"unit_price":546,"line_total_minor":547,"line_total":548,"weight_grams":549,"weight":550},{"type":152},{"type":152,"nullable":115,"description":542,"example":543},"The choice that was bought, copied onto the line. Null for a product with no choices.","Size: Medium",{"type":118},{"type":118},{"type":152},{"type":118},{"type":152},{"type":118,"nullable":115},{"type":152,"nullable":115},{"type":52,"required":552,"properties":569},[113,553,554,555,556,557,558,534,501,502,559,560,561,147,562,563,564,565,566,567,568,347],"order_reference","customer_name","customer_email","product_id","product_name","product_missing","interval","interval_count","cadence","state","started_at","next_charge_at","next_charge_label","periods_charged","attempts","last_error",{"id":570,"order_reference":571,"customer_name":573,"customer_email":574,"product_id":575,"product_name":576,"product_missing":578,"quantity":580,"amount_minor":581,"amount":582,"interval":583,"interval_count":585,"cadence":586,"status":589,"state":591,"started_at":594,"next_charge_at":595,"next_charge_label":597,"periods_charged":599,"attempts":600,"last_error":601,"updated_at":602},{"type":118},{"type":152,"nullable":115,"description":572},"The order that started it.",{"type":152,"nullable":115},{"type":152},{"type":118,"nullable":115},{"type":152,"description":577},"Copied at the sale, so a later rename does not rewrite what was agreed.",{"type":356,"description":579},"True when the product behind the subscription has since been removed.",{"type":118},{"type":118},{"type":152},{"type":152,"enum":584},[381,382,383,384],{"type":118},{"type":152,"description":587,"example":588},"The cadence in words, decided by the server.","Every month",{"type":152,"enum":590},[220,221,156,222],{"type":152,"description":592,"example":593},"The state in words, decided by the server.","Active",{"type":152,"format":286,"nullable":115},{"type":152,"format":286,"nullable":115,"description":596},"Present for every live subscription, and for nothing else.",{"type":152,"nullable":115,"description":598},"When it will next charge, in words, written by the server.",{"type":118},{"type":118},{"type":152,"nullable":115},{"type":152,"format":286,"nullable":115,"description":419},{"type":52,"required":604,"properties":613},[605,312,606,607,608,609,610,498,611,612],"shop","zones","classes","rate_types","table_bases","has_rates","outer_box_capacity","effective_outer_box_capacity",{"shop":614,"currency":620,"zones":621,"classes":624,"address":627,"rate_types":630,"table_bases":634,"has_rates":638,"outer_box_capacity":640,"effective_outer_box_capacity":643},{"type":52,"required":615,"properties":617},[309,616],"host",{"name":618,"host":619},{"type":152},{"type":152},{"type":152,"example":324},{"type":93,"items":622},{"$ref":623},"#\u002Fcomponents\u002Fschemas\u002FShippingZone",{"type":93,"items":625},{"$ref":626},"#\u002Fcomponents\u002Fschemas\u002FShippingClass",{"type":52,"description":628,"additionalProperties":629},"Where the shop ships from. Partial addresses are returned as saved; booking refuses missing parts later.",{"type":152,"nullable":115},{"type":93,"description":631,"items":632},"The shapes a rate can take, with the words to show. Sent so a client renders its pickers from what the API knows.",{"$ref":633},"#\u002Fcomponents\u002Fschemas\u002FRateType",{"type":93,"description":635,"items":636},"What a table rate measures the basket in.",{"$ref":637},"#\u002Fcomponents\u002Fschemas\u002FTableBase",{"type":356,"description":639},"Whether the shop can price a parcel at all. False when every zone has no rate.",{"type":118,"minimum":275,"maximum":641,"description":642},500,"How many shippable units one outer box is planned to hold when fulfilment packs orders.",{"type":118,"minimum":644,"description":645},0,"The capacity packing uses after shop rules; may differ when the saved value is unset.",{"type":52,"required":647,"properties":652},[113,309,648,649,650,431,651],"is_default","states","postcode_prefixes","rates",{"id":653,"name":654,"is_default":656,"states":658,"postcode_prefixes":662,"sort":664,"rates":665},{"type":118},{"type":152,"example":655},"Peninsular",{"type":356,"description":657},"The zone that catches the rest. A shop has one.",{"type":93,"items":659,"example":660},{"type":152},[661],"Selangor",{"type":93,"items":663},{"type":152},{"type":118},{"type":93,"items":666},{"$ref":667},"#\u002Fcomponents\u002Fschemas\u002FShippingRate",{"type":52,"required":669,"properties":675},[113,309,670,501,671,672,431,673,674],"type","free_over_minor","table_basis","bands","class_overrides",{"id":676,"name":677,"type":678,"amount_minor":684,"free_over_minor":686,"table_basis":688,"sort":691,"bands":692,"class_overrides":696},{"type":118},{"type":152,"example":507},{"type":152,"enum":679},[680,681,682,683],"flat","free_over","table","pickup",{"type":118,"nullable":115,"description":685},"Null for a table rate, which is priced from its bands, and for pickup.",{"type":118,"nullable":115,"description":687},"Only for a `free_over` rate.",{"type":152,"nullable":115,"enum":689,"description":690},[342,534,515,385],"Only for a `table` rate.",{"type":118},{"type":93,"description":693,"items":694},"Only for a `table` rate. The bounds are inclusive and either may be null.",{"$ref":695},"#\u002Fcomponents\u002Fschemas\u002FShippingBand",{"type":93,"description":697,"items":698},"What this rate charges instead of its own amount when a class is in the basket.",{"$ref":699},"#\u002Fcomponents\u002Fschemas\u002FClassOverride",{"type":52,"required":701,"properties":704},[113,702,703,501],"min_value","max_value",{"id":705,"min_value":706,"max_value":707,"amount_minor":708},{"type":118},{"type":118,"nullable":115},{"type":118,"nullable":115},{"type":118},{"type":52,"required":710,"properties":712},[711,501],"class_id",{"class_id":713,"amount_minor":714},{"type":118},{"type":118},{"type":52,"required":716,"properties":718},[113,309,431,717],"products_count",{"id":719,"name":720,"sort":721,"products_count":722},{"type":118},{"type":152,"example":425},{"type":118},{"type":118,"description":723},"How many products are on it, so removing one is an informed choice.",{"type":52,"required":725,"properties":728},[726,429,727],"value","hint",{"value":729,"label":731,"hint":732},{"type":152,"enum":730},[680,681,682,683],{"type":152},{"type":152},{"type":52,"required":734,"properties":736},[726,429,735],"unit",{"value":737,"label":739,"unit":740},{"type":152,"enum":738},[342,534,515],{"type":152},{"type":152,"enum":741},[742,743,744],"grams","items","sen",{"type":52,"required":746,"description":749,"properties":750,"example":770},[747,748],"code","message","Every failure has this shape. `field` is present when one field is to blame.",{"code":751,"message":763,"field":764,"permission":766,"label":768},{"type":152,"enum":752},[753,754,755,756,757,758,759,760,761,762],"shop_mismatch","missing_api_key","invalid_api_key","revoked_api_key","expired_api_key","forbidden","not_found","method_not_allowed","invalid_parameter","rate_limited",{"type":152},{"type":152,"nullable":115,"description":765},"The query parameter or path parameter at fault.",{"type":152,"nullable":115,"description":767},"On a `forbidden`, the ability the endpoint needed.",{"type":152,"nullable":115,"description":769},"On a `forbidden`, what that ability allows, in words.",{"code":761,"message":771,"field":272},"The per page field must be an integer.",{"Unauthorised":773,"Forbidden":792,"NotFound":800,"InvalidParameter":807,"RateLimited":812},{"description":774,"content":775},"The key is missing, unknown, revoked or expired. A `401` is never a reason to retry: check\nthe key is right, that it has not been revoked and that it has not expired.\n",{"application\u002Fjson":776},{"schema":777,"examples":779},{"$ref":778},"#\u002Fcomponents\u002Fschemas\u002FError",{"missing":780,"unknown":783,"revoked":786,"expired":789},{"value":781},{"code":754,"message":782},"This route needs a shop API key. Send it as a bearer token.",{"value":784},{"code":755,"message":785},"The shop API key is not recognised. A portal session token will not work here.",{"value":787},{"code":756,"message":788},"This shop API key has been revoked.",{"value":790},{"code":757,"message":791},"This shop API key has expired.",{"description":793,"content":794},"The key does not carry the ability this endpoint needs. The same refusal a member of the shop without the permission would get.",{"application\u002Fjson":795},{"schema":796,"example":797},{"$ref":778},{"code":758,"message":798,"permission":101,"label":799},"You do not have access to this action.","see products and their numbers",{"description":801,"content":802},"No such row in this shop. A row in a different shop is most often the cause, since a key only ever sees its own.",{"application\u002Fjson":803},{"schema":804,"example":805},{"$ref":778},{"code":759,"message":806,"field":385},"That resource does not exist in this shop.",{"description":808,"content":809},"A query parameter was not valid.",{"application\u002Fjson":810},{"schema":811},{"$ref":778},{"description":813,"headers":814,"content":825},"More than 60 requests in a minute for this key. The allowance is counted per key, so one\nbusy key does not spend another's. Wait the seconds in `Retry-After` before sending again.\n",{"Retry-After":815,"X-RateLimit-Limit":818,"X-RateLimit-Remaining":822},{"description":816,"schema":817},"The number of seconds to wait before trying again.",{"type":118},{"description":819,"schema":820},"The ceiling.",{"type":118,"example":821},60,{"description":823,"schema":824},"How many requests are left in this window.",{"type":118},{"application\u002Fjson":826},{"schema":827,"example":828},{"$ref":778},{"code":762,"message":829},"Too many requests. Back off and try again.",{"protocol":831,"auth":858,"abilities":862,"tools":889,"mirrored_tools":923,"read_tools":1392,"operations":1412,"boundary":1862},{"name":832,"transport":267,"jsonrpc":833,"version":834,"server":835,"endpoint":852,"methods":853},"Model Context Protocol","2.0","2025-06-18",{"name":836,"version":7,"icons":837,"links":849},"kedaistore-storefront",[838,844],{"src":839,"mimeType":840,"sizes":841,"theme":843},"https:\u002F\u002Fshopayla.co\u002Fbrand\u002Fkedaistore-logo-white-1024x768.png","image\u002Fpng",[842],"1024x768","light",{"src":845,"mimeType":846,"sizes":847,"theme":843},"https:\u002F\u002Fshopayla.co\u002Fbrand\u002Fkedaistore-logo-white-1024x768.svg","image\u002Fsvg+xml",[848],"any",{"privacy_policy":850,"terms_of_service":851},"https:\u002F\u002Fshopayla.co\u002Fapp\u002Fpolicy","https:\u002F\u002Fshopayla.co\u002Fapp\u002Ftos","https:\u002F\u002Fshopayla.co\u002Fapi\u002Fmcp",[854,855,856,857],"initialize","ping","tools\u002Flist","tools\u002Fcall",{"scheme":859,"header":860,"detail":861},"Bearer","Authorization: Bearer \u003Ckey>","A shop API key from the API keys screen. A portal session token will not work here, and neither will a key on a portal route: the two doors are refused at each other.",[863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888],"ai.use","analytics.view","appearance.manage","appearance.view","catalog.manage","catalog.view","categories.manage","fulfilment.manage","geo.view","live.broadcast","live.manage","loyalty.manage","marketing.manage","membership.manage","menus.manage","orders.manage","pages.manage","posts.manage","products.manage","promotions.manage","reviews.moderate","settings.manage","shipping.manage","subscriptions.manage","tax.manage","wallet.view",[890,893,896,899,902,905,908,911,914,917,920],{"name":891,"description":892,"ability":866},"get_shop_theme","Read the shop's current appearance. Returns the LAYOUT theme the shop presents, the theme\nrow it is wearing (its id, key, status and version), the tokens a shopper is served, that\nrow's stored tokens and validated composition, and the shop's whole theme library with\nwhich row is active.\n\nCall this first to learn what a shop already looks like before composing anything. It\nreads only the shop the caller's token belongs to; there is no argument for naming a\ndifferent shop. Pass `theme_id` only to inspect a specific row from the library that this\nsame call returns.",{"name":894,"description":895,"ability":866},"list_theme_options","List every appearance token this platform accepts: name, kind, limits and whether it becomes a CSS variable on the storefront. Use before `mcp_shop_appearance_tokens` or `save_shop_theme_draft` token fields.",{"name":897,"description":898,"ability":866},"validate_theme_options","Validate candidate tokens and\u002For settings without saving. Returns field-keyed errors or `valid: true`. Same allowlists as `mcp_shop_appearance_tokens`.",{"name":900,"description":901,"ability":866},"list_sections","List the section types a shop may place on its home page — the component library the\nplatform owns. Each entry carries the type key, a human label, and the fields it accepts\n(each with its kind and limits). Also returns the five link types and the maximum number\nof sections one page may hold.\n\nA shop arranges these components; it never writes one. Use `get_section_schema` for one\ntype's fields in detail before composing, and `save_shop_theme_draft` to write a\ncomposition built from them.",{"name":903,"description":904,"ability":866},"get_section_schema","Return one section type's field schema: the fields it accepts, each with its kind (text,\ntextarea, image, link, select, number, bool, list), its limits, whether it is required,\nand its default when it has one.\n\n`type` must be one of the keys `list_sections` returns. A type the platform does not ship\nis refused rather than guessed at.",{"name":906,"description":907,"ability":865},"save_shop_theme_draft","Validate a home-page composition and write it as a DRAFT for this shop.\n\nThe draft is invisible to shoppers: this tool never publishes and never changes which\ntheme the shop is wearing. It writes a new draft row by default, or updates an existing\nrow when you pass `theme_id`. Saving a draft over the row the shop is currently WEARING\nwill take that row out of service (it becomes a draft) — reach for this only on a row you\nmean to work on, and publish it deliberately once a person has approved it.\n\n`sections` is the whole composition, in order, built from the types `list_sections`\nreturns. Each section is `{\"type\": \"...\", \"fields\": { ... }}`, where the fields are exactly\nthat type's schema. `tokens` is optional and must use only the allowlisted token names —\nunknown names and bad values are refused, not dropped. A `javascript:` link, an unknown\nsection type, an unknown field and another shop's media id are all refused whole, with the\nplatform validator's own field-keyed errors.",{"name":909,"description":910,"ability":866},"preview_shop_theme","Render this shop's real storefront with a candidate appearance applied, WITHOUT saving\nanything. Pass candidate `tokens` and\u002For a candidate `sections`; anything you omit falls\nback to what the shop already has, so previewing only a colour still shows the shop's own\nhome page.\n\nThis writes no draft and changes nothing — it is the safe way to look at work before it is\nsaved or published. The tool does NOT return the page's HTML (a composed storefront page\nis far too large for a tool result); it returns a short description of what was rendered —\nthe layout used, how many sections and tokens were applied, the size of the page — so you\ncan confirm the candidate renders. A candidate a save would refuse (an unknown section\ntype, a `javascript:` link, a bad token) is refused here too, with the same errors.",{"name":912,"description":913,"ability":865},"publish_shop_theme","Publish a theme: make it the one this shop wears, live on its storefront.\n\nThis is the ONLY tool on this surface that puts work in front of shoppers. It publishes\nthe named theme row and points the shop at it in one act, so the change is immediate and\nreaches every visitor. Do NOT call this on your own initiative: call it only when the\nperson you are working for has asked you to publish, and only after they have seen the\nresult through `preview_shop_theme`. A draft is where your work belongs until a person\nsays otherwise.\n\n`theme_id` is required and must be a row of this shop, from the `library` returned by\n`get_shop_theme`.",{"name":915,"description":916,"ability":865},"generate_shop_theme","Generate a DRAFT shop theme from the owner's own words, using the platform's constrained\nAI writer. Pass the owner's sentence verbatim — whatever language and register it arrived\nin — and a tier:\n\n  tune    the look only: colours, corner rounding and catalogue fonts. Cheap, low risk.\n  compose the look AND an arranged home page drawn from the platform's own sections.\n\nReturns a draft payload: `label`, `tokens`, `sections`, `source = \"ai\"`, `status = \"draft\"`.\nIt writes NOTHING and publishes nothing — the model's answer is a draft by construction.\nIf it should be kept, save it with `save_shop_theme_draft`; a person decides when to\npublish.\n\nThe model may only emit the platform's own section types, allowlisted token names,\ncatalogue font keys and typed links. An answer that names anything else is refused whole,\nnever repaired, and comes back as an error here.",{"name":918,"description":919,"ability":866},"validate_kit","Validate a candidate KIT — tokens plus sections — and return the platform's own verdict,\nwithout saving anything.\n\nUse this while authoring: it runs the exact validator the storefront runs, so a kit that\ncomes back valid will be accepted by `save_shop_theme_draft`, and one that does not comes\nback with the platform's field-keyed errors (`sections.0.fields.cta_link`, and so on).\nPassing `valid: false` is the tool working, not failing — read `section_errors` and\n`token_errors` for what to fix.\n\nSection rules worth remembering: only the types `list_sections` returns; only the fields a\ntype declares; images are ids of THIS shop's own media; and links are typed references\n(`product`\u002F`category`\u002F`page`\u002F`search`\u002F`external`) — an `external` url must be http or\nhttps, so a `javascript:` url is refused.",{"name":921,"description":922,"ability":866},"preview_kit","Render a candidate KIT — tokens plus sections — through this shop's real storefront,\nwithout saving anything.\n\nUse it after `validate_kit` to look at the result on real content. Both `tokens` and\n`sections` are optional; a kit with neither renders the shop as it stands. The candidate\nis validated exactly as a save would be, so a kit a save would refuse is refused here too.\n\nThis writes no draft, activates no theme and changes nothing. It does not return the\npage's HTML (too large for a tool result); it returns a short description of what was\nrendered, so you can confirm the kit draws.",[924,927,930,933,936,939,942,945,948,951,954,957,960,963,966,969,972,975,978,981,984,987,990,993,996,999,1002,1005,1008,1011,1014,1017,1020,1023,1026,1029,1032,1035,1038,1041,1044,1047,1050,1053,1056,1059,1062,1065,1068,1071,1074,1077,1080,1083,1086,1089,1092,1095,1098,1101,1104,1107,1110,1113,1116,1119,1122,1125,1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1167,1170,1173,1176,1179,1182,1185,1188,1191,1194,1197,1200,1203,1206,1209,1212,1215,1218,1221,1224,1227,1230,1233,1236,1239,1242,1245,1248,1251,1254,1257,1260,1263,1266,1269,1272,1275,1278,1281,1284,1287,1290,1293,1296,1299,1302,1305,1308,1311,1314,1317,1320,1323,1326,1329,1332,1335,1338,1341,1344,1347,1350,1353,1356,1359,1362,1365,1368,1371,1374,1377,1380,1383,1386,1389],{"name":925,"description":926,"ability":863},"mcp_ai_credits_purchase","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fcredits\u002Fpurchase on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":928,"description":929,"ability":863},"mcp_ai_conversations","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fconversations on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":931,"description":932,"ability":863},"mcp_ai_conversations_conversation_archive","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fconversations\u002F{conversation}\u002Farchive on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":934,"description":935,"ability":863},"mcp_ai_conversations_conversation_messages","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fconversations\u002F{conversation}\u002Fmessages on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":937,"description":938,"ability":863},"mcp_ai_runs_run_cancel","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fruns\u002F{run}\u002Fcancel on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":940,"description":941,"ability":863},"mcp_ai_dashboards","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fdashboards on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":943,"description":944,"ability":863},"mcp_ai_actions_action_approve","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Factions\u002F{action}\u002Fapprove on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":946,"description":947,"ability":863},"mcp_ai_actions_action_reject","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Factions\u002F{action}\u002Freject on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":949,"description":950,"ability":863},"mcp_ai_catalog_import-preview","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fcatalog\u002Fimport-preview on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":952,"description":953,"ability":863},"mcp_ai_catalog_prepare-import","Call POST \u002Fapi\u002Fmcp\u002Fai\u002Fcatalog\u002Fprepare-import on your own shop. Requires the \"ai.use\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":955,"description":956,"ability":864},"mcp_analytics_goals","Call PUT \u002Fapi\u002Fmcp\u002Fanalytics\u002Fgoals on your own shop. Requires the \"analytics.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":958,"description":959,"ability":871},"mcp_geo_audits","Call POST \u002Fapi\u002Fmcp\u002Fgeo\u002Faudits on your own shop. Requires the \"geo.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":961,"description":962,"ability":875},"mcp_marketing_integrations_provider","Call PUT \u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider} on your own shop. Requires the \"marketing.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":964,"description":965,"ability":875},"mcp_marketing_integrations_provider_enable","Call POST \u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}\u002Fenable on your own shop. Requires the \"marketing.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":967,"description":968,"ability":875},"mcp_marketing_integrations_provider_disable","Call POST \u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}\u002Fdisable on your own shop. Requires the \"marketing.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":970,"description":971,"ability":875},"mcp_marketing_integrations_provider_test","Call POST \u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}\u002Ftest on your own shop. Requires the \"marketing.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":973,"description":974,"ability":875},"mcp_marketing_verification-tags","Call PUT \u002Fapi\u002Fmcp\u002Fmarketing\u002Fverification-tags on your own shop. Requires the \"marketing.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":976,"description":977,"ability":881},"mcp_starter-catalog_purge","Call POST \u002Fapi\u002Fmcp\u002Fstarter-catalog\u002Fpurge on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":979,"description":980,"ability":881},"mcp_products","Call POST \u002Fapi\u002Fmcp\u002Fproducts on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":982,"description":983,"ability":881},"mcp_products_product_update","Call PATCH \u002Fapi\u002Fmcp\u002Fproducts\u002F{product} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":985,"description":986,"ability":881},"mcp_products_product_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fproducts\u002F{product} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":988,"description":989,"ability":881},"mcp_products_product_links","Call POST \u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Flinks on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":991,"description":992,"ability":881},"mcp_products_product_links_link","Call DELETE \u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Flinks\u002F{link} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":994,"description":995,"ability":881},"mcp_products_product_images","Call POST \u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":997,"description":998,"ability":881},"mcp_products_product_images_order","Call POST \u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages\u002Forder on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1000,"description":1001,"ability":881},"mcp_products_product_images_image_update","Call PATCH \u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages\u002F{image} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1003,"description":1004,"ability":881},"mcp_products_product_images_image_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages\u002F{image} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1006,"description":1007,"ability":878},"mcp_orders_bulk","Call POST \u002Fapi\u002Fmcp\u002Forders\u002Fbulk on your own shop. Requires the \"orders.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1009,"description":1010,"ability":878},"mcp_orders_order_paid","Call POST \u002Fapi\u002Fmcp\u002Forders\u002F{order}\u002Fpaid on your own shop. Requires the \"orders.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1012,"description":1013,"ability":878},"mcp_orders_order_cancel","Call POST \u002Fapi\u002Fmcp\u002Forders\u002F{order}\u002Fcancel on your own shop. Requires the \"orders.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1015,"description":1016,"ability":870},"mcp_orders_order_boxes","Call POST \u002Fapi\u002Fmcp\u002Forders\u002F{order}\u002Fboxes on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1018,"description":1019,"ability":870},"mcp_boxes_bulk","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002Fbulk on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1021,"description":1022,"ability":870},"mcp_boxes_book","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002Fbook on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1024,"description":1025,"ability":870},"mcp_boxes_box","Call PATCH \u002Fapi\u002Fmcp\u002Fboxes\u002F{box} on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1027,"description":1028,"ability":870},"mcp_boxes_box_pack","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fpack on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1030,"description":1031,"ability":870},"mcp_boxes_box_ship","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fship on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1033,"description":1034,"ability":870},"mcp_boxes_box_rates","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Frates on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1036,"description":1037,"ability":870},"mcp_boxes_box_book","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fbook on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1039,"description":1040,"ability":870},"mcp_boxes_box_deliver","Call POST \u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fdeliver on your own shop. Requires the \"fulfilment.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1042,"description":1043,"ability":886},"mcp_subscriptions_subscription_pause","Call POST \u002Fapi\u002Fmcp\u002Fsubscriptions\u002F{subscription}\u002Fpause on your own shop. Requires the \"subscriptions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1045,"description":1046,"ability":886},"mcp_subscriptions_subscription_resume","Call POST \u002Fapi\u002Fmcp\u002Fsubscriptions\u002F{subscription}\u002Fresume on your own shop. Requires the \"subscriptions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1048,"description":1049,"ability":886},"mcp_subscriptions_subscription_cancel","Call POST \u002Fapi\u002Fmcp\u002Fsubscriptions\u002F{subscription}\u002Fcancel on your own shop. Requires the \"subscriptions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1051,"description":1052,"ability":883},"mcp_reviews_review_approve","Call POST \u002Fapi\u002Fmcp\u002Freviews\u002F{review}\u002Fapprove on your own shop. Requires the \"reviews.moderate\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1054,"description":1055,"ability":883},"mcp_reviews_review_reject","Call POST \u002Fapi\u002Fmcp\u002Freviews\u002F{review}\u002Freject on your own shop. Requires the \"reviews.moderate\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1057,"description":1058,"ability":869},"mcp_categories","Call POST \u002Fapi\u002Fmcp\u002Fcategories on your own shop. Requires the \"categories.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1060,"description":1061,"ability":869},"mcp_categories_category_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcategories\u002F{category} on your own shop. Requires the \"categories.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1063,"description":1064,"ability":869},"mcp_categories_category_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcategories\u002F{category} on your own shop. Requires the \"categories.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1066,"description":1067,"ability":869},"mcp_categories_media","Call POST \u002Fapi\u002Fmcp\u002Fcategories\u002Fmedia on your own shop. Requires the \"categories.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1069,"description":1070,"ability":868},"mcp_catalog_templates_preview","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Ftemplates\u002Fpreview on your own shop. Requires the \"catalog.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1072,"description":1073,"ability":867},"mcp_catalog_templates_install","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Ftemplates\u002Finstall on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1075,"description":1076,"ability":867},"mcp_catalog_product-types","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fproduct-types on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1078,"description":1079,"ability":867},"mcp_catalog_product-types_productType_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcatalog\u002Fproduct-types\u002F{productType} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1081,"description":1082,"ability":867},"mcp_catalog_product-types_productType_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcatalog\u002Fproduct-types\u002F{productType} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1084,"description":1085,"ability":867},"mcp_catalog_attributes","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1087,"description":1088,"ability":867},"mcp_catalog_attributes_attributeDefinition_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1090,"description":1091,"ability":867},"mcp_catalog_attributes_attributeDefinition_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1093,"description":1094,"ability":867},"mcp_catalog_attributes_attributeDefinition_options","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition}\u002Foptions on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1096,"description":1097,"ability":867},"mcp_catalog_attributes_attributeDefinition_options_attributeOption_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition}\u002Foptions\u002F{attributeOption} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1099,"description":1100,"ability":867},"mcp_catalog_attributes_attributeDefinition_options_attributeOption_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition}\u002Foptions\u002F{attributeOption} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1102,"description":1103,"ability":867},"mcp_catalog_entity-types","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fentity-types on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1105,"description":1106,"ability":867},"mcp_catalog_entity-types_catalogEntityTypeDefinition_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcatalog\u002Fentity-types\u002F{catalogEntityTypeDefinition} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1108,"description":1109,"ability":867},"mcp_catalog_entity-types_catalogEntityTypeDefinition_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcatalog\u002Fentity-types\u002F{catalogEntityTypeDefinition} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1111,"description":1112,"ability":867},"mcp_catalog_entities","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fentities on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1114,"description":1115,"ability":867},"mcp_catalog_entities_catalogEntity_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcatalog\u002Fentities\u002F{catalogEntity} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1117,"description":1118,"ability":867},"mcp_catalog_entities_catalogEntity_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcatalog\u002Fentities\u002F{catalogEntity} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1120,"description":1121,"ability":867},"mcp_catalog_collections","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1123,"description":1124,"ability":868},"mcp_catalog_collections_preview","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002Fpreview on your own shop. Requires the \"catalog.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1126,"description":1127,"ability":867},"mcp_catalog_collections_catalogCollection_update","Call PATCH \u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1129,"description":1130,"ability":867},"mcp_catalog_collections_catalogCollection_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection} on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1132,"description":1133,"ability":867},"mcp_catalog_collections_catalogCollection_products","Call PUT \u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection}\u002Fproducts on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1135,"description":1136,"ability":867},"mcp_catalog_collections_catalogCollection_refresh","Call POST \u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection}\u002Frefresh on your own shop. Requires the \"catalog.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1138,"description":1139,"ability":882},"mcp_promotions","Call POST \u002Fapi\u002Fmcp\u002Fpromotions on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1141,"description":1142,"ability":882},"mcp_promotions_preview","Call POST \u002Fapi\u002Fmcp\u002Fpromotions\u002Fpreview on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1144,"description":1145,"ability":882},"mcp_promotions_promotion","Call PATCH \u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion} on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1147,"description":1148,"ability":882},"mcp_promotions_promotion_activate","Call POST \u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Factivate on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1150,"description":1151,"ability":882},"mcp_promotions_promotion_stop","Call POST \u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fstop on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1153,"description":1154,"ability":882},"mcp_promotions_promotion_duplicate","Call POST \u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fduplicate on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1156,"description":1157,"ability":882},"mcp_promotions_promotion_codes","Call POST \u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fcodes on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1159,"description":1160,"ability":882},"mcp_promotions_promotion_codes_code","Call DELETE \u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fcodes\u002F{code} on your own shop. Requires the \"promotions.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1162,"description":1163,"ability":881},"mcp_volume-ladders","Call POST \u002Fapi\u002Fmcp\u002Fvolume-ladders on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1165,"description":1166,"ability":881},"mcp_volume-ladders_ladder_update","Call PATCH \u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1168,"description":1169,"ability":881},"mcp_volume-ladders_ladder_activate","Call POST \u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder}\u002Factivate on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1171,"description":1172,"ability":881},"mcp_volume-ladders_ladder_stop","Call POST \u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder}\u002Fstop on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1174,"description":1175,"ability":881},"mcp_volume-ladders_ladder_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder} on your own shop. Requires the \"products.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1177,"description":1178,"ability":879},"mcp_pages","Call POST \u002Fapi\u002Fmcp\u002Fpages on your own shop. Requires the \"pages.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1180,"description":1181,"ability":879},"mcp_pages_page_update","Call PATCH \u002Fapi\u002Fmcp\u002Fpages\u002F{page} on your own shop. Requires the \"pages.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1183,"description":1184,"ability":879},"mcp_pages_page_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fpages\u002F{page} on your own shop. Requires the \"pages.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1186,"description":1187,"ability":877},"mcp_menus","Call POST \u002Fapi\u002Fmcp\u002Fmenus on your own shop. Requires the \"menus.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1189,"description":1190,"ability":877},"mcp_menus_menu_update","Call PATCH \u002Fapi\u002Fmcp\u002Fmenus\u002F{menu} on your own shop. Requires the \"menus.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1192,"description":1193,"ability":877},"mcp_menus_menu_items","Call PUT \u002Fapi\u002Fmcp\u002Fmenus\u002F{menu}\u002Fitems on your own shop. Requires the \"menus.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1195,"description":1196,"ability":877},"mcp_menus_menu_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fmenus\u002F{menu} on your own shop. Requires the \"menus.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1198,"description":1199,"ability":880},"mcp_posts","Call POST \u002Fapi\u002Fmcp\u002Fposts on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1201,"description":1202,"ability":880},"mcp_posts_post_update","Call PATCH \u002Fapi\u002Fmcp\u002Fposts\u002F{post} on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1204,"description":1205,"ability":880},"mcp_posts_post_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fposts\u002F{post} on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1207,"description":1208,"ability":880},"mcp_posts_post_publish","Call POST \u002Fapi\u002Fmcp\u002Fposts\u002F{post}\u002Fpublish on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1210,"description":1211,"ability":880},"mcp_posts_post_unpublish","Call POST \u002Fapi\u002Fmcp\u002Fposts\u002F{post}\u002Funpublish on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1213,"description":1214,"ability":880},"mcp_post-categories","Call POST \u002Fapi\u002Fmcp\u002Fpost-categories on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1216,"description":1217,"ability":880},"mcp_post-categories_post_category_update","Call PATCH \u002Fapi\u002Fmcp\u002Fpost-categories\u002F{post_category} on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1219,"description":1220,"ability":880},"mcp_post-categories_post_category_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fpost-categories\u002F{post_category} on your own shop. Requires the \"posts.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1222,"description":1223,"ability":884},"mcp_shop_settings","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fsettings on your own shop. Requires the \"settings.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1225,"description":1226,"ability":884},"mcp_shop_closed","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fclosed on your own shop. Requires the \"settings.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1228,"description":1229,"ability":884},"mcp_shop_closed_background","Call DELETE \u002Fapi\u002Fmcp\u002Fshop\u002Fclosed\u002Fbackground on your own shop. Requires the \"settings.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1231,"description":1232,"ability":885},"mcp_shop_shipping","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fshipping on your own shop. Requires the \"shipping.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1234,"description":1235,"ability":887},"mcp_shop_tax","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Ftax on your own shop. Requires the \"tax.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1237,"description":1238,"ability":884},"mcp_shop_domain_update","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fdomain on your own shop. Requires the \"settings.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1240,"description":1241,"ability":884},"mcp_shop_domain_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fshop\u002Fdomain on your own shop. Requires the \"settings.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1243,"description":1244,"ability":884},"mcp_shop_domain_verify","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fdomain\u002Fverify on your own shop. Requires the \"settings.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1246,"description":1247,"ability":865},"mcp_shop_theme","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Ftheme on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1249,"description":1250,"ability":865},"mcp_shop_appearance_tokens","Call PUT \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Ftokens on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1252,"description":1253,"ability":865},"mcp_shop_appearance_logo_uploadLogo","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Flogo on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1255,"description":1256,"ability":865},"mcp_shop_appearance_logo_destroyLogo","Call DELETE \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Flogo on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1258,"description":1259,"ability":865},"mcp_shop_appearance_favicon_uploadFavicon","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Ffavicon on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1261,"description":1262,"ability":865},"mcp_shop_appearance_favicon_destroyFavicon","Call DELETE \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Ffavicon on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1264,"description":1265,"ability":865},"mcp_shop_appearance_sections","Call PUT \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fsections on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1267,"description":1268,"ability":865},"mcp_shop_appearance_media","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fmedia on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1270,"description":1271,"ability":865},"mcp_shop_appearance_media_media","Call DELETE \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fmedia\u002F{media} on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1273,"description":1274,"ability":866},"mcp_shop_appearance_preview_get","Call GET \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fpreview on your own shop. Requires the \"appearance.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":1276,"description":1277,"ability":866},"mcp_shop_appearance_preview_post","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fpreview on your own shop. Requires the \"appearance.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1279,"description":1280,"ability":865},"mcp_shop_appearance_themes","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1282,"description":1283,"ability":865},"mcp_shop_appearance_themes_theme_update","Call PATCH \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme} on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1285,"description":1286,"ability":865},"mcp_shop_appearance_themes_theme_activate","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme}\u002Factivate on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1288,"description":1289,"ability":865},"mcp_shop_appearance_themes_theme_archive","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme}\u002Farchive on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1291,"description":1292,"ability":865},"mcp_shop_appearance_themes_theme_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme} on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1294,"description":1295,"ability":865},"mcp_shop_appearance_generate","Call POST \u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fgenerate on your own shop. Requires the \"appearance.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1297,"description":1298,"ability":878},"mcp_sales","Call POST \u002Fapi\u002Fmcp\u002Fsales on your own shop. Requires the \"orders.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1300,"description":1301,"ability":878},"mcp_sales_sale_refunds","Call POST \u002Fapi\u002Fmcp\u002Fsales\u002F{sale}\u002Frefunds on your own shop. Requires the \"orders.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1303,"description":1304,"ability":888},"mcp_merchant_growth_submissions","Call POST \u002Fapi\u002Fmcp\u002Fmerchant\u002Fgrowth\u002Fsubmissions on your own shop. Requires the \"wallet.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1306,"description":1307,"ability":873},"mcp_live_sessions","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions on your own shop. Requires the \"live.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1309,"description":1310,"ability":873},"mcp_live_sessions_session","Call PATCH \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session} on your own shop. Requires the \"live.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1312,"description":1313,"ability":872},"mcp_live_sessions_session_prepare","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fprepare on your own shop. Requires the \"live.broadcast\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1315,"description":1316,"ability":872},"mcp_live_sessions_session_end","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fend on your own shop. Requires the \"live.broadcast\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1318,"description":1319,"ability":872},"mcp_live_sessions_session_broadcast_start","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fbroadcast\u002Fstart on your own shop. Requires the \"live.broadcast\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1321,"description":1322,"ability":872},"mcp_live_sessions_session_broadcast_stop","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fbroadcast\u002Fstop on your own shop. Requires the \"live.broadcast\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1324,"description":1325,"ability":873},"mcp_live_sessions_session_pin","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fpin on your own shop. Requires the \"live.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1327,"description":1328,"ability":873},"mcp_live_sessions_session_unpin","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Funpin on your own shop. Requires the \"live.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1330,"description":1331,"ability":873},"mcp_live_settings","Call PATCH \u002Fapi\u002Fmcp\u002Flive\u002Fsettings on your own shop. Requires the \"live.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1333,"description":1334,"ability":872},"mcp_live_sessions_session_chat_messages","Call POST \u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fchat\u002Fmessages on your own shop. Requires the \"live.broadcast\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1336,"description":1337,"ability":874},"mcp_loyalty","Call PUT \u002Fapi\u002Fmcp\u002Floyalty on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1339,"description":1340,"ability":874},"mcp_loyalty_rewards","Call POST \u002Fapi\u002Fmcp\u002Floyalty\u002Frewards on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1342,"description":1343,"ability":874},"mcp_loyalty_rewards_id_updateReward","Call PATCH \u002Fapi\u002Fmcp\u002Floyalty\u002Frewards\u002F{id} on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1345,"description":1346,"ability":874},"mcp_loyalty_rewards_id_destroyReward","Call DELETE \u002Fapi\u002Fmcp\u002Floyalty\u002Frewards\u002F{id} on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1348,"description":1349,"ability":874},"mcp_loyalty_tiers","Call POST \u002Fapi\u002Fmcp\u002Floyalty\u002Ftiers on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1351,"description":1352,"ability":874},"mcp_loyalty_tiers_id_updateTier","Call PATCH \u002Fapi\u002Fmcp\u002Floyalty\u002Ftiers\u002F{id} on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1354,"description":1355,"ability":874},"mcp_loyalty_tiers_id_destroyTier","Call DELETE \u002Fapi\u002Fmcp\u002Floyalty\u002Ftiers\u002F{id} on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1357,"description":1358,"ability":874},"mcp_loyalty_referral","Call PUT \u002Fapi\u002Fmcp\u002Floyalty\u002Freferral on your own shop. Requires the \"loyalty.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1360,"description":1361,"ability":876},"mcp_membership","Call PUT \u002Fapi\u002Fmcp\u002Fmembership on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1363,"description":1364,"ability":876},"mcp_membership_enrollments_enrollment_approve","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fenrollments\u002F{enrollment}\u002Fapprove on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1366,"description":1367,"ability":876},"mcp_membership_enrollments_enrollment_suspend","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fenrollments\u002F{enrollment}\u002Fsuspend on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1369,"description":1370,"ability":876},"mcp_membership_enrollments_enrollment_unsuspend","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fenrollments\u002F{enrollment}\u002Funsuspend on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1372,"description":1373,"ability":876},"mcp_membership_products_product_video_store","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fproducts\u002F{product}\u002Fvideo on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1375,"description":1376,"ability":876},"mcp_membership_products_product_video_destroy","Call DELETE \u002Fapi\u002Fmcp\u002Fmembership\u002Fproducts\u002F{product}\u002Fvideo on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1378,"description":1379,"ability":876},"mcp_membership_products_product_policy","Call PUT \u002Fapi\u002Fmcp\u002Fmembership\u002Fproducts\u002F{product}\u002Fpolicy on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1381,"description":1382,"ability":876},"mcp_membership_plans","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fplans on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1384,"description":1385,"ability":876},"mcp_membership_plans_plan_archive","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fplans\u002F{plan}\u002Farchive on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1387,"description":1388,"ability":876},"mcp_membership_passes","Call POST \u002Fapi\u002Fmcp\u002Fmembership\u002Fpasses on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",{"name":1390,"description":1391,"ability":876},"mcp_membership_passes_pass","Call DELETE \u002Fapi\u002Fmcp\u002Fmembership\u002Fpasses\u002F{pass} on your own shop. Requires the \"membership.manage\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass. Put the fields the operation wants in \"body\", as the portal screen of the same name sends them. If the shop refuses the body, the answer names every field and why — correct it and call again. Pass the same \"idempotency_key\" on a retry so the work is not done twice.",[1393,1395,1398,1401,1404,1407,1410],{"name":605,"description":1394,"ability":64},"Call GET \u002Fapi\u002Fv1\u002Fshop on your own shop. Requires the \"settings.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":1396,"description":1397,"ability":101},"products_index","Call GET \u002Fapi\u002Fv1\u002Fproducts on your own shop. Requires the \"products.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":1399,"description":1400,"ability":101},"products_show","Call GET \u002Fapi\u002Fv1\u002Fproducts\u002F{id} on your own shop. Requires the \"products.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":1402,"description":1403,"ability":174},"orders_index","Call GET \u002Fapi\u002Fv1\u002Forders on your own shop. Requires the \"orders.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":1405,"description":1406,"ability":174},"orders_show","Call GET \u002Fapi\u002Fv1\u002Forders\u002F{reference} on your own shop. Requires the \"orders.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":1408,"description":1409,"ability":240},"subscriptions_index","Call GET \u002Fapi\u002Fv1\u002Fsubscriptions on your own shop. Requires the \"subscriptions.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",{"name":455,"description":1411,"ability":263},"Call GET \u002Fapi\u002Fv1\u002Fshipping on your own shop. Requires the \"shipping.view\" ability on the shop API key. The shop is the key's, so there is no shop or tenant argument to pass.",[1413,1417,1420,1423,1426,1429,1432,1435,1438,1441,1444,1448,1451,1454,1457,1460,1463,1466,1469,1472,1476,1479,1482,1485,1488,1491,1494,1496,1499,1502,1505,1508,1511,1514,1517,1520,1523,1526,1529,1532,1535,1538,1541,1544,1547,1550,1553,1555,1558,1561,1564,1567,1570,1572,1575,1578,1580,1583,1586,1588,1591,1594,1596,1599,1602,1604,1607,1610,1613,1615,1618,1621,1624,1627,1630,1633,1636,1639,1642,1645,1648,1651,1654,1657,1659,1662,1665,1667,1670,1673,1676,1678,1681,1684,1686,1689,1692,1695,1698,1700,1703,1706,1709,1712,1715,1718,1720,1723,1726,1729,1732,1734,1737,1739,1742,1745,1748,1752,1755,1758,1761,1764,1766,1769,1772,1775,1778,1781,1784,1787,1790,1793,1796,1799,1802,1805,1808,1811,1814,1817,1819,1822,1825,1827,1830,1833,1836,1839,1842,1845,1847,1850,1853,1856,1859],{"name":1414,"method":1415,"path":1416,"ability":863},"mcp.ai.credits.purchase","POST","\u002Fapi\u002Fmcp\u002Fai\u002Fcredits\u002Fpurchase",{"name":1418,"method":1415,"path":1419,"ability":863},"mcp.ai.conversations","\u002Fapi\u002Fmcp\u002Fai\u002Fconversations",{"name":1421,"method":1415,"path":1422,"ability":863},"mcp.ai.conversations.conversation.archive","\u002Fapi\u002Fmcp\u002Fai\u002Fconversations\u002F{conversation}\u002Farchive",{"name":1424,"method":1415,"path":1425,"ability":863},"mcp.ai.conversations.conversation.messages","\u002Fapi\u002Fmcp\u002Fai\u002Fconversations\u002F{conversation}\u002Fmessages",{"name":1427,"method":1415,"path":1428,"ability":863},"mcp.ai.runs.run.cancel","\u002Fapi\u002Fmcp\u002Fai\u002Fruns\u002F{run}\u002Fcancel",{"name":1430,"method":1415,"path":1431,"ability":863},"mcp.ai.dashboards","\u002Fapi\u002Fmcp\u002Fai\u002Fdashboards",{"name":1433,"method":1415,"path":1434,"ability":863},"mcp.ai.actions.action.approve","\u002Fapi\u002Fmcp\u002Fai\u002Factions\u002F{action}\u002Fapprove",{"name":1436,"method":1415,"path":1437,"ability":863},"mcp.ai.actions.action.reject","\u002Fapi\u002Fmcp\u002Fai\u002Factions\u002F{action}\u002Freject",{"name":1439,"method":1415,"path":1440,"ability":863},"mcp.ai.catalog.import-preview","\u002Fapi\u002Fmcp\u002Fai\u002Fcatalog\u002Fimport-preview",{"name":1442,"method":1415,"path":1443,"ability":863},"mcp.ai.catalog.prepare-import","\u002Fapi\u002Fmcp\u002Fai\u002Fcatalog\u002Fprepare-import",{"name":1445,"method":1446,"path":1447,"ability":864},"mcp.analytics.goals","PUT","\u002Fapi\u002Fmcp\u002Fanalytics\u002Fgoals",{"name":1449,"method":1415,"path":1450,"ability":871},"mcp.geo.audits","\u002Fapi\u002Fmcp\u002Fgeo\u002Faudits",{"name":1452,"method":1446,"path":1453,"ability":875},"mcp.marketing.integrations.provider","\u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}",{"name":1455,"method":1415,"path":1456,"ability":875},"mcp.marketing.integrations.provider.enable","\u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}\u002Fenable",{"name":1458,"method":1415,"path":1459,"ability":875},"mcp.marketing.integrations.provider.disable","\u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}\u002Fdisable",{"name":1461,"method":1415,"path":1462,"ability":875},"mcp.marketing.integrations.provider.test","\u002Fapi\u002Fmcp\u002Fmarketing\u002Fintegrations\u002F{provider}\u002Ftest",{"name":1464,"method":1446,"path":1465,"ability":875},"mcp.marketing.verification-tags","\u002Fapi\u002Fmcp\u002Fmarketing\u002Fverification-tags",{"name":1467,"method":1415,"path":1468,"ability":881},"mcp.starter-catalog.purge","\u002Fapi\u002Fmcp\u002Fstarter-catalog\u002Fpurge",{"name":1470,"method":1415,"path":1471,"ability":881},"mcp.products","\u002Fapi\u002Fmcp\u002Fproducts",{"name":1473,"method":1474,"path":1475,"ability":881},"mcp.products.product.update","PATCH","\u002Fapi\u002Fmcp\u002Fproducts\u002F{product}",{"name":1477,"method":1478,"path":1475,"ability":881},"mcp.products.product.destroy","DELETE",{"name":1480,"method":1415,"path":1481,"ability":881},"mcp.products.product.links","\u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Flinks",{"name":1483,"method":1478,"path":1484,"ability":881},"mcp.products.product.links.link","\u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Flinks\u002F{link}",{"name":1486,"method":1415,"path":1487,"ability":881},"mcp.products.product.images","\u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages",{"name":1489,"method":1415,"path":1490,"ability":881},"mcp.products.product.images.order","\u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages\u002Forder",{"name":1492,"method":1474,"path":1493,"ability":881},"mcp.products.product.images.image.update","\u002Fapi\u002Fmcp\u002Fproducts\u002F{product}\u002Fimages\u002F{image}",{"name":1495,"method":1478,"path":1493,"ability":881},"mcp.products.product.images.image.destroy",{"name":1497,"method":1415,"path":1498,"ability":878},"mcp.orders.bulk","\u002Fapi\u002Fmcp\u002Forders\u002Fbulk",{"name":1500,"method":1415,"path":1501,"ability":878},"mcp.orders.order.paid","\u002Fapi\u002Fmcp\u002Forders\u002F{order}\u002Fpaid",{"name":1503,"method":1415,"path":1504,"ability":878},"mcp.orders.order.cancel","\u002Fapi\u002Fmcp\u002Forders\u002F{order}\u002Fcancel",{"name":1506,"method":1415,"path":1507,"ability":870},"mcp.orders.order.boxes","\u002Fapi\u002Fmcp\u002Forders\u002F{order}\u002Fboxes",{"name":1509,"method":1415,"path":1510,"ability":870},"mcp.boxes.bulk","\u002Fapi\u002Fmcp\u002Fboxes\u002Fbulk",{"name":1512,"method":1415,"path":1513,"ability":870},"mcp.boxes.book","\u002Fapi\u002Fmcp\u002Fboxes\u002Fbook",{"name":1515,"method":1474,"path":1516,"ability":870},"mcp.boxes.box","\u002Fapi\u002Fmcp\u002Fboxes\u002F{box}",{"name":1518,"method":1415,"path":1519,"ability":870},"mcp.boxes.box.pack","\u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fpack",{"name":1521,"method":1415,"path":1522,"ability":870},"mcp.boxes.box.ship","\u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fship",{"name":1524,"method":1415,"path":1525,"ability":870},"mcp.boxes.box.rates","\u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Frates",{"name":1527,"method":1415,"path":1528,"ability":870},"mcp.boxes.box.book","\u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fbook",{"name":1530,"method":1415,"path":1531,"ability":870},"mcp.boxes.box.deliver","\u002Fapi\u002Fmcp\u002Fboxes\u002F{box}\u002Fdeliver",{"name":1533,"method":1415,"path":1534,"ability":886},"mcp.subscriptions.subscription.pause","\u002Fapi\u002Fmcp\u002Fsubscriptions\u002F{subscription}\u002Fpause",{"name":1536,"method":1415,"path":1537,"ability":886},"mcp.subscriptions.subscription.resume","\u002Fapi\u002Fmcp\u002Fsubscriptions\u002F{subscription}\u002Fresume",{"name":1539,"method":1415,"path":1540,"ability":886},"mcp.subscriptions.subscription.cancel","\u002Fapi\u002Fmcp\u002Fsubscriptions\u002F{subscription}\u002Fcancel",{"name":1542,"method":1415,"path":1543,"ability":883},"mcp.reviews.review.approve","\u002Fapi\u002Fmcp\u002Freviews\u002F{review}\u002Fapprove",{"name":1545,"method":1415,"path":1546,"ability":883},"mcp.reviews.review.reject","\u002Fapi\u002Fmcp\u002Freviews\u002F{review}\u002Freject",{"name":1548,"method":1415,"path":1549,"ability":869},"mcp.categories","\u002Fapi\u002Fmcp\u002Fcategories",{"name":1551,"method":1474,"path":1552,"ability":869},"mcp.categories.category.update","\u002Fapi\u002Fmcp\u002Fcategories\u002F{category}",{"name":1554,"method":1478,"path":1552,"ability":869},"mcp.categories.category.destroy",{"name":1556,"method":1415,"path":1557,"ability":869},"mcp.categories.media","\u002Fapi\u002Fmcp\u002Fcategories\u002Fmedia",{"name":1559,"method":1415,"path":1560,"ability":868},"mcp.catalog.templates.preview","\u002Fapi\u002Fmcp\u002Fcatalog\u002Ftemplates\u002Fpreview",{"name":1562,"method":1415,"path":1563,"ability":867},"mcp.catalog.templates.install","\u002Fapi\u002Fmcp\u002Fcatalog\u002Ftemplates\u002Finstall",{"name":1565,"method":1415,"path":1566,"ability":867},"mcp.catalog.product-types","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fproduct-types",{"name":1568,"method":1474,"path":1569,"ability":867},"mcp.catalog.product-types.productType.update","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fproduct-types\u002F{productType}",{"name":1571,"method":1478,"path":1569,"ability":867},"mcp.catalog.product-types.productType.destroy",{"name":1573,"method":1415,"path":1574,"ability":867},"mcp.catalog.attributes","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes",{"name":1576,"method":1474,"path":1577,"ability":867},"mcp.catalog.attributes.attributeDefinition.update","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition}",{"name":1579,"method":1478,"path":1577,"ability":867},"mcp.catalog.attributes.attributeDefinition.destroy",{"name":1581,"method":1415,"path":1582,"ability":867},"mcp.catalog.attributes.attributeDefinition.options","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition}\u002Foptions",{"name":1584,"method":1474,"path":1585,"ability":867},"mcp.catalog.attributes.attributeDefinition.options.attributeOption.update","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fattributes\u002F{attributeDefinition}\u002Foptions\u002F{attributeOption}",{"name":1587,"method":1478,"path":1585,"ability":867},"mcp.catalog.attributes.attributeDefinition.options.attributeOption.destroy",{"name":1589,"method":1415,"path":1590,"ability":867},"mcp.catalog.entity-types","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fentity-types",{"name":1592,"method":1474,"path":1593,"ability":867},"mcp.catalog.entity-types.catalogEntityTypeDefinition.update","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fentity-types\u002F{catalogEntityTypeDefinition}",{"name":1595,"method":1478,"path":1593,"ability":867},"mcp.catalog.entity-types.catalogEntityTypeDefinition.destroy",{"name":1597,"method":1415,"path":1598,"ability":867},"mcp.catalog.entities","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fentities",{"name":1600,"method":1474,"path":1601,"ability":867},"mcp.catalog.entities.catalogEntity.update","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fentities\u002F{catalogEntity}",{"name":1603,"method":1478,"path":1601,"ability":867},"mcp.catalog.entities.catalogEntity.destroy",{"name":1605,"method":1415,"path":1606,"ability":867},"mcp.catalog.collections","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections",{"name":1608,"method":1415,"path":1609,"ability":868},"mcp.catalog.collections.preview","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002Fpreview",{"name":1611,"method":1474,"path":1612,"ability":867},"mcp.catalog.collections.catalogCollection.update","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection}",{"name":1614,"method":1478,"path":1612,"ability":867},"mcp.catalog.collections.catalogCollection.destroy",{"name":1616,"method":1446,"path":1617,"ability":867},"mcp.catalog.collections.catalogCollection.products","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection}\u002Fproducts",{"name":1619,"method":1415,"path":1620,"ability":867},"mcp.catalog.collections.catalogCollection.refresh","\u002Fapi\u002Fmcp\u002Fcatalog\u002Fcollections\u002F{catalogCollection}\u002Frefresh",{"name":1622,"method":1415,"path":1623,"ability":882},"mcp.promotions","\u002Fapi\u002Fmcp\u002Fpromotions",{"name":1625,"method":1415,"path":1626,"ability":882},"mcp.promotions.preview","\u002Fapi\u002Fmcp\u002Fpromotions\u002Fpreview",{"name":1628,"method":1474,"path":1629,"ability":882},"mcp.promotions.promotion","\u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}",{"name":1631,"method":1415,"path":1632,"ability":882},"mcp.promotions.promotion.activate","\u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Factivate",{"name":1634,"method":1415,"path":1635,"ability":882},"mcp.promotions.promotion.stop","\u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fstop",{"name":1637,"method":1415,"path":1638,"ability":882},"mcp.promotions.promotion.duplicate","\u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fduplicate",{"name":1640,"method":1415,"path":1641,"ability":882},"mcp.promotions.promotion.codes","\u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fcodes",{"name":1643,"method":1478,"path":1644,"ability":882},"mcp.promotions.promotion.codes.code","\u002Fapi\u002Fmcp\u002Fpromotions\u002F{promotion}\u002Fcodes\u002F{code}",{"name":1646,"method":1415,"path":1647,"ability":881},"mcp.volume-ladders","\u002Fapi\u002Fmcp\u002Fvolume-ladders",{"name":1649,"method":1474,"path":1650,"ability":881},"mcp.volume-ladders.ladder.update","\u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder}",{"name":1652,"method":1415,"path":1653,"ability":881},"mcp.volume-ladders.ladder.activate","\u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder}\u002Factivate",{"name":1655,"method":1415,"path":1656,"ability":881},"mcp.volume-ladders.ladder.stop","\u002Fapi\u002Fmcp\u002Fvolume-ladders\u002F{ladder}\u002Fstop",{"name":1658,"method":1478,"path":1650,"ability":881},"mcp.volume-ladders.ladder.destroy",{"name":1660,"method":1415,"path":1661,"ability":879},"mcp.pages","\u002Fapi\u002Fmcp\u002Fpages",{"name":1663,"method":1474,"path":1664,"ability":879},"mcp.pages.page.update","\u002Fapi\u002Fmcp\u002Fpages\u002F{page}",{"name":1666,"method":1478,"path":1664,"ability":879},"mcp.pages.page.destroy",{"name":1668,"method":1415,"path":1669,"ability":877},"mcp.menus","\u002Fapi\u002Fmcp\u002Fmenus",{"name":1671,"method":1474,"path":1672,"ability":877},"mcp.menus.menu.update","\u002Fapi\u002Fmcp\u002Fmenus\u002F{menu}",{"name":1674,"method":1446,"path":1675,"ability":877},"mcp.menus.menu.items","\u002Fapi\u002Fmcp\u002Fmenus\u002F{menu}\u002Fitems",{"name":1677,"method":1478,"path":1672,"ability":877},"mcp.menus.menu.destroy",{"name":1679,"method":1415,"path":1680,"ability":880},"mcp.posts","\u002Fapi\u002Fmcp\u002Fposts",{"name":1682,"method":1474,"path":1683,"ability":880},"mcp.posts.post.update","\u002Fapi\u002Fmcp\u002Fposts\u002F{post}",{"name":1685,"method":1478,"path":1683,"ability":880},"mcp.posts.post.destroy",{"name":1687,"method":1415,"path":1688,"ability":880},"mcp.posts.post.publish","\u002Fapi\u002Fmcp\u002Fposts\u002F{post}\u002Fpublish",{"name":1690,"method":1415,"path":1691,"ability":880},"mcp.posts.post.unpublish","\u002Fapi\u002Fmcp\u002Fposts\u002F{post}\u002Funpublish",{"name":1693,"method":1415,"path":1694,"ability":880},"mcp.post-categories","\u002Fapi\u002Fmcp\u002Fpost-categories",{"name":1696,"method":1474,"path":1697,"ability":880},"mcp.post-categories.post_category.update","\u002Fapi\u002Fmcp\u002Fpost-categories\u002F{post_category}",{"name":1699,"method":1478,"path":1697,"ability":880},"mcp.post-categories.post_category.destroy",{"name":1701,"method":1415,"path":1702,"ability":884},"mcp.shop.settings","\u002Fapi\u002Fmcp\u002Fshop\u002Fsettings",{"name":1704,"method":1415,"path":1705,"ability":884},"mcp.shop.closed","\u002Fapi\u002Fmcp\u002Fshop\u002Fclosed",{"name":1707,"method":1478,"path":1708,"ability":884},"mcp.shop.closed.background","\u002Fapi\u002Fmcp\u002Fshop\u002Fclosed\u002Fbackground",{"name":1710,"method":1415,"path":1711,"ability":885},"mcp.shop.shipping","\u002Fapi\u002Fmcp\u002Fshop\u002Fshipping",{"name":1713,"method":1415,"path":1714,"ability":887},"mcp.shop.tax","\u002Fapi\u002Fmcp\u002Fshop\u002Ftax",{"name":1716,"method":1415,"path":1717,"ability":884},"mcp.shop.domain.update","\u002Fapi\u002Fmcp\u002Fshop\u002Fdomain",{"name":1719,"method":1478,"path":1717,"ability":884},"mcp.shop.domain.destroy",{"name":1721,"method":1415,"path":1722,"ability":884},"mcp.shop.domain.verify","\u002Fapi\u002Fmcp\u002Fshop\u002Fdomain\u002Fverify",{"name":1724,"method":1415,"path":1725,"ability":865},"mcp.shop.theme","\u002Fapi\u002Fmcp\u002Fshop\u002Ftheme",{"name":1727,"method":1446,"path":1728,"ability":865},"mcp.shop.appearance.tokens","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Ftokens",{"name":1730,"method":1415,"path":1731,"ability":865},"mcp.shop.appearance.logo.uploadLogo","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Flogo",{"name":1733,"method":1478,"path":1731,"ability":865},"mcp.shop.appearance.logo.destroyLogo",{"name":1735,"method":1415,"path":1736,"ability":865},"mcp.shop.appearance.favicon.uploadFavicon","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Ffavicon",{"name":1738,"method":1478,"path":1736,"ability":865},"mcp.shop.appearance.favicon.destroyFavicon",{"name":1740,"method":1446,"path":1741,"ability":865},"mcp.shop.appearance.sections","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fsections",{"name":1743,"method":1415,"path":1744,"ability":865},"mcp.shop.appearance.media","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fmedia",{"name":1746,"method":1478,"path":1747,"ability":865},"mcp.shop.appearance.media.media","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fmedia\u002F{media}",{"name":1749,"method":1750,"path":1751,"ability":866},"mcp.shop.appearance.preview","GET","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fpreview",{"name":1753,"method":1415,"path":1754,"ability":865},"mcp.shop.appearance.themes","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes",{"name":1756,"method":1474,"path":1757,"ability":865},"mcp.shop.appearance.themes.theme.update","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme}",{"name":1759,"method":1415,"path":1760,"ability":865},"mcp.shop.appearance.themes.theme.activate","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme}\u002Factivate",{"name":1762,"method":1415,"path":1763,"ability":865},"mcp.shop.appearance.themes.theme.archive","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fthemes\u002F{theme}\u002Farchive",{"name":1765,"method":1478,"path":1757,"ability":865},"mcp.shop.appearance.themes.theme.destroy",{"name":1767,"method":1415,"path":1768,"ability":865},"mcp.shop.appearance.generate","\u002Fapi\u002Fmcp\u002Fshop\u002Fappearance\u002Fgenerate",{"name":1770,"method":1415,"path":1771,"ability":878},"mcp.sales","\u002Fapi\u002Fmcp\u002Fsales",{"name":1773,"method":1415,"path":1774,"ability":878},"mcp.sales.sale.refunds","\u002Fapi\u002Fmcp\u002Fsales\u002F{sale}\u002Frefunds",{"name":1776,"method":1415,"path":1777,"ability":888},"mcp.merchant.growth.submissions","\u002Fapi\u002Fmcp\u002Fmerchant\u002Fgrowth\u002Fsubmissions",{"name":1779,"method":1415,"path":1780,"ability":873},"mcp.live.sessions","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions",{"name":1782,"method":1474,"path":1783,"ability":873},"mcp.live.sessions.session","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}",{"name":1785,"method":1415,"path":1786,"ability":872},"mcp.live.sessions.session.prepare","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fprepare",{"name":1788,"method":1415,"path":1789,"ability":872},"mcp.live.sessions.session.end","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fend",{"name":1791,"method":1415,"path":1792,"ability":872},"mcp.live.sessions.session.broadcast.start","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fbroadcast\u002Fstart",{"name":1794,"method":1415,"path":1795,"ability":872},"mcp.live.sessions.session.broadcast.stop","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fbroadcast\u002Fstop",{"name":1797,"method":1415,"path":1798,"ability":873},"mcp.live.sessions.session.pin","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fpin",{"name":1800,"method":1415,"path":1801,"ability":873},"mcp.live.sessions.session.unpin","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Funpin",{"name":1803,"method":1474,"path":1804,"ability":873},"mcp.live.settings","\u002Fapi\u002Fmcp\u002Flive\u002Fsettings",{"name":1806,"method":1415,"path":1807,"ability":872},"mcp.live.sessions.session.chat.messages","\u002Fapi\u002Fmcp\u002Flive\u002Fsessions\u002F{session}\u002Fchat\u002Fmessages",{"name":1809,"method":1446,"path":1810,"ability":874},"mcp.loyalty","\u002Fapi\u002Fmcp\u002Floyalty",{"name":1812,"method":1415,"path":1813,"ability":874},"mcp.loyalty.rewards","\u002Fapi\u002Fmcp\u002Floyalty\u002Frewards",{"name":1815,"method":1474,"path":1816,"ability":874},"mcp.loyalty.rewards.id.updateReward","\u002Fapi\u002Fmcp\u002Floyalty\u002Frewards\u002F{id}",{"name":1818,"method":1478,"path":1816,"ability":874},"mcp.loyalty.rewards.id.destroyReward",{"name":1820,"method":1415,"path":1821,"ability":874},"mcp.loyalty.tiers","\u002Fapi\u002Fmcp\u002Floyalty\u002Ftiers",{"name":1823,"method":1474,"path":1824,"ability":874},"mcp.loyalty.tiers.id.updateTier","\u002Fapi\u002Fmcp\u002Floyalty\u002Ftiers\u002F{id}",{"name":1826,"method":1478,"path":1824,"ability":874},"mcp.loyalty.tiers.id.destroyTier",{"name":1828,"method":1446,"path":1829,"ability":874},"mcp.loyalty.referral","\u002Fapi\u002Fmcp\u002Floyalty\u002Freferral",{"name":1831,"method":1446,"path":1832,"ability":876},"mcp.membership","\u002Fapi\u002Fmcp\u002Fmembership",{"name":1834,"method":1415,"path":1835,"ability":876},"mcp.membership.enrollments.enrollment.approve","\u002Fapi\u002Fmcp\u002Fmembership\u002Fenrollments\u002F{enrollment}\u002Fapprove",{"name":1837,"method":1415,"path":1838,"ability":876},"mcp.membership.enrollments.enrollment.suspend","\u002Fapi\u002Fmcp\u002Fmembership\u002Fenrollments\u002F{enrollment}\u002Fsuspend",{"name":1840,"method":1415,"path":1841,"ability":876},"mcp.membership.enrollments.enrollment.unsuspend","\u002Fapi\u002Fmcp\u002Fmembership\u002Fenrollments\u002F{enrollment}\u002Funsuspend",{"name":1843,"method":1415,"path":1844,"ability":876},"mcp.membership.products.product.video.store","\u002Fapi\u002Fmcp\u002Fmembership\u002Fproducts\u002F{product}\u002Fvideo",{"name":1846,"method":1478,"path":1844,"ability":876},"mcp.membership.products.product.video.destroy",{"name":1848,"method":1446,"path":1849,"ability":876},"mcp.membership.products.product.policy","\u002Fapi\u002Fmcp\u002Fmembership\u002Fproducts\u002F{product}\u002Fpolicy",{"name":1851,"method":1415,"path":1852,"ability":876},"mcp.membership.plans","\u002Fapi\u002Fmcp\u002Fmembership\u002Fplans",{"name":1854,"method":1415,"path":1855,"ability":876},"mcp.membership.plans.plan.archive","\u002Fapi\u002Fmcp\u002Fmembership\u002Fplans\u002F{plan}\u002Farchive",{"name":1857,"method":1415,"path":1858,"ability":876},"mcp.membership.passes","\u002Fapi\u002Fmcp\u002Fmembership\u002Fpasses",{"name":1860,"method":1478,"path":1861,"ability":876},"mcp.membership.passes.pass","\u002Fapi\u002Fmcp\u002Fmembership\u002Fpasses\u002F{pass}",{"owner_only":1863,"excluded":1880,"idempotency":1911},[1864,1868,1872,1876],{"ability":1865,"label":1866,"reason":1867},"wallet.topup","Top up the wallet","putting money in is the shopkeeper's own act",{"ability":1869,"label":1870,"reason":1871},"billing.manage","Billing and closing the shop","the card on file, the plan, and closing the shop",{"ability":1873,"label":1874,"reason":1875},"bank.manage","Payment, payout and courier accounts","the shop's own CHIP and courier credentials, and its payout account",{"ability":1877,"label":1878,"reason":1879},"members.transfer","Hand the shop over","handing the shop to somebody else",[1881,1884,1887,1890,1893,1896,1899,1902,1905,1908],{"path":1882,"reason":1883},"\u002Fapi\u002Fshop\u002Fapi-keys","A key that can mint keys can widen itself past the codes it holds.",{"path":1885,"reason":1886},"\u002Fapi\u002Fshop\u002Foauth","Consenting is a person's decision on a screen: a key that could reach it would grant itself a connection.",{"path":1888,"reason":1889},"\u002Fapi\u002Flead-campaigns","Sending a campaign mails real people and cannot be undone: it is the owner's act on the screen, not a tool a model may fire.",{"path":1891,"reason":1892},"\u002Fapi\u002Fmembers","Identity: who may act for the shop is a person's decision.",{"path":1894,"reason":1895},"\u002Fapi\u002Froles","Identity: the roles a key's codes are drawn from.",{"path":1897,"reason":1898},"\u002Fapi\u002Fauth","The caller's own session, not the shop's work.",{"path":1900,"reason":1901},"\u002Fapi\u002Faccount","The caller's own account, not the shop's work.",{"path":1903,"reason":1904},"\u002Fapi\u002Femail","The caller's own address, not the shop's work.",{"path":1906,"reason":1907},"\u002Fapi\u002Fadmin","The platform operator's console, which is not a shop at all.",{"path":1909,"reason":1910},"\u002Fapi\u002Fonboarding","Onboarding runs before a shop exists, and a key belongs to one.",{"header":1912,"detail":1913,"replay_header":1914},"Idempotency-Key","Optional on any write. Send one and a retry after a timeout repeats the first answer instead of doing the work twice. A write that was refused frees the key, so a corrected request may send the same one.","Idempotent-Replay",1793815746789]