[{"data":1,"prerenderedAt":1013},["ShallowReactive",2],{"navigation_docs":3,"-guides-webhooks":396,"-guides-webhooks-surround":1008},[4,35,61,83],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":34},"Getting Started","lucide:rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22,26,30],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation",{"title":19,"path":20,"stem":21},"Project Structure","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure",{"title":23,"path":24,"stem":25},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F5.configuration",{"title":27,"path":28,"stem":29},"Requirements","\u002Fgetting-started\u002Frequirements","1.getting-started\u002F6.requirements",{"title":31,"path":32,"stem":33},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F7.troubleshooting",false,{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":34},"Guides","lucide:book-search","\u002Fguides","2.guides",[41,45,49,53,57],{"title":42,"path":43,"stem":44},"Authentication","\u002Fguides\u002Fauthentication","2.guides\u002F1.authentication",{"title":46,"path":47,"stem":48},"Webhooks","\u002Fguides\u002Fwebhooks","2.guides\u002F2.webhooks",{"title":50,"path":51,"stem":52},"App Bridge","\u002Fguides\u002Fapp-bridge","2.guides\u002F3.app-bridge",{"title":54,"path":55,"stem":56},"Polaris Components","\u002Fguides\u002Fpolaris-components","2.guides\u002F4.polaris-components",{"title":58,"path":59,"stem":60},"GraphQL Codegen","\u002Fguides\u002Fgraphql-codegen","2.guides\u002F5.graphql-codegen",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":34},"API Reference","lucide:square-dashed-bottom-code","\u002Fapi","3.api",[67,71,75,79],{"title":68,"path":69,"stem":70},"Server Utilities","\u002Fapi\u002Fserver-utilities","3.api\u002F1.server-utilities",{"title":72,"path":73,"stem":74},"Composables","\u002Fapi\u002Fcomposables","3.api\u002F2.composables",{"title":76,"path":77,"stem":78},"Middleware","\u002Fapi\u002Fmiddleware","3.api\u002F4.middleware",{"title":80,"path":81,"stem":82},"Types","\u002Fapi\u002Ftypes","3.api\u002F5.types",{"title":84,"icon":85,"path":86,"stem":87,"children":88},"Polaris Web Components","ic:baseline-shopify","\u002Fpolaris-wc","4.polaris-wc",[89,91,124,145,166,243,264,289,318,371,384],{"title":84,"path":86,"stem":90},"4.polaris-wc\u002Findex",{"title":92,"path":93,"stem":94,"children":95,"page":34},"Layout","\u002Fpolaris-wc\u002Flayout","4.polaris-wc\u002F1.layout",[96,100,104,108,112,116,120],{"title":97,"path":98,"stem":99},"Page","\u002Fpolaris-wc\u002Flayout\u002Fpage","4.polaris-wc\u002F1.layout\u002F1.page",{"title":101,"path":102,"stem":103},"Box","\u002Fpolaris-wc\u002Flayout\u002Fbox","4.polaris-wc\u002F1.layout\u002F2.box",{"title":105,"path":106,"stem":107},"Stack","\u002Fpolaris-wc\u002Flayout\u002Fstack","4.polaris-wc\u002F1.layout\u002F3.stack",{"title":109,"path":110,"stem":111},"Grid","\u002Fpolaris-wc\u002Flayout\u002Fgrid","4.polaris-wc\u002F1.layout\u002F4.grid",{"title":113,"path":114,"stem":115},"GridItem","\u002Fpolaris-wc\u002Flayout\u002Fgrid-item","4.polaris-wc\u002F1.layout\u002F5.grid-item",{"title":117,"path":118,"stem":119},"Section","\u002Fpolaris-wc\u002Flayout\u002Fsection","4.polaris-wc\u002F1.layout\u002F6.section",{"title":121,"path":122,"stem":123},"Divider","\u002Fpolaris-wc\u002Flayout\u002Fdivider","4.polaris-wc\u002F1.layout\u002F7.divider",{"title":125,"path":126,"stem":127,"children":128,"page":34},"App Bridge Ui","\u002Fpolaris-wc\u002Fapp-bridge-ui","4.polaris-wc\u002F10.app-bridge-ui",[129,133,137,141],{"title":130,"path":131,"stem":132},"UiModal","\u002Fpolaris-wc\u002Fapp-bridge-ui\u002Fui-modal","4.polaris-wc\u002F10.app-bridge-ui\u002F1.ui-modal",{"title":134,"path":135,"stem":136},"UiTitleBar","\u002Fpolaris-wc\u002Fapp-bridge-ui\u002Fui-title-bar","4.polaris-wc\u002F10.app-bridge-ui\u002F2.ui-title-bar",{"title":138,"path":139,"stem":140},"UiSaveBar","\u002Fpolaris-wc\u002Fapp-bridge-ui\u002Fui-save-bar","4.polaris-wc\u002F10.app-bridge-ui\u002F3.ui-save-bar",{"title":142,"path":143,"stem":144},"UiNavMenu","\u002Fpolaris-wc\u002Fapp-bridge-ui\u002Fui-nav-menu","4.polaris-wc\u002F10.app-bridge-ui\u002F4.ui-nav-menu",{"title":146,"path":147,"stem":148,"children":149,"page":34},"Actions","\u002Fpolaris-wc\u002Factions","4.polaris-wc\u002F2.actions",[150,154,158,162],{"title":151,"path":152,"stem":153},"Button","\u002Fpolaris-wc\u002Factions\u002Fbutton","4.polaris-wc\u002F2.actions\u002F1.button",{"title":155,"path":156,"stem":157},"ButtonGroup","\u002Fpolaris-wc\u002Factions\u002Fbutton-group","4.polaris-wc\u002F2.actions\u002F2.button-group",{"title":159,"path":160,"stem":161},"Clickable","\u002Fpolaris-wc\u002Factions\u002Fclickable","4.polaris-wc\u002F2.actions\u002F3.clickable",{"title":163,"path":164,"stem":165},"Link","\u002Fpolaris-wc\u002Factions\u002Flink","4.polaris-wc\u002F2.actions\u002F4.link",{"title":167,"path":168,"stem":169,"children":170,"page":34},"Forms","\u002Fpolaris-wc\u002Fforms","4.polaris-wc\u002F3.forms",[171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239],{"title":172,"path":173,"stem":174},"TextField","\u002Fpolaris-wc\u002Fforms\u002Ftext-field","4.polaris-wc\u002F3.forms\u002F01.text-field",{"title":176,"path":177,"stem":178},"NumberField","\u002Fpolaris-wc\u002Fforms\u002Fnumber-field","4.polaris-wc\u002F3.forms\u002F02.number-field",{"title":180,"path":181,"stem":182},"EmailField","\u002Fpolaris-wc\u002Fforms\u002Femail-field","4.polaris-wc\u002F3.forms\u002F03.email-field",{"title":184,"path":185,"stem":186},"PasswordField","\u002Fpolaris-wc\u002Fforms\u002Fpassword-field","4.polaris-wc\u002F3.forms\u002F04.password-field",{"title":188,"path":189,"stem":190},"UrlField","\u002Fpolaris-wc\u002Fforms\u002Furl-field","4.polaris-wc\u002F3.forms\u002F05.url-field",{"title":192,"path":193,"stem":194},"MoneyField","\u002Fpolaris-wc\u002Fforms\u002Fmoney-field","4.polaris-wc\u002F3.forms\u002F06.money-field",{"title":196,"path":197,"stem":198},"ColorField","\u002Fpolaris-wc\u002Fforms\u002Fcolor-field","4.polaris-wc\u002F3.forms\u002F07.color-field",{"title":200,"path":201,"stem":202},"DateField","\u002Fpolaris-wc\u002Fforms\u002Fdate-field","4.polaris-wc\u002F3.forms\u002F08.date-field",{"title":204,"path":205,"stem":206},"TextArea","\u002Fpolaris-wc\u002Fforms\u002Ftext-area","4.polaris-wc\u002F3.forms\u002F09.text-area",{"title":208,"path":209,"stem":210},"Select","\u002Fpolaris-wc\u002Fforms\u002Fselect","4.polaris-wc\u002F3.forms\u002F10.select",{"title":212,"path":213,"stem":214},"Checkbox","\u002Fpolaris-wc\u002Fforms\u002Fcheckbox","4.polaris-wc\u002F3.forms\u002F11.checkbox",{"title":216,"path":217,"stem":218},"Switch","\u002Fpolaris-wc\u002Fforms\u002Fswitch","4.polaris-wc\u002F3.forms\u002F12.switch",{"title":220,"path":221,"stem":222},"ChoiceList","\u002Fpolaris-wc\u002Fforms\u002Fchoice-list","4.polaris-wc\u002F3.forms\u002F13.choice-list",{"title":224,"path":225,"stem":226},"Choice","\u002Fpolaris-wc\u002Fforms\u002Fchoice","4.polaris-wc\u002F3.forms\u002F14.choice",{"title":228,"path":229,"stem":230},"SearchField","\u002Fpolaris-wc\u002Fforms\u002Fsearch-field","4.polaris-wc\u002F3.forms\u002F15.search-field",{"title":232,"path":233,"stem":234},"DropZone","\u002Fpolaris-wc\u002Fforms\u002Fdrop-zone","4.polaris-wc\u002F3.forms\u002F16.drop-zone",{"title":236,"path":237,"stem":238},"ColorPicker","\u002Fpolaris-wc\u002Fforms\u002Fcolor-picker","4.polaris-wc\u002F3.forms\u002F17.color-picker",{"title":240,"path":241,"stem":242},"DatePicker","\u002Fpolaris-wc\u002Fforms\u002Fdate-picker","4.polaris-wc\u002F3.forms\u002F18.date-picker",{"title":244,"path":245,"stem":246,"children":247,"page":34},"Feedback","\u002Fpolaris-wc\u002Ffeedback","4.polaris-wc\u002F4.feedback",[248,252,256,260],{"title":249,"path":250,"stem":251},"Banner","\u002Fpolaris-wc\u002Ffeedback\u002Fbanner","4.polaris-wc\u002F4.feedback\u002F1.banner",{"title":253,"path":254,"stem":255},"Badge","\u002Fpolaris-wc\u002Ffeedback\u002Fbadge","4.polaris-wc\u002F4.feedback\u002F2.badge",{"title":257,"path":258,"stem":259},"Spinner","\u002Fpolaris-wc\u002Ffeedback\u002Fspinner","4.polaris-wc\u002F4.feedback\u002F3.spinner",{"title":261,"path":262,"stem":263},"Tooltip","\u002Fpolaris-wc\u002Ffeedback\u002Ftooltip","4.polaris-wc\u002F4.feedback\u002F4.tooltip",{"title":265,"path":266,"stem":267,"children":268,"page":34},"Navigation","\u002Fpolaris-wc\u002Fnavigation","4.polaris-wc\u002F5.navigation",[269,273,277,281,285],{"title":270,"path":271,"stem":272},"AppNav","\u002Fpolaris-wc\u002Fnavigation\u002Fapp-nav","4.polaris-wc\u002F5.navigation\u002F1.app-nav",{"title":274,"path":275,"stem":276},"Menu","\u002Fpolaris-wc\u002Fnavigation\u002Fmenu","4.polaris-wc\u002F5.navigation\u002F2.menu",{"title":278,"path":279,"stem":280},"Option","\u002Fpolaris-wc\u002Fnavigation\u002Foption","4.polaris-wc\u002F5.navigation\u002F3.option",{"title":282,"path":283,"stem":284},"OptionGroup","\u002Fpolaris-wc\u002Fnavigation\u002Foption-group","4.polaris-wc\u002F5.navigation\u002F4.option-group",{"title":286,"path":287,"stem":288},"Popover","\u002Fpolaris-wc\u002Fnavigation\u002Fpopover","4.polaris-wc\u002F5.navigation\u002F5.popover",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Data","\u002Fpolaris-wc\u002Fdata","4.polaris-wc\u002F6.data",[294,298,302,306,310,314],{"title":295,"path":296,"stem":297},"Table","\u002Fpolaris-wc\u002Fdata\u002Ftable","4.polaris-wc\u002F6.data\u002F1.table",{"title":299,"path":300,"stem":301},"TableHeader","\u002Fpolaris-wc\u002Fdata\u002Ftable-header","4.polaris-wc\u002F6.data\u002F2.table-header",{"title":303,"path":304,"stem":305},"TableHeaderRow","\u002Fpolaris-wc\u002Fdata\u002Ftable-header-row","4.polaris-wc\u002F6.data\u002F3.table-header-row",{"title":307,"path":308,"stem":309},"TableBody","\u002Fpolaris-wc\u002Fdata\u002Ftable-body","4.polaris-wc\u002F6.data\u002F4.table-body",{"title":311,"path":312,"stem":313},"TableRow","\u002Fpolaris-wc\u002Fdata\u002Ftable-row","4.polaris-wc\u002F6.data\u002F5.table-row",{"title":315,"path":316,"stem":317},"TableCell","\u002Fpolaris-wc\u002Fdata\u002Ftable-cell","4.polaris-wc\u002F6.data\u002F6.table-cell",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Content","\u002Fpolaris-wc\u002Fcontent","4.polaris-wc\u002F7.content",[323,327,331,335,339,343,347,351,355,359,363,367],{"title":324,"path":325,"stem":326},"Text","\u002Fpolaris-wc\u002Fcontent\u002Ftext","4.polaris-wc\u002F7.content\u002F01.text",{"title":328,"path":329,"stem":330},"Heading","\u002Fpolaris-wc\u002Fcontent\u002Fheading","4.polaris-wc\u002F7.content\u002F02.heading",{"title":332,"path":333,"stem":334},"Paragraph","\u002Fpolaris-wc\u002Fcontent\u002Fparagraph","4.polaris-wc\u002F7.content\u002F03.paragraph",{"title":336,"path":337,"stem":338},"Icon","\u002Fpolaris-wc\u002Fcontent\u002Ficon","4.polaris-wc\u002F7.content\u002F04.icon",{"title":340,"path":341,"stem":342},"Image","\u002Fpolaris-wc\u002Fcontent\u002Fimage","4.polaris-wc\u002F7.content\u002F05.image",{"title":344,"path":345,"stem":346},"Thumbnail","\u002Fpolaris-wc\u002Fcontent\u002Fthumbnail","4.polaris-wc\u002F7.content\u002F06.thumbnail",{"title":348,"path":349,"stem":350},"Avatar","\u002Fpolaris-wc\u002Fcontent\u002Favatar","4.polaris-wc\u002F7.content\u002F07.avatar",{"title":352,"path":353,"stem":354},"Chip","\u002Fpolaris-wc\u002Fcontent\u002Fchip","4.polaris-wc\u002F7.content\u002F08.chip",{"title":356,"path":357,"stem":358},"ClickableChip","\u002Fpolaris-wc\u002Fcontent\u002Fclickable-chip","4.polaris-wc\u002F7.content\u002F09.clickable-chip",{"title":360,"path":361,"stem":362},"ListItem","\u002Fpolaris-wc\u002Fcontent\u002Flist-item","4.polaris-wc\u002F7.content\u002F10.list-item",{"title":364,"path":365,"stem":366},"OrderedList","\u002Fpolaris-wc\u002Fcontent\u002Fordered-list","4.polaris-wc\u002F7.content\u002F11.ordered-list",{"title":368,"path":369,"stem":370},"UnorderedList","\u002Fpolaris-wc\u002Fcontent\u002Funordered-list","4.polaris-wc\u002F7.content\u002F12.unordered-list",{"title":372,"path":373,"stem":374,"children":375,"page":34},"Overlays","\u002Fpolaris-wc\u002Foverlays","4.polaris-wc\u002F8.overlays",[376,380],{"title":377,"path":378,"stem":379},"Modal","\u002Fpolaris-wc\u002Foverlays\u002Fmodal","4.polaris-wc\u002F8.overlays\u002F1.modal",{"title":381,"path":382,"stem":383},"QueryContainer","\u002Fpolaris-wc\u002Foverlays\u002Fquery-container","4.polaris-wc\u002F8.overlays\u002F2.query-container",{"title":385,"path":386,"stem":387,"children":388,"page":34},"App","\u002Fpolaris-wc\u002Fapp","4.polaris-wc\u002F9.app",[389,392],{"title":385,"path":390,"stem":391},"\u002Fpolaris-wc\u002Fapp\u002Fapp","4.polaris-wc\u002F9.app\u002F1.app",{"title":393,"path":394,"stem":395},"LoadingIndicator","\u002Fpolaris-wc\u002Fapp\u002Floading-indicator","4.polaris-wc\u002F9.app\u002F2.loading-indicator",{"id":397,"title":46,"body":398,"description":1000,"extension":1001,"links":1002,"meta":1003,"navigation":514,"path":47,"seo":1004,"stem":48,"__hash__":1007},"docs\u002F2.guides\u002F2.webhooks.md",{"type":399,"value":400,"toc":988},"minimark",[401,406,415,630,638,735,739,742,750,763,811,815,821,954,964,968,977,984],[402,403,405],"h2",{"id":404},"handling-webhooks","Handling Webhooks",[407,408,409,410,414],"p",{},"Use ",[411,412,413],"code",{},"useShopifyWebhook()"," to validate and process incoming webhooks. HMAC verification is handled automatically:",[416,417,423],"pre",{"className":418,"code":419,"filename":420,"language":421,"meta":422,"style":422},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineEventHandler(async (event) => {\n  const { topic, shop, payload } = await useShopifyWebhook(event)\n\n  switch (topic) {\n    case 'APP_UNINSTALLED':\n      \u002F\u002F Clean up shop data\n      break\n    case 'PRODUCTS_CREATE':\n      \u002F\u002F Handle new product\n      break\n  }\n\n  return { success: true }\n})\n","server\u002Fapi\u002Fwebhooks.ts","ts","",[411,424,425,466,509,516,533,552,559,565,579,585,590,596,601,622],{"__ignoreMap":422},[426,427,430,434,437,441,445,449,453,457,460,463],"span",{"class":428,"line":429},"line",1,[426,431,433],{"class":432},"s7zQu","export",[426,435,436],{"class":432}," default",[426,438,440],{"class":439},"s2Zo4"," defineEventHandler",[426,442,444],{"class":443},"sTEyZ","(",[426,446,448],{"class":447},"spNyl","async",[426,450,452],{"class":451},"sMK4o"," (",[426,454,456],{"class":455},"sHdIc","event",[426,458,459],{"class":451},")",[426,461,462],{"class":447}," =>",[426,464,465],{"class":451}," {\n",[426,467,469,472,475,478,481,484,486,489,492,495,498,501,504,506],{"class":428,"line":468},2,[426,470,471],{"class":447},"  const",[426,473,474],{"class":451}," {",[426,476,477],{"class":443}," topic",[426,479,480],{"class":451},",",[426,482,483],{"class":443}," shop",[426,485,480],{"class":451},[426,487,488],{"class":443}," payload",[426,490,491],{"class":451}," }",[426,493,494],{"class":451}," =",[426,496,497],{"class":432}," await",[426,499,500],{"class":439}," useShopifyWebhook",[426,502,444],{"class":503},"swJcz",[426,505,456],{"class":443},[426,507,508],{"class":503},")\n",[426,510,512],{"class":428,"line":511},3,[426,513,515],{"emptyLinePlaceholder":514},true,"\n",[426,517,519,522,524,527,530],{"class":428,"line":518},4,[426,520,521],{"class":432},"  switch",[426,523,452],{"class":503},[426,525,526],{"class":443},"topic",[426,528,529],{"class":503},") ",[426,531,532],{"class":451},"{\n",[426,534,536,539,542,546,549],{"class":428,"line":535},5,[426,537,538],{"class":432},"    case",[426,540,541],{"class":451}," '",[426,543,545],{"class":544},"sfazB","APP_UNINSTALLED",[426,547,548],{"class":451},"'",[426,550,551],{"class":451},":\n",[426,553,555],{"class":428,"line":554},6,[426,556,558],{"class":557},"sHwdD","      \u002F\u002F Clean up shop data\n",[426,560,562],{"class":428,"line":561},7,[426,563,564],{"class":432},"      break\n",[426,566,568,570,572,575,577],{"class":428,"line":567},8,[426,569,538],{"class":432},[426,571,541],{"class":451},[426,573,574],{"class":544},"PRODUCTS_CREATE",[426,576,548],{"class":451},[426,578,551],{"class":451},[426,580,582],{"class":428,"line":581},9,[426,583,584],{"class":557},"      \u002F\u002F Handle new product\n",[426,586,588],{"class":428,"line":587},10,[426,589,564],{"class":432},[426,591,593],{"class":428,"line":592},11,[426,594,595],{"class":451},"  }\n",[426,597,599],{"class":428,"line":598},12,[426,600,515],{"emptyLinePlaceholder":514},[426,602,604,607,609,612,615,619],{"class":428,"line":603},13,[426,605,606],{"class":432},"  return",[426,608,474],{"class":451},[426,610,611],{"class":503}," success",[426,613,614],{"class":451},":",[426,616,618],{"class":617},"sfNiH"," true",[426,620,621],{"class":451}," }\n",[426,623,625,628],{"class":428,"line":624},14,[426,626,627],{"class":451},"}",[426,629,508],{"class":443},[631,632,634,637],"h3",{"id":633},"webhookcontext-return-type",[411,635,636],{},"WebhookContext"," return type",[639,640,641,657],"table",{},[642,643,644],"thead",{},[645,646,647,651,654],"tr",{},[648,649,650],"th",{},"Property",[648,652,653],{},"Type",[648,655,656],{},"Description",[658,659,660,677,691,706,721],"tbody",{},[645,661,662,667,672],{},[663,664,665],"td",{},[411,666,526],{},[663,668,669],{},[411,670,671],{},"string",[663,673,674,675,459],{},"The webhook topic (e.g., ",[411,676,545],{},[645,678,679,684,688],{},[663,680,681],{},[411,682,683],{},"shop",[663,685,686],{},[411,687,671],{},[663,689,690],{},"The shop domain",[645,692,693,698,703],{},[663,694,695],{},[411,696,697],{},"session",[663,699,700],{},[411,701,702],{},"Session | undefined",[663,704,705],{},"The offline session for the shop (if available)",[645,707,708,713,718],{},[663,709,710],{},[411,711,712],{},"payload",[663,714,715],{},[411,716,717],{},"Record\u003Cstring, any>",[663,719,720],{},"The parsed webhook payload",[645,722,723,728,732],{},[663,724,725],{},[411,726,727],{},"apiVersion",[663,729,730],{},[411,731,671],{},[663,733,734],{},"The API version of the webhook",[402,736,738],{"id":737},"registering-webhooks","Registering Webhooks",[407,740,741],{},"There are two approaches to registering webhooks:",[631,743,745,746,749],{"id":744},"via-shopifyapptoml-recommended","Via ",[411,747,748],{},"shopify.app.toml"," (recommended)",[407,751,752,753,755,756,614],{},"For most apps, define your webhooks in ",[411,754,748],{},". Shopify handles registration automatically via ",[757,758,762],"a",{"href":759,"rel":760},"https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fapps\u002Fbuild\u002Fwebhooks\u002Fsubscribe#subscribe-to-webhooks-using-a-toml-file",[761],"nofollow","managed install",[416,764,768],{"className":765,"code":766,"filename":748,"language":767,"meta":422,"style":422},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[webhooks]\n\n  [[webhooks.subscriptions]]\n  topics = [\"app\u002Funinstalled\"]\n  uri = \"\u002Fapi\u002Fwebhooks\"\n\n  [[webhooks.subscriptions]]\n  topics = [\"products\u002Fcreate\", \"products\u002Fupdate\"]\n  uri = \"\u002Fapi\u002Fwebhooks\"\n","toml",[411,769,770,775,779,784,789,794,798,802,807],{"__ignoreMap":422},[426,771,772],{"class":428,"line":429},[426,773,774],{},"[webhooks]\n",[426,776,777],{"class":428,"line":468},[426,778,515],{"emptyLinePlaceholder":514},[426,780,781],{"class":428,"line":511},[426,782,783],{},"  [[webhooks.subscriptions]]\n",[426,785,786],{"class":428,"line":518},[426,787,788],{},"  topics = [\"app\u002Funinstalled\"]\n",[426,790,791],{"class":428,"line":535},[426,792,793],{},"  uri = \"\u002Fapi\u002Fwebhooks\"\n",[426,795,796],{"class":428,"line":554},[426,797,515],{"emptyLinePlaceholder":514},[426,799,800],{"class":428,"line":561},[426,801,783],{},[426,803,804],{"class":428,"line":567},[426,805,806],{},"  topics = [\"products\u002Fcreate\", \"products\u002Fupdate\"]\n",[426,808,809],{"class":428,"line":581},[426,810,793],{},[631,812,814],{"id":813},"programmatically-per-shop","Programmatically (per-shop)",[407,816,409,817,820],{},[411,818,819],{},"registerShopifyWebhooks()"," when you need dynamic, per-shop webhook registration:",[416,822,825],{"className":418,"code":823,"filename":824,"language":421,"meta":422,"style":422},"import { configureShopify, registerShopifyWebhooks } from '#shopify\u002Fserver'\n\nexport default defineNitroPlugin(() => {\n  configureShopify({\n    hooks: {\n      afterAuth: async ({ session }) => {\n        await registerShopifyWebhooks(session)\n      }\n    }\n  })\n})\n","server\u002Fplugins\u002Fshopify.ts",[411,826,827,855,859,877,886,895,918,931,936,941,948],{"__ignoreMap":422},[426,828,829,832,834,837,839,842,844,847,849,852],{"class":428,"line":429},[426,830,831],{"class":432},"import",[426,833,474],{"class":451},[426,835,836],{"class":443}," configureShopify",[426,838,480],{"class":451},[426,840,841],{"class":443}," registerShopifyWebhooks",[426,843,491],{"class":451},[426,845,846],{"class":432}," from",[426,848,541],{"class":451},[426,850,851],{"class":544},"#shopify\u002Fserver",[426,853,854],{"class":451},"'\n",[426,856,857],{"class":428,"line":468},[426,858,515],{"emptyLinePlaceholder":514},[426,860,861,863,865,868,870,873,875],{"class":428,"line":511},[426,862,433],{"class":432},[426,864,436],{"class":432},[426,866,867],{"class":439}," defineNitroPlugin",[426,869,444],{"class":443},[426,871,872],{"class":451},"()",[426,874,462],{"class":447},[426,876,465],{"class":451},[426,878,879,882,884],{"class":428,"line":518},[426,880,881],{"class":439},"  configureShopify",[426,883,444],{"class":503},[426,885,532],{"class":451},[426,887,888,891,893],{"class":428,"line":535},[426,889,890],{"class":503},"    hooks",[426,892,614],{"class":451},[426,894,465],{"class":451},[426,896,897,900,902,905,908,911,914,916],{"class":428,"line":554},[426,898,899],{"class":439},"      afterAuth",[426,901,614],{"class":451},[426,903,904],{"class":447}," async",[426,906,907],{"class":451}," ({",[426,909,910],{"class":455}," session",[426,912,913],{"class":451}," })",[426,915,462],{"class":447},[426,917,465],{"class":451},[426,919,920,923,925,927,929],{"class":428,"line":561},[426,921,922],{"class":432},"        await",[426,924,841],{"class":439},[426,926,444],{"class":503},[426,928,697],{"class":443},[426,930,508],{"class":503},[426,932,933],{"class":428,"line":567},[426,934,935],{"class":451},"      }\n",[426,937,938],{"class":428,"line":581},[426,939,940],{"class":451},"    }\n",[426,942,943,946],{"class":428,"line":587},[426,944,945],{"class":451},"  }",[426,947,508],{"class":503},[426,949,950,952],{"class":428,"line":592},[426,951,627],{"class":451},[426,953,508],{"class":443},[955,956,957,958,960,961,963],"tip",{},"For most apps, registering webhooks via ",[411,959,748],{}," is sufficient. Use ",[411,962,819],{}," only when you need dynamic, per-shop webhook registration.",[402,965,967],{"id":966},"webhook-security","Webhook Security",[407,969,970,972,973,976],{},[411,971,413],{}," automatically handles HMAC verification using your ",[411,974,975],{},"apiSecretKey",". If the HMAC is invalid, the request is rejected before your handler code runs.",[978,979,980,981,983],"warning",{},"Do not use any middleware that consumes the raw request body before ",[411,982,413],{}," — the raw body is needed for HMAC verification.",[985,986,987],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":422,"searchDepth":468,"depth":468,"links":989},[990,994,999],{"id":404,"depth":468,"text":405,"children":991},[992],{"id":633,"depth":511,"text":993},"WebhookContext return type",{"id":737,"depth":468,"text":738,"children":995},[996,998],{"id":744,"depth":511,"text":997},"Via shopify.app.toml (recommended)",{"id":813,"depth":511,"text":814},{"id":966,"depth":468,"text":967},"Handle and register Shopify webhooks with HMAC verification.","md",null,{},{"title":1005,"description":1006},"Webhooks — shopify-app-nuxt","Handle incoming Shopify webhooks with automatic HMAC validation, parse payloads, and register webhooks programmatically.","ZE4ZmNiyzsGdGqNG1KjYq2_tLKOS-gyHqoWhNoz_3CE",[1009,1011],{"title":42,"path":43,"stem":44,"description":1010,"children":-1},"Authenticate admin requests, handle OAuth, and manage sessions in shopify-app-nuxt.",{"title":50,"path":51,"stem":52,"description":1012,"children":-1},"Use Shopify App Bridge and authenticated fetch in your embedded app.",1776217202080]