[{"data":1,"prerenderedAt":816},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Farticles\u002Fsign-bundled-products-with-hmac":314,"no-guide:sign-bundled-products-with-hmac":59,"article:\u002Fhelp\u002Farticles\u002Fsign-bundled-products-with-hmac":555,"story:contact":571,"help:tree:1a658f41-e64c-4462-b450-2762dc7c4409":761,"_apollo:default":815},{"name":4,"created_at":5,"published_at":6,"updated_at":7,"id":8,"uuid":9,"content":10,"slug":57,"full_slug":58,"sort_by_date":59,"position":60,"tag_list":61,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":63,"first_published_at":64,"release_id":59,"lang":65,"path":59,"alternates":66,"default_full_slug":59,"translated_slugs":59},"Help Center Header","2024-08-09T18:06:34.939Z","2024-10-21T21:58:39.217Z","2024-10-21T21:58:39.232Z",10082752,"3e9b88f7-c163-4657-a2f2-62532d600fad",{"_uid":11,"link":12,"badge":16,"items":17,"title":13,"buttons":50,"new_tab":24,"submenu":51,"alignment":13,"component":52,"badge_link":53,"top_menu_items":56},"e5645a1a-f991-40e8-8d67-e40ebc082b5a",{"id":13,"url":13,"linktype":14,"fieldtype":15,"cached_url":13},"","story","multilink","Help Center",[18,27,34,39,44],{"_uid":19,"link":20,"title":23,"new_tab":24,"submenu":25,"component":26},"5cbe2861-1f49-4166-97da-a4dddd8105e3",{"id":21,"url":13,"linktype":14,"fieldtype":15,"cached_url":22},"4c0a2d99-ec30-4579-8ef1-6bf5564d4839","help\u002Fcategories\u002F","Articles",false,[],"header___item",{"_uid":28,"link":29,"title":32,"new_tab":33,"component":26},"1c8edeb5-b9e9-4cb8-b1c6-c1f292f7d7cd",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},"https:\u002F\u002Fwiki.foxycart.com\u002F","url","Documentation",true,{"_uid":35,"link":36,"title":38,"new_tab":33,"component":26},"8d7df70e-f087-4da0-b616-6f0e9a5af35c",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},"https:\u002F\u002Fapi.foxycart.com\u002F","API Documentation",{"_uid":40,"link":41,"title":43,"new_tab":33,"component":26},"f76e7944-23d5-4652-87e4-cdae79272762",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},"https:\u002F\u002Fstatus.foxy.io\u002F","System Status",{"_uid":45,"link":46,"title":49,"new_tab":24,"component":26},"0de16771-4c84-466c-a1da-d8568113c71f",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"01e4e370-f9b9-45af-8fa9-f15540699b0d","contact","Contact Us",[],[],"header",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},"4a679eb7-662d-4ea4-a976-5a2acbf0b663","help\u002F",[],"help-header","navigation\u002Fhelp-header",null,20,[],10082747,"71b81c2e-5e09-48a1-a397-a3c72fcd344a","2022-09-21T14:50:25.655Z","default",[],{"name":68,"created_at":69,"published_at":70,"updated_at":71,"id":72,"uuid":73,"content":74,"slug":243,"full_slug":244,"sort_by_date":59,"position":245,"tag_list":246,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":247,"first_published_at":248,"release_id":59,"lang":65,"path":59,"alternates":249,"default_full_slug":59,"translated_slugs":59},"Default Footer","2024-08-09T18:06:59.024Z","2025-09-04T06:24:46.223Z","2025-09-04T06:24:46.241Z",10082753,"e59e67ac-248a-482f-84a1-53d4f318186a",{"_uid":75,"about":76,"logos":77,"socials":82,"sections":108,"component":225,"cta_title":226,"bottom_links":227,"cta_subtitle":241,"cta_button_link":242,"cta_button_text":183},"830983f5-c4c4-43c8-b150-86a5e3fa6dc8","Foxy’s hosted cart & payment page allow you to sell anything, using your existing website or platform.",[78],{"id":79,"alt":13,"name":13,"focus":13,"title":13,"filename":80,"copyright":13,"fieldtype":81},14760,"https:\u002F\u002Fa-us.storyblok.com\u002Ff\u002F1001040\u002Fx\u002F3b030847ec\u002Fb-corp.svg","asset",[83,90,96,102],{"_uid":84,"icon":85,"link":86,"name":88,"component":89},"faf0a618-ea94-42ea-9182-03be18c43216","fa-facebook",{"id":13,"url":87,"linktype":31,"fieldtype":15,"cached_url":87},"https:\u002F\u002Fwww.facebook.com\u002Ffoxycart","Facebook","footer___social",{"_uid":91,"icon":92,"link":93,"name":95,"component":89},"14309c18-7e79-423e-b375-34555bac0811","fa-instagram",{"id":13,"url":94,"linktype":31,"fieldtype":15,"cached_url":94},"https:\u002F\u002Fwww.instagram.com\u002Ffoxy_io","Instagram",{"_uid":97,"icon":98,"link":99,"name":101,"component":89},"8f7fe7cf-0dd3-4596-8334-226ea466716a","fa-linkedin",{"id":13,"url":100,"linktype":31,"fieldtype":15,"cached_url":100},"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Ffoxycart.com","LinkedIn",{"_uid":103,"icon":104,"link":105,"name":107,"component":89},"90a675b4-dd97-40b5-be09-00a87223d4c5","fa-youtube",{"id":13,"url":106,"linktype":31,"fieldtype":15,"cached_url":106},"https:\u002F\u002Fwww.youtube.com\u002Fuser\u002Ffoxycart","Youtube",[109,139,184,206],{"_uid":110,"name":111,"items":112,"component":138},"82849945-282f-488c-b18d-a8d2252f514a","Company",[113,120,126,132],{"_uid":114,"link":115,"title":118,"new_tab":24,"component":119},"1f699ab1-938b-4d9d-9825-aabcbe6f57fe",{"id":116,"url":13,"linktype":14,"fieldtype":15,"cached_url":117},"63634293-a749-4226-9439-9f38ee6dcda0","about-us","About Us","footer___menu_items",{"_uid":121,"link":122,"title":125,"new_tab":24,"component":119},"b26b00f1-a0e7-4be2-8ab3-428b8cc841f8",{"id":123,"url":13,"linktype":14,"fieldtype":15,"cached_url":124},"26cb7c55-faed-4a77-a291-1552d4111b3e","how-foxy-works","How Foxy Works",{"_uid":127,"link":128,"title":131,"new_tab":24,"component":119},"b40c68a0-1ceb-4226-9515-6176534f61fe",{"id":129,"url":13,"linktype":14,"fieldtype":15,"cached_url":130},"dc6657d7-7f4f-4c0d-b781-e971b038ee26","for-good","Foxy For Good",{"_uid":133,"link":134,"title":137,"new_tab":24,"component":119},"3ad0c134-bef9-4fff-b891-e09f16109036",{"id":135,"url":13,"linktype":14,"fieldtype":15,"cached_url":136},"23cae210-baf4-4588-9862-d09f4f52ccd2","brand-assets","Brand Assets","footer___section",{"_uid":140,"name":141,"items":142,"component":138},"a6805fa8-ac60-47f1-b8f0-f27aded0afbe","Product",[143,149,155,161,167,173,179],{"_uid":144,"link":145,"title":148,"new_tab":24,"component":119},"b39c8a4e-2383-486f-b76a-11fbb15d8134",{"id":146,"url":13,"linktype":14,"fieldtype":15,"cached_url":147},"bb04690f-fe98-4ce6-80be-05b950f2364f","features\u002F","Features",{"_uid":150,"link":151,"title":154,"new_tab":24,"component":119},"64f8a41f-c181-433d-bc0a-fc94e71ecbf6",{"id":152,"url":13,"linktype":14,"fieldtype":15,"cached_url":153},"c450c58d-761d-48c0-a9af-0b064611689b","pricing","Pricing",{"_uid":156,"link":157,"title":160,"new_tab":24,"component":119},"6e0b287f-fd8c-4146-9e0e-0ab0b5c9ce3c",{"id":158,"url":13,"linktype":14,"fieldtype":15,"cached_url":159},"fab20ad9-e76a-4947-b709-3a6fdfa88028","blog\u002Fcategories\u002Fproduct-updates","Product Updates",{"_uid":162,"link":163,"title":166,"new_tab":24,"component":119},"47e5a074-a6b5-4f1c-8c2f-89a2ae9f83eb",{"id":164,"url":13,"linktype":14,"fieldtype":15,"cached_url":165},"d2c83612-d611-47f3-a3b4-ca7fe08540b8","changelogs\u002F","Changelogs",{"_uid":168,"link":169,"title":172,"new_tab":24,"component":119},"b5c08774-542f-4ffd-b357-c94d674488b9",{"id":170,"url":13,"linktype":14,"fieldtype":15,"cached_url":171},"08876121-0df3-4ed9-aa11-902b3e41cd02","whats-next","What's Next",{"_uid":174,"link":175,"title":178,"new_tab":24,"component":119},"9c2704ed-6d9f-43e1-9e67-c8d91c083288",{"id":176,"url":13,"linktype":14,"fieldtype":15,"cached_url":177},"056a7857-b18f-4025-8f97-91a38fc19bc8","compare\u002F","Compare",{"_uid":180,"link":181,"title":183,"new_tab":24,"component":119},"5f2db35b-674b-406a-8fa7-d246633af9fe",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"https:\u002F\u002Fadmin.foxy.io\u002Fsign-up","Try Foxy Free",{"_uid":185,"name":186,"items":187,"component":138},"63fa1f29-4252-4640-9922-fe310e69e54a","Security",[188,194,200],{"_uid":189,"link":190,"title":193,"new_tab":24,"component":119},"1158ddb6-9eb0-466f-8eb6-7ca2ae66c8b8",{"id":191,"url":13,"linktype":14,"fieldtype":15,"cached_url":192},"1f58fb2c-8681-4742-b6e8-09999beae9f6","security-contact","Security Contact",{"_uid":195,"link":196,"title":199,"new_tab":24,"component":119},"9a79c54a-6022-4dfd-854b-766f5e4703ba",{"id":197,"url":13,"linktype":14,"fieldtype":15,"cached_url":198},"55cbfcc3-425a-4261-8037-54e919851d2d","pci","PCI Compliance",{"_uid":201,"link":202,"title":205,"new_tab":24,"component":119},"0b85f5b6-9534-4071-b323-b39d053dd4d7",{"id":203,"url":13,"linktype":14,"fieldtype":15,"cached_url":204},"c3ac0fe3-83e2-4879-afbd-d4c83e1590df","help\u002Farticles\u002Four-official-domains-public-code","Domains & Codebases",{"_uid":207,"name":208,"items":209,"component":138},"998ded67-d107-49f4-8154-ca6be51671ec","Support",[210,213,216,219,222],{"_uid":211,"link":212,"title":16,"new_tab":24,"component":119},"594ffd35-3049-4004-bb08-0db568ebd819",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},{"_uid":214,"link":215,"title":32,"new_tab":33,"component":119},"0a1a55ab-a985-4f9d-8b42-26da714d0c1c",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},{"_uid":217,"link":218,"title":38,"new_tab":33,"component":119},"61e0b7c8-aadf-419b-a339-b3ccabc65bf4",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},{"_uid":220,"link":221,"title":43,"new_tab":33,"component":119},"fd67a89e-1c54-4d31-94b5-64be999062d6",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},{"_uid":223,"link":224,"title":49,"new_tab":24,"component":119},"231a6f71-e996-4ad4-b033-d4d5542f34f0",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"footer","Get started with our *unlimited free trial*.",[228,235],{"_uid":229,"link":230,"text":233,"component":234},"f0b77210-2632-45a2-8436-e57cad84d01a",{"id":231,"url":13,"linktype":14,"fieldtype":15,"cached_url":232},"60ba16a2-c1f4-485f-b978-8d2eeeafbf5a","terms-of-service","Terms of Service","footer___bottom_links",{"_uid":236,"link":237,"text":240,"component":234},"4bd497b0-993f-4b4d-a5b7-8a49c7c8fec9",{"id":238,"url":13,"linktype":14,"fieldtype":15,"cached_url":239},"332302b9-1d18-4016-b9c8-9b33c72d782b","privacy-policy","Privacy Policy","No credit card required.",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"default-footer","navigation\u002Fdefault-footer",50,[],"11006268-07f9-41e9-96f3-c51fb723399d","2022-09-21T20:39:02.357Z",[],{"name":251,"created_at":252,"published_at":253,"updated_at":254,"id":255,"uuid":256,"content":257,"slug":279,"full_slug":282,"sort_by_date":59,"position":283,"tag_list":284,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":285,"first_published_at":286,"release_id":59,"lang":65,"path":59,"alternates":287,"default_full_slug":59,"translated_slugs":59},"Search","2024-10-21T22:08:54.973Z","2025-05-26T09:17:25.790Z","2025-05-26T09:17:25.804Z",13592003,"14cbc359-9ac1-4a7a-a8de-ad4ac8ef26d4",{"_uid":258,"name":251,"indices":259,"summary":13,"component":279,"primary_image":280},"5e4a56e8-76f1-4790-b3a7-70f1be97d042",[260,265,269,274],{"key":261,"_uid":262,"icon":13,"name":263,"component":264},"all","c12a3210-7323-4273-8217-5215e52efe84","All","index",{"key":266,"_uid":267,"icon":268,"name":23,"component":264},"help_center_article","5acff080-95e4-44d3-8dcf-1b19720af382","fa-file-alt",{"key":270,"_uid":271,"icon":272,"name":273,"component":264},"help_center_guide","b8fbc206-c083-471e-a1f0-0ebeb90a669d","fa-book","Guides",{"key":275,"_uid":276,"icon":277,"name":278,"component":264},"blog_post","23419e83-2e56-4c4c-8a05-9fd1b3c9a9bd","fa-file-image","Blog Posts","search",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":281},{},"navigation\u002Fsearch",60,[],"11e1fd31-95cd-4fc9-b736-8b8910663e6c","2024-10-21T23:17:05.904Z",[],{"name":23,"created_at":289,"published_at":290,"updated_at":291,"id":292,"uuid":21,"content":293,"slug":307,"full_slug":22,"sort_by_date":59,"position":308,"tag_list":309,"is_startpage":33,"parent_id":310,"meta_data":59,"group_id":311,"first_published_at":312,"release_id":59,"lang":65,"path":59,"alternates":313,"default_full_slug":59,"translated_slugs":59},"2022-09-19T14:42:29.685Z","2024-07-30T18:17:22.506Z","2024-07-30T18:17:22.525Z",2660,{"_uid":294,"icon":13,"name":23,"guides":295,"pinned":24,"summary":296,"category":13,"component":297,"blog_posts":298,"content_hub":24,"icon_custom":299,"case_studies":300,"faq_sections":301,"help_articles":302,"featured_guides":303,"mailbox_category":13,"featured_articles":304,"featured_blog_posts":305,"featured_case_studies":306},"d6dae89a-907a-4bf7-82de-fe2ba875ee6e",[],"Get your questions answered with our browsable knowledge base.","help_center_category",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"filename":13,"copyright":59,"fieldtype":81},[],[],[],[],[],[],[],"categories",530,[],2658,"19ebcdd2-027f-47f5-9a5b-a8992c959578","2022-09-19T16:24:39.219Z",[],{"name":315,"created_at":316,"published_at":317,"updated_at":318,"id":319,"uuid":320,"content":321,"slug":548,"full_slug":549,"sort_by_date":59,"position":550,"tag_list":551,"is_startpage":24,"parent_id":552,"meta_data":59,"group_id":553,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":554,"default_full_slug":59,"translated_slugs":59},"Sign bundled products with HMAC","2026-06-29T20:23:05.407Z","2026-06-29T20:50:23.674Z","2026-06-29T20:50:23.697Z",192819140276070,"1a658f41-e64c-4462-b450-2762dc7c4409",{"_uid":322,"body":323,"name":315,"image":543,"pinned":24,"summary":545,"category":546,"component":266,"related_articles":547},"632e1eb3-f4dc-429e-aed2-f02c35fe16c5",{"type":324,"content":325},"doc",[326,333,340,361,387,393,402,407,412,458,463,473,478,483,488,493],{"type":327,"attrs":328,"content":329},"paragraph",{"textAlign":59},[330],{"text":331,"type":332},"Signing bundled products with HMAC requires a small change to the standard signing process. Because child products often have a different price when sold as part of a bundle, Foxy requires the hash for each child product parameter to include both the child code and the parent code.","text",{"type":334,"attrs":335,"content":337},"heading",{"level":336,"textAlign":59},2,[338],{"text":339,"type":332},"How it works",{"type":327,"attrs":341,"content":342},{"textAlign":59},[343,345,349,351,354,356,359],{"text":344,"type":332},"For child product parameters, concatenate the child ",{"text":346,"type":332,"marks":347},"code",[348],{"type":346},{"text":350,"type":332}," and parent ",{"text":346,"type":332,"marks":352},[353],{"type":346},{"text":355,"type":332}," together (in that order, no separator) and use that combined string as the ",{"text":346,"type":332,"marks":357},[358],{"type":346},{"text":360,"type":332}," when generating the hash.",{"type":327,"attrs":362,"content":363},{"textAlign":59},[364,366,369,371,375,377,380,381,385],{"text":365,"type":332},"For example, a child product with ",{"text":346,"type":332,"marks":367},[368],{"type":346},{"text":370,"type":332}," of ",{"text":372,"type":332,"marks":373},"poster",[374],{"type":346},{"text":376,"type":332}," belonging to a parent with ",{"text":346,"type":332,"marks":378},[379],{"type":346},{"text":370,"type":332},{"text":382,"type":332,"marks":383},"shirt",[384],{"type":346},{"text":386,"type":332},":",{"type":388,"attrs":389,"content":390},"code_block",{"class":59},[391],{"text":392,"type":332},"hash_hmac('sha256', 'postershirtnameMy Poster', $api_key);\nhash_hmac('sha256', 'postershirtprice1.99', $api_key);\n",{"type":327,"attrs":394,"content":395},{"textAlign":59},[396,398,401],{"text":397,"type":332},"The parent product is signed as normal using only its own ",{"text":346,"type":332,"marks":399},[400],{"type":346},{"text":386,"type":332},{"type":388,"attrs":403,"content":404},{"class":59},[405],{"text":406,"type":332},"hash_hmac('sha256', 'shirtnameExample T-Shirt', $api_key);\nhash_hmac('sha256', 'shirtprice25', $api_key);\n",{"type":334,"attrs":408,"content":409},{"level":336,"textAlign":59},[410],{"text":411,"type":332},"Steps",{"type":413,"attrs":414,"content":416},"ordered_list",{"order":415},1,[417,430,451],{"type":418,"content":419},"list_item",[420],{"type":327,"attrs":421,"content":422},{"textAlign":59},[423,425,428],{"text":424,"type":332},"Sign the parent product parameters as normal, using only the parent ",{"text":346,"type":332,"marks":426},[427],{"type":346},{"text":429,"type":332},".",{"type":418,"content":431},[432],{"type":327,"attrs":433,"content":434},{"textAlign":59},[435,437,440,442,445,447,450],{"text":436,"type":332},"For each child product parameter, concatenate the child ",{"text":346,"type":332,"marks":438},[439],{"type":346},{"text":441,"type":332}," + parent ",{"text":346,"type":332,"marks":443},[444],{"type":346},{"text":446,"type":332}," into a single string and use that as the ",{"text":346,"type":332,"marks":448},[449],{"type":346},{"text":360,"type":332},{"type":418,"content":452},[453],{"type":327,"attrs":454,"content":455},{"textAlign":59},[456],{"text":457,"type":332},"Apply the resulting hashes to the child product inputs as you would for any other signed field.",{"type":334,"attrs":459,"content":460},{"level":336,"textAlign":59},[461],{"text":462,"type":332},"PHP helper function",{"type":327,"attrs":464,"content":465},{"textAlign":59},[466,468,471],{"text":467,"type":332},"Pass the parent ",{"text":346,"type":332,"marks":469},[470],{"type":346},{"text":472,"type":332}," as the fourth argument to the helper function when signing child product parameters:",{"type":388,"attrs":474,"content":475},{"class":59},[476],{"text":477,"type":332},"get_verification('code', 'poster', 'poster', 'shirt');\nget_verification('name', 'My Poster', 'poster', 'shirt');\nget_verification('price', '1.99', 'poster', 'shirt');\n",{"type":327,"attrs":479,"content":480},{"textAlign":59},[481],{"text":482,"type":332},"In a form, the signed child product inputs look like this:",{"type":388,"attrs":484,"content":485},{"class":59},[486],{"text":487,"type":332},"\u003Cinput type=\"hidden\" name=\"\u003C?php echo get_verification('code', 'poster', 'poster', 'shirt'); ?>\" value=\"poster\" \u002F>\n\u003Cinput type=\"hidden\" name=\"\u003C?php echo get_verification('name', 'My Poster', 'poster', 'shirt'); ?>\" value=\"My Poster\" \u002F>\n\u003Cinput type=\"hidden\" name=\"\u003C?php echo get_verification('price', '1.99', 'poster', 'shirt'); ?>\" value=\"1.99\" \u002F>\n\u003Cinput type=\"hidden\" name=\"\u003C?php echo get_verification('parent_code', 'shirt', 'poster', 'shirt'); ?>\" value=\"shirt\" \u002F>\n",{"type":334,"attrs":489,"content":490},{"level":336,"textAlign":59},[491],{"text":492,"type":332},"Notes",{"type":494,"content":495},"bullet_list",[496,509,522],{"type":418,"content":497},[498],{"type":327,"attrs":499,"content":500},{"textAlign":59},[501,503,507],{"text":502,"type":332},"The combined code format is ",{"text":504,"type":332,"marks":505},"{childcode}{parentcode}",[506],{"type":346},{"text":508,"type":332}," with no separator.",{"type":418,"content":510},[511],{"type":327,"attrs":512,"content":513},{"textAlign":59},[514,516,520],{"text":515,"type":332},"The ",{"text":517,"type":332,"marks":518},"parent_code",[519],{"type":346},{"text":521,"type":332}," parameter itself must also be signed using the same combined code.",{"type":418,"content":523},[524],{"type":327,"attrs":525,"content":526},{"textAlign":59},[527,529,533,535,542],{"text":528,"type":332},"For select or radio inputs on child products, append the hash to the ",{"text":530,"type":332,"marks":531},"value",[532],{"type":346},{"text":534,"type":332}," attribute as you would for any other form — see ",{"text":536,"type":332,"marks":537},"Sign product forms with HMAC",[538],{"type":539,"attrs":540},"link",{"href":541,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fsign-product-forms-with-hmac",{"text":429,"type":332},{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":544},{},"How to sign add to cart links and forms for bundled products using HMAC.","ff9269e2-2402-422e-aa80-19acc150b78a",[],"sign-bundled-products-with-hmac","help\u002Farticles\u002Fsign-bundled-products-with-hmac",-2510,[],2659,"80018a87-ad0f-4509-bb5c-a7a65c348b6a",[],{"html":556,"sections":557,"segments":567},"\u003Cp>Signing bundled products with HMAC requires a small change to the standard signing process. Because child products often have a different price when sold as part of a bundle, Foxy requires the hash for each child product parameter to include both the child code and the parent code.\u003C\u002Fp>\u003Csection id=\"how-it-works\" data-title=\"How it works\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"how-it-works\">How it works\u003C\u002Fh2>\u003Cp>For child product parameters, concatenate the child \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> and parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> together (in that order, no separator) and use that combined string as the \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> when generating the hash.\u003C\u002Fp>\u003Cp>For example, a child product with \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> of \u003Ccode class=\"badge bg-soft-danger text-danger\">poster\u003C\u002Fcode> belonging to a parent with \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> of \u003Ccode class=\"badge bg-soft-danger text-danger\">shirt\u003C\u002Fcode>:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>hash_hmac(&#x27;sha256&#x27;, &#x27;postershirtnameMy Poster&#x27;, $api_key);\nhash_hmac(&#x27;sha256&#x27;, &#x27;postershirtprice1.99&#x27;, $api_key);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>The parent product is signed as normal using only its own \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode>:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>hash_hmac(&#x27;sha256&#x27;, &#x27;shirtnameExample T-Shirt&#x27;, $api_key);\nhash_hmac(&#x27;sha256&#x27;, &#x27;shirtprice25&#x27;, $api_key);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"steps\" data-title=\"Steps\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"steps\">Steps\u003C\u002Fh2>\u003Col class=\"step step-icon-sm step-dashed step-border-last-0 mt-3\">\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">1\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>Sign the parent product parameters as normal, using only the parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">2\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>For each child product parameter, concatenate the child \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> + parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> into a single string and use that as the \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> when generating the hash.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">3\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>Apply the resulting hashes to the child product inputs as you would for any other signed field.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fsection>\u003Csection id=\"php-helper-function\" data-title=\"PHP helper function\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"php-helper-function\">PHP helper function\u003C\u002Fh2>\u003Cp>Pass the parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> as the fourth argument to the helper function when signing child product parameters:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>get_verification(&#x27;code&#x27;, &#x27;poster&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;);\nget_verification(&#x27;name&#x27;, &#x27;My Poster&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;);\nget_verification(&#x27;price&#x27;, &#x27;1.99&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;);\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>In a form, the signed child product inputs look like this:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">input\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">type\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;hidden&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;&lt;?php echo get_verification(&#x27;code&#x27;, &#x27;poster&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;); ?&gt;&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">value\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;poster&quot;\u003C\u002Fspan> \u002F&gt;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">input\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">type\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;hidden&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;&lt;?php echo get_verification(&#x27;name&#x27;, &#x27;My Poster&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;); ?&gt;&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">value\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;My Poster&quot;\u003C\u002Fspan> \u002F&gt;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">input\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">type\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;hidden&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;&lt;?php echo get_verification(&#x27;price&#x27;, &#x27;1.99&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;); ?&gt;&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">value\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;1.99&quot;\u003C\u002Fspan> \u002F&gt;\u003C\u002Fspan>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">input\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">type\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;hidden&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">name\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;&lt;?php echo get_verification(&#x27;parent_code&#x27;, &#x27;shirt&#x27;, &#x27;poster&#x27;, &#x27;shirt&#x27;); ?&gt;&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-attr\">value\u003C\u002Fspan>=\u003Cspan class=\"hljs-string\">&quot;shirt&quot;\u003C\u002Fspan> \u002F&gt;\u003C\u002Fspan>\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"notes\" data-title=\"Notes\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"notes\">Notes\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>The combined code format is \u003Ccode class=\"badge bg-soft-danger text-danger\">{childcode}{parentcode}\u003C\u002Fcode> with no separator.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The \u003Ccode class=\"badge bg-soft-danger text-danger\">parent_code\u003C\u002Fcode> parameter itself must also be signed using the same combined code.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For select or radio inputs on child products, append the hash to the \u003Ccode class=\"badge bg-soft-danger text-danger\">value\u003C\u002Fcode> attribute as you would for any other form — see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fsign-product-forms-with-hmac\" class=\"\">Sign product forms with HMAC\u003C\u002Fa>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fsection>",[558,561,563,565],{"id":559,"title":339,"level":560},"how-it-works","H2",{"id":562,"title":411,"level":560},"steps",{"id":564,"title":462,"level":560},"php-helper-function",{"id":566,"title":492,"level":560},"notes",[568],{"type":569,"content":570},"html","\u003Cp>Signing bundled products with HMAC requires a small change to the standard signing process. Because child products often have a different price when sold as part of a bundle, Foxy requires the hash for each child product parameter to include both the child code and the parent code.\u003C\u002Fp>\u003Ch2>How it works\u003C\u002Fh2>\u003Cp>For child product parameters, concatenate the child \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> and parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> together (in that order, no separator) and use that combined string as the \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> when generating the hash.\u003C\u002Fp>\u003Cp>For example, a child product with \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> of \u003Ccode class=\"badge bg-soft-danger text-danger\">poster\u003C\u002Fcode> belonging to a parent with \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> of \u003Ccode class=\"badge bg-soft-danger text-danger\">shirt\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode>hash_hmac(&#039;sha256&#039;, &#039;postershirtnameMy Poster&#039;, $api_key);\nhash_hmac(&#039;sha256&#039;, &#039;postershirtprice1.99&#039;, $api_key);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The parent product is signed as normal using only its own \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode>hash_hmac(&#039;sha256&#039;, &#039;shirtnameExample T-Shirt&#039;, $api_key);\nhash_hmac(&#039;sha256&#039;, &#039;shirtprice25&#039;, $api_key);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>Steps\u003C\u002Fh2>\u003Col order=\"1\">\u003Cli>\u003Cp>Sign the parent product parameters as normal, using only the parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For each child product parameter, concatenate the child \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> + parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> into a single string and use that as the \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> when generating the hash.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Apply the resulting hashes to the child product inputs as you would for any other signed field.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Ch2>PHP helper function\u003C\u002Fh2>\u003Cp>Pass the parent \u003Ccode class=\"badge bg-soft-danger text-danger\">code\u003C\u002Fcode> as the fourth argument to the helper function when signing child product parameters:\u003C\u002Fp>\u003Cpre>\u003Ccode>get_verification(&#039;code&#039;, &#039;poster&#039;, &#039;poster&#039;, &#039;shirt&#039;);\nget_verification(&#039;name&#039;, &#039;My Poster&#039;, &#039;poster&#039;, &#039;shirt&#039;);\nget_verification(&#039;price&#039;, &#039;1.99&#039;, &#039;poster&#039;, &#039;shirt&#039;);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In a form, the signed child product inputs look like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;input type=&quot;hidden&quot; name=&quot;&lt;?php echo get_verification(&#039;code&#039;, &#039;poster&#039;, &#039;poster&#039;, &#039;shirt&#039;); ?&gt;&quot; value=&quot;poster&quot; \u002F&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;&lt;?php echo get_verification(&#039;name&#039;, &#039;My Poster&#039;, &#039;poster&#039;, &#039;shirt&#039;); ?&gt;&quot; value=&quot;My Poster&quot; \u002F&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;&lt;?php echo get_verification(&#039;price&#039;, &#039;1.99&#039;, &#039;poster&#039;, &#039;shirt&#039;); ?&gt;&quot; value=&quot;1.99&quot; \u002F&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;&lt;?php echo get_verification(&#039;parent_code&#039;, &#039;shirt&#039;, &#039;poster&#039;, &#039;shirt&#039;); ?&gt;&quot; value=&quot;shirt&quot; \u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>Notes\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>The combined code format is \u003Ccode class=\"badge bg-soft-danger text-danger\">{childcode}{parentcode}\u003C\u002Fcode> with no separator.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The \u003Ccode class=\"badge bg-soft-danger text-danger\">parent_code\u003C\u002Fcode> parameter itself must also be signed using the same combined code.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For select or radio inputs on child products, append the hash to the \u003Ccode class=\"badge bg-soft-danger text-danger\">value\u003C\u002Fcode> attribute as you would for any other form — see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fsign-product-forms-with-hmac\" class=\"\">Sign product forms with HMAC\u003C\u002Fa>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>",{"name":572,"created_at":573,"published_at":574,"updated_at":575,"id":576,"uuid":47,"content":577,"slug":48,"full_slug":48,"sort_by_date":59,"position":756,"tag_list":757,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":758,"first_published_at":759,"release_id":59,"lang":65,"path":59,"alternates":760,"default_full_slug":59,"translated_slugs":59},"Contact","2022-09-23T19:56:58.957Z","2025-05-08T18:24:40.382Z","2025-05-08T18:24:40.392Z",3138,{"seo":578,"_uid":581,"title":582,"action":583,"fields":584,"method":732,"columns":733,"subtitle":747,"component":48,"button_text":753,"submit_title":754,"submit_subtitle":755},{"_uid":579,"title":572,"plugin":580,"description":13},"24ff7574-3bcc-48d2-85b5-e529dfea1cc4","meta-fields","8f54f1da-9d8f-49b2-89e7-840e886491cb","We're here to help.","https:\u002F\u002Fusebasin.com\u002Ff\u002F029f48d65402",[585,590,594,703,706,711,726],{"_uid":586,"name":587,"type":332,"label":588,"options":13,"required":33,"component":589,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":591,"name":592,"type":592,"label":593,"options":13,"required":33,"component":589,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","email","Email Address",{"_uid":595,"name":596,"type":597,"label":598,"options":599,"required":33,"component":589,"conditions":600,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[601,657,667,674,682,690,696],{"_uid":602,"equals":603,"fields":604,"component":656},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[605],{"_uid":606,"body":607,"type":654,"title":13,"component":655},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":324,"content":608},[609],{"type":327,"content":610},[611,613,620,622,624,625,630,632,637,645,647,652],{"text":612,"type":332},"We are ",{"text":614,"type":332,"marks":615},"Foxy.io",[616],{"type":539,"attrs":617},{"href":618,"uuid":59,"anchor":59,"custom":619,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":621,"type":332},", an ecommerce platform powering ecommerce for other merchants. We do not sell products, and are unable to assist with questions about order statuses or refunds for any merchants using our platform. Please contact the merchant you ordered from for assistance. If you’d like to report a store using Foxy for fraudulent practices, please select ‘other’ in the subject.",{"type":623},"hard_break",{"type":623},{"text":626,"type":332,"marks":627},"NOTE:",[628],{"type":629},"bold",{"text":631,"type":332}," We are ",{"text":633,"type":332,"marks":634},"not ",[635],{"type":636},"italic",{"text":638,"type":332,"marks":639},"Foxy.in",[640,644],{"type":539,"attrs":641},{"href":642,"uuid":59,"anchor":59,"custom":643,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":636},{"text":646,"type":332},". We are not in any way affiliated with ",{"text":638,"type":332,"marks":648},[649],{"type":539,"attrs":650},{"href":642,"uuid":59,"anchor":59,"custom":651,"target":59,"linktype":31},{},{"text":653,"type":332},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":658,"equals":659,"fields":660,"component":656},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[661],{"_uid":662,"name":663,"type":664,"label":13,"options":13,"required":24,"component":589,"conditions":665,"placeholder":13,"default_value":666},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":668,"equals":208,"fields":669,"component":656},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[670],{"_uid":671,"name":663,"type":664,"label":13,"options":13,"required":24,"component":589,"conditions":672,"placeholder":13,"default_value":673},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":675,"equals":676,"fields":677,"component":656},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[678],{"_uid":679,"name":663,"type":664,"label":13,"options":13,"required":24,"component":589,"conditions":680,"placeholder":13,"default_value":681},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":683,"equals":684,"fields":685,"component":656},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[686],{"_uid":687,"name":663,"type":664,"label":13,"options":13,"required":24,"component":589,"conditions":688,"placeholder":13,"default_value":689},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":691,"equals":603,"fields":692,"component":656},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[693],{"_uid":694,"name":663,"type":664,"label":13,"options":13,"required":24,"component":589,"conditions":695,"placeholder":13,"default_value":666},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":697,"equals":698,"fields":699,"component":656},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[700],{"_uid":701,"name":663,"type":664,"label":13,"options":13,"required":24,"component":589,"conditions":702,"placeholder":13,"default_value":666},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":704,"component":705},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":707,"name":708,"type":709,"label":710,"options":13,"required":33,"component":589,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":712,"name":713,"type":597,"label":714,"options":715,"required":33,"component":589,"conditions":716,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[717],{"_uid":718,"equals":719,"fields":720,"component":656},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[721],{"_uid":722,"name":723,"type":332,"label":724,"options":13,"required":33,"component":589,"conditions":725,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":727,"name":728,"type":597,"label":729,"options":730,"required":33,"component":589,"conditions":731,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[734],{"_uid":735,"text":736,"title":745,"component":746},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":324,"content":737},[738],{"type":327,"content":739},[740,742,743],{"text":741,"type":332},"855.369.9227",{"type":623},{"text":744,"type":332},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":324,"content":748},[749],{"type":327,"content":750},[751],{"text":752,"type":332},"Get in touch to get help from our friendly support team.","Submit","Success!","Your email has been received. We'll get back to you as soon as we can, but it might take a business day. If you don't hear back from us in a timely manner, please check your spam folder to ensure our reply didn't go there.",-80,[],"2fd9fb7d-a48a-4184-acfd-30022d8d6f08","2022-09-23T20:10:45.360Z",[],[288,762,790],{"name":763,"created_at":764,"published_at":765,"updated_at":766,"id":767,"uuid":768,"content":769,"slug":783,"full_slug":784,"sort_by_date":59,"position":785,"tag_list":786,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":787,"first_published_at":788,"release_id":59,"lang":65,"path":59,"alternates":789,"default_full_slug":59,"translated_slugs":59},"Products","2023-01-19T16:20:53.075Z","2024-06-05T04:29:14.851Z","2024-06-05T04:29:14.872Z",28236,"389d5512-29ba-4a93-9cfa-9491d1618f73",{"_uid":770,"icon":771,"name":763,"guides":772,"pinned":24,"summary":773,"category":13,"component":297,"blog_posts":774,"content_hub":24,"icon_custom":775,"case_studies":776,"faq_sections":777,"help_articles":778,"featured_guides":779,"mailbox_category":13,"featured_articles":780,"featured_blog_posts":781,"featured_case_studies":782},"3551f6e8-765a-4b8d-8587-2e2eda4d2b23","fa-tags",[],"How products work, supported product types, inventory management, and more.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"filename":13,"copyright":59,"fieldtype":81},[],[],[],[],[],[],[],"products","help\u002Fcategories\u002Fproducts",150,[],"c025c7a7-0d20-4244-938a-c8d6588e1269","2023-01-19T17:25:32.570Z",[],{"name":791,"created_at":792,"published_at":793,"updated_at":794,"id":795,"uuid":546,"content":796,"slug":809,"full_slug":810,"sort_by_date":59,"position":811,"tag_list":812,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":813,"first_published_at":793,"release_id":59,"lang":65,"path":59,"alternates":814,"default_full_slug":59,"translated_slugs":59},"Product Security","2026-06-29T20:00:54.676Z","2026-06-29T20:37:32.009Z","2026-06-29T20:37:32.025Z",192813689601883,{"_uid":797,"icon":13,"name":791,"type":798,"pinned":24,"summary":799,"category":768,"component":297,"blog_posts":800,"icon_custom":801,"case_studies":803,"faq_sections":804,"featured_guides":805,"mailbox_category":13,"featured_articles":806,"featured_blog_posts":807,"featured_case_studies":808},"bd9968b0-6d3b-4a2b-a7bc-79263044b475","simple","How to enable and implement HMAC product validation, including signing product links, forms, and bundled products.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":802},{},[],[],[],[],[],[],"product-security","help\u002Fcategories\u002Fproduct-security",-420,[],"9b6ea296-0666-48d6-b896-39e524ea24ac",[],{},1784562224548]