[{"data":1,"prerenderedAt":1730},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Fcategories\u002Fsingle-sign-on":314,"help:tree:89b14cf6-52cb-41c8-8aed-7ceae33cb271":340,"help:guides:89b14cf6-52cb-41c8-8aed-7ceae33cb271":341,"help:categories:89b14cf6-52cb-41c8-8aed-7ceae33cb271":342,"help:articles:89b14cf6-52cb-41c8-8aed-7ceae33cb271":343,"story:contact":1540,"_apollo:default":1729},{"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":334,"full_slug":335,"sort_by_date":59,"position":336,"tag_list":337,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":338,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":339,"default_full_slug":59,"translated_slugs":59},"Single Sign-On (SSO)","2026-07-17T05:25:13.805Z","2026-07-17T05:44:46.437Z","2026-07-17T05:44:46.448Z",198968581389720,"89b14cf6-52cb-41c8-8aed-7ceae33cb271",{"_uid":322,"icon":13,"name":315,"type":323,"pinned":24,"summary":324,"category":13,"component":297,"blog_posts":325,"icon_custom":326,"case_studies":328,"faq_sections":329,"featured_guides":330,"mailbox_category":13,"featured_articles":331,"featured_blog_posts":332,"featured_case_studies":333},"621919dd-dfb3-4b25-a3f6-d056127fc3a2","simple","How to set up single sign-on between your website and Foxy, covering checkout authentication, outgoing SSO on the receipt, and keeping customer data in sync.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":327},{},[],[],[],[],[],[],"single-sign-on","help\u002Fcategories\u002Fsingle-sign-on",-720,[],"51903714-6c5b-45ba-b8a6-5bf411ffb056",[],[288],[],[],[344,499,702,875,1213,1389],{"name":345,"created_at":346,"published_at":347,"updated_at":348,"id":349,"uuid":350,"content":351,"slug":492,"full_slug":493,"sort_by_date":59,"position":494,"tag_list":495,"is_startpage":24,"parent_id":496,"meta_data":59,"group_id":497,"first_published_at":347,"release_id":59,"lang":65,"path":59,"alternates":498,"default_full_slug":59,"translated_slugs":59},"Set up outgoing single sign-on on the receipt","2026-07-17T05:37:10.676Z","2026-07-17T05:52:01.242Z","2026-07-17T05:52:01.264Z",198971517701535,"61014ac1-01a8-451e-a151-92ce34d6800c",{"_uid":352,"body":353,"name":345,"image":488,"pinned":24,"summary":490,"category":320,"component":266,"related_articles":491},"89cf129c-4970-49af-b547-06793b3a6325",{"type":354,"content":355},"doc",[356,363,370,404,409,415,420,425,430,435,440,445,450],{"type":357,"attrs":358,"content":359},"paragraph",{"textAlign":59},[360],{"text":361,"type":362},"Outgoing (or “reverse”) single sign-on generates an authentication token from the Foxy receipt page and passes it to your own site, so a customer who just checked out can be logged in automatically or offered a single-click upsell. This requires a solid understanding of standard single sign-on first, since the same token logic applies in reverse.","text",{"type":364,"attrs":365,"content":367},"heading",{"level":366,"textAlign":59},2,[368],{"text":369,"type":362},"Steps: log a new customer into your site automatically",{"type":371,"attrs":372,"content":374},"ordered_list",{"order":373},1,[375,383,390,397],{"type":376,"content":377},"list_item",[378],{"type":357,"attrs":379,"content":380},{"textAlign":59},[381],{"text":382,"type":362},"In your custom receipt template, add Twig code that generates a reverse single sign-on token and URL on the customer’s first view of the receipt, only for non-guest customers.",{"type":376,"content":384},[385],{"type":357,"attrs":386,"content":387},{"textAlign":59},[388],{"text":389,"type":362},"Set the receipt’s continue link to point to that reverse single sign-on URL instead of your regular site.",{"type":376,"content":391},[392],{"type":357,"attrs":393,"content":394},{"textAlign":59},[395],{"text":396,"type":362},"On your endpoint, verify the fc_auth_token, timestamp, and fc_customer_id parameters the same way a standard single sign-on endpoint would.",{"type":376,"content":398},[399],{"type":357,"attrs":400,"content":401},{"textAlign":59},[402],{"text":403,"type":362},"If the token checks out, use the API to fetch the customer’s information, create or log them in on your site, and forward them on as an authenticated user.",{"type":364,"attrs":405,"content":406},{"level":366,"textAlign":59},[407],{"text":408,"type":362},"Example: Twig code for the receipt",{"type":410,"attrs":411,"content":412},"code_block",{"class":59},[413],{"text":414,"type":362},"{% set reverse_sso_url = \"\" %}\n{% if first_receipt_display and not is_anonymous %}\n  {% set timestamp = checkout_date | date_modify(\"+120 seconds\") | date(\"U\") %}\n  {% set reverse_sso_url = \"https:\u002F\u002Fwww.yourwebsite.com\u002Freversesso.php?fc_auth_token=\" ~ generate_sso_token(timestamp) ~ \"×tamp=\" ~ timestamp ~ \"&fc_customer_id=\" ~ customer_id %}\n  {% set continue_url = reverse_sso_url %}\n{% endif %}\n",{"type":357,"attrs":416,"content":417},{"textAlign":59},[418],{"text":419,"type":362},"This only runs on the customer’s first view of the receipt, so revisiting the receipt later (from an email link) won’t trigger another redirect. generate_sso_token() takes a single timestamp argument and returns the token. customer_id is available to Twig templates automatically.",{"type":364,"attrs":421,"content":422},{"level":366,"textAlign":59},[423],{"text":424,"type":362},"Example: verifying the token and logging the customer in",{"type":410,"attrs":426,"content":427},{"class":59},[428],{"text":429,"type":362},"if (isset($_GET['fc_auth_token'])) {\n    $fc_auth_token = $_GET['fc_auth_token'];\n    $customer_id = $_GET['fc_customer_id'];\n    $timestamp = $_GET['timestamp'];\n}\n\n$local_auth_token = sha1($customer_id . '|' . $timestamp . '|' . $foxycart_api_key);\n$local_timestamp = date('U');\n\nif ($fc_auth_token == $local_auth_token && $timestamp > $local_timestamp) {\n    \u002F\u002F Everything checks out, log the user in\n    \u002F\u002F Enter your logic here\n}\n\n\u002F\u002F Redirect the customer on to your own website\nheader('Location: http:\u002F\u002Fwww.yourwebsite.com');\n",{"type":364,"attrs":431,"content":432},{"level":366,"textAlign":59},[433],{"text":434,"type":362},"Example: single-click upsell on the receipt",{"type":357,"attrs":436,"content":437},{"textAlign":59},[438],{"text":439,"type":362},"The same token mechanism can offer a post-purchase upsell. On click (or on page load, for a fully automatic version), add a product to the cart with a JSONP request, then redirect straight to checkout with a fresh token so the transaction can complete without re-authentication:",{"type":410,"attrs":441,"content":442},{"class":59},[443],{"text":444,"type":362},"{% if first_receipt_display == 1 and is_anonymous == 0 %}\n\u003Cscript>\n  {% set timestamp = checkout_date | date_modify(\"+120 seconds\") | date(\"U\") %}\n  if (!FC.json.custom_fields.upsell) {\n    FC.client.request('https:\u002F\u002F' + FC.settings.storedomain + '\u002Fcart?name=Cool+Example&price=20&color=red&code=sku123&empty=reset&h:upsell=true').done(function(data) {\n      var url = 'https:\u002F\u002F' + FC.settings.storedomain + '\u002Fcheckout?fc_auth_token={{ generate_sso_token(timestamp) }}×tamp={{ timestamp }}&fc_customer_id={{ customer_id }}';\n      window.location.href = url;\n    });\n  }\n\u003C\u002Fscript>\n{% endif %}\n",{"type":364,"attrs":446,"content":447},{"level":366,"textAlign":59},[448],{"text":449,"type":362},"Notes",{"type":451,"content":452},"bullet_list",[453,460,467,474,481],{"type":376,"content":454},[455],{"type":357,"attrs":456,"content":457},{"textAlign":59},[458],{"text":459,"type":362},"A guest customer can’t use single sign-on, so both examples only work for accounts, not guest checkouts, hence the is_anonymous check.",{"type":376,"content":461},[462],{"type":357,"attrs":463,"content":464},{"textAlign":59},[465],{"text":466,"type":362},"Keep the token’s expiration short, no more than a few minutes, since it substitutes for password-based authentication.",{"type":376,"content":468},[469],{"type":357,"attrs":470,"content":471},{"textAlign":59},[472],{"text":473,"type":362},"Only use this over an https connection, since the tokens are passed in the URL.",{"type":376,"content":475},[476],{"type":357,"attrs":477,"content":478},{"textAlign":59},[479],{"text":480,"type":362},"To skip the Foxy receipt entirely and forward straight to your reverse single sign-on URL, replace {% set continue_url = reverse_sso_url %} with \u003Cscript>window.location = ‘{{ reverse_sso_url }}’;\u003C\u002Fscript>.",{"type":376,"content":482},[483],{"type":357,"attrs":484,"content":485},{"textAlign":59},[486],{"text":487,"type":362},"To add a custom link or button pointing to your reverse single sign-on endpoint elsewhere on the receipt, reference the {{ reverse_sso_url }} Twig variable.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":489},{},"How to generate a single sign-on token from the receipt page so customers can be redirected to your site already authenticated, or offered a single-click upsell.",[],"set-up-outgoing-single-sign-on-on-the-receipt","help\u002Farticles\u002Fset-up-outgoing-single-sign-on-on-the-receipt",-3710,[],2659,"74b8d73a-432a-4ccf-b120-5b47703c6780",[],{"name":500,"created_at":501,"published_at":502,"updated_at":503,"id":504,"uuid":505,"content":506,"slug":696,"full_slug":697,"sort_by_date":59,"position":698,"tag_list":699,"is_startpage":24,"parent_id":496,"meta_data":59,"group_id":700,"first_published_at":502,"release_id":59,"lang":65,"path":59,"alternates":701,"default_full_slug":59,"translated_slugs":59},"Set up single sign-on for checkout","2026-07-17T05:33:02.659Z","2026-07-17T05:52:01.522Z","2026-07-17T05:52:01.536Z",198970501832093,"e290ebae-9b90-4f3a-b715-c3f68f79a9e5",{"_uid":507,"body":508,"name":500,"image":692,"pinned":24,"summary":694,"category":320,"component":266,"related_articles":695},"e9ea7dca-62bf-4259-ade4-fa92cae5d6e2",{"type":354,"content":509},[510,515,520,607,612,617,621],{"type":357,"attrs":511,"content":512},{"textAlign":59},[513],{"text":514,"type":362},"This covers setting up standard single sign-on, so a customer who’s already logged into your website can proceed through Foxy checkout without re-entering their email and password.",{"type":364,"attrs":516,"content":517},{"level":366,"textAlign":59},[518],{"text":519,"type":362},"Steps",{"type":371,"attrs":521,"content":522},{"order":373},[523,546,553,570,600],{"type":376,"content":524},[525],{"type":357,"attrs":526,"content":527},{"textAlign":59},[528,530,537,539,544],{"text":529,"type":362},"In the ",{"text":531,"type":362,"marks":532},"Foxy admin",[533],{"type":534,"attrs":535},"link",{"href":536,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Fadmin.foxy.io",{"text":538,"type":362},", set your store’s shared-authentication endpoint URL. This is the URL Foxy redirects customers to whenever a checkout request arrives without a valid ",{"text":540,"type":362,"marks":541},"fc_auth_token",[542],{"type":543},"code",{"text":545,"type":362},".",{"type":376,"content":547},[548],{"type":357,"attrs":549,"content":550},{"textAlign":59},[551],{"text":552,"type":362},"On your endpoint, check whether the current user is authenticated on your site, using your existing session or cookie data.",{"type":376,"content":554},[555],{"type":357,"attrs":556,"content":557},{"textAlign":59},[558,560,563,565,569],{"text":559,"type":362},"If the customer is authenticated, generate an ",{"text":540,"type":362,"marks":561},[562],{"type":543},{"text":564,"type":362}," by hashing their Foxy customer ID, an expiration timestamp, and your store’s secret key with SHA-1, joined by ",{"text":566,"type":362,"marks":567},"|",[568],{"type":543},{"text":545,"type":362},{"type":376,"content":571},[572],{"type":357,"attrs":573,"content":574},{"textAlign":59},[575,577,581,583,587,589,592,594,598],{"text":576,"type":362},"Redirect the customer to your Foxy checkout URL with ",{"text":578,"type":362,"marks":579},"fc_customer_id",[580],{"type":543},{"text":582,"type":362},", ",{"text":584,"type":362,"marks":585},"timestamp",[586],{"type":543},{"text":588,"type":362},", and ",{"text":540,"type":362,"marks":590},[591],{"type":543},{"text":593,"type":362}," as query parameters, plus ",{"text":595,"type":362,"marks":596},"fcsid",[597],{"type":543},{"text":599,"type":362}," if Foxy provided one. See the SSO parameters reference for details on each value.",{"type":376,"content":601},[602],{"type":357,"attrs":603,"content":604},{"textAlign":59},[605],{"text":606,"type":362},"If the customer isn’t authenticated, either redirect them back to checkout without these parameters, or take another action, such as sending them to a login or registration page.",{"type":364,"attrs":608,"content":609},{"level":366,"textAlign":59},[610],{"text":611,"type":362},"Example",{"type":410,"attrs":613,"content":614},{"class":59},[615],{"text":616,"type":362},"const crypto = require('crypto');\n\nfunction generateSsoUrl(customerId, timestamp, secret, storeDomain, sessionId) {\n  if (!customerId || !timestamp || !secret) return false;\n  const stringToSign = `${customerId}|${timestamp}|${secret}`;\n  const token = crypto.createHash('sha1').update(stringToSign).digest('hex');\n  let url = `https:\u002F\u002F${storeDomain}\u002Fcheckout?fc_customer_id=${customerId}×tamp=${timestamp}&fc_auth_token=${token}`;\n  if (sessionId) url += `&fcsid=${sessionId}`;\n  return url;\n}\n",{"type":364,"attrs":618,"content":619},{"level":366,"textAlign":59},[620],{"text":449,"type":362},{"type":451,"content":622},[623,644,661,668,685],{"type":376,"content":624},[625],{"type":357,"attrs":626,"content":627},{"textAlign":59},[628,630,636,638,642],{"text":629,"type":362},"Use the ",{"text":631,"type":362,"marks":632},"Foxy SDK",[633],{"type":534,"attrs":634},{"href":635,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Fsdk.foxy.dev",{"text":637,"type":362},"’s ",{"text":639,"type":362,"marks":640},"createSsoUrl",[641],{"type":543},{"text":643,"type":362}," function to generate this URL rather than building the hash yourself, where possible.",{"type":376,"content":645},[646],{"type":357,"attrs":647,"content":648},{"textAlign":59},[649,651,654,656,659],{"text":650,"type":362},"The expiration ",{"text":584,"type":362,"marks":652},[653],{"type":543},{"text":655,"type":362}," you hash must exactly match the ",{"text":584,"type":362,"marks":657},[658],{"type":543},{"text":660,"type":362}," you send back to Foxy. Don’t reuse the timestamp Foxy sent to your endpoint — that value is already in the past by the time your endpoint responds.",{"type":376,"content":662},[663],{"type":357,"attrs":664,"content":665},{"textAlign":59},[666],{"text":667,"type":362},"A customer using a saved credit card is still asked for the CSC, unless your store’s CSC settings are configured to only require it for new cards.",{"type":376,"content":669},[670],{"type":357,"attrs":671,"content":672},{"textAlign":59},[673,675,678,680,684],{"text":674,"type":362},"To allow an unauthenticated customer through to checkout, set ",{"text":578,"type":362,"marks":676},[677],{"type":543},{"text":679,"type":362}," to ",{"text":681,"type":362,"marks":682},"0",[683],{"type":543},{"text":545,"type":362},{"type":376,"content":686},[687],{"type":357,"attrs":688,"content":689},{"textAlign":59},[690],{"text":691,"type":362},"For guidance on keeping customer records synced with Foxy so a customer ID is available, see Sync customer data for SSO.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":693},{},"How to configure your site's single sign-on endpoint so customers already logged into your site skip re-authenticating at checkout.",[],"set-up-single-sign-on-for-checkout","help\u002Farticles\u002Fset-up-single-sign-on-for-checkout",-3700,[],"b866faeb-6938-4162-b26f-2db067260736",[],{"name":703,"created_at":704,"published_at":705,"updated_at":706,"id":707,"uuid":708,"content":709,"slug":869,"full_slug":870,"sort_by_date":59,"position":871,"tag_list":872,"is_startpage":24,"parent_id":496,"meta_data":59,"group_id":873,"first_published_at":705,"release_id":59,"lang":65,"path":59,"alternates":874,"default_full_slug":59,"translated_slugs":59},"Single sign-on overview","2026-07-17T05:27:42.754Z","2026-07-17T05:52:01.988Z","2026-07-17T05:52:02.002Z",198969191501209,"8b3a53c4-3ca3-491b-92ac-4ccc6e7c33ac",{"_uid":710,"body":711,"name":703,"image":865,"pinned":24,"summary":867,"category":320,"component":266,"related_articles":868},"1a301e8b-18fc-4920-a1f0-39a070970ff7",{"type":354,"content":712},[713,718,723,728,753,758,789,794,799,822,827,832,837,842,847,852,856],{"type":357,"attrs":714,"content":715},{"textAlign":59},[716],{"text":717,"type":362},"Foxy’s single sign-on (SSO) lets customers who are already logged into your website skip re-entering their username and password when they reach checkout. It also works in reverse, letting you authenticate a customer on your own site after they complete a purchase through Foxy.",{"type":364,"attrs":719,"content":720},{"level":366,"textAlign":59},[721],{"text":722,"type":362},"How it works",{"type":357,"attrs":724,"content":725},{"textAlign":59},[726],{"text":727,"type":362},"SSO covers two directions:",{"type":451,"content":729},[730,742],{"type":376,"content":731},[732],{"type":357,"attrs":733,"content":734},{"textAlign":59},[735,740],{"text":736,"type":362,"marks":737},"Checkout SSO (incoming):",[738],{"type":739},"bold",{"text":741,"type":362}," when a customer who’s already logged into your site proceeds to checkout, your site’s SSO endpoint passes an authentication token to Foxy. If the token is valid, the customer skips re-entering their email and password. For security, a saved credit card still requires the CSC unless your store is configured to only require it for new cards.",{"type":376,"content":743},[744],{"type":357,"attrs":745,"content":746},{"textAlign":59},[747,751],{"text":748,"type":362,"marks":749},"Outgoing (“reverse”) SSO:",[750],{"type":739},{"text":752,"type":362}," after a transaction completes, Foxy can generate an authentication token from the receipt page and pass it to your site, logging the customer in automatically.",{"type":357,"attrs":754,"content":755},{"textAlign":59},[756],{"text":757,"type":362},"The basic flow for checkout SSO:",{"type":371,"attrs":759,"content":760},{"order":373},[761,768,775,782],{"type":376,"content":762},[763],{"type":357,"attrs":764,"content":765},{"textAlign":59},[766],{"text":767,"type":362},"A customer creates an account or logs into your site.",{"type":376,"content":769},[770],{"type":357,"attrs":771,"content":772},{"textAlign":59},[773],{"text":774,"type":362},"Your site syncs that customer’s information to Foxy using the API.",{"type":376,"content":776},[777],{"type":357,"attrs":778,"content":779},{"textAlign":59},[780],{"text":781,"type":362},"When the customer starts checkout, Foxy redirects them to your SSO endpoint.",{"type":376,"content":783},[784],{"type":357,"attrs":785,"content":786},{"textAlign":59},[787],{"text":788,"type":362},"Your endpoint checks the customer’s authentication status on your site (using session or cookie data), then either sends them back to checkout authenticated, sends them back unauthenticated, or takes another action such as redirecting to a login or registration page.",{"type":364,"attrs":790,"content":791},{"level":366,"textAlign":59},[792],{"text":793,"type":362},"Alternate uses",{"type":357,"attrs":795,"content":796},{"textAlign":59},[797],{"text":798,"type":362},"Beyond standard single sign-on, the same mechanism supports a few other scenarios:",{"type":451,"content":800},[801,808,815],{"type":376,"content":802},[803],{"type":357,"attrs":804,"content":805},{"textAlign":59},[806],{"text":807,"type":362},"Making checkout entirely private, requiring authentication before purchase, for members-only stores or similar setups.",{"type":376,"content":809},[810],{"type":357,"attrs":811,"content":812},{"textAlign":59},[813],{"text":814,"type":362},"Validating a customer’s cart before checkout, such as confirming order limits, applied discounts, or referrer and coupon values.",{"type":376,"content":816},[817],{"type":357,"attrs":818,"content":819},{"textAlign":59},[820],{"text":821,"type":362},"Offering single-click upsells on the receipt, or logging a customer into your site automatically after checkout, using outgoing SSO.",{"type":364,"attrs":823,"content":824},{"level":366,"textAlign":59},[825],{"text":826,"type":362},"Requirements",{"type":357,"attrs":828,"content":829},{"textAlign":59},[830],{"text":831,"type":362},"SSO requires a working site and Foxy setup that uses the API to keep your customer records synced with Foxy’s.",{"type":364,"attrs":833,"content":834},{"level":366,"textAlign":59},[835],{"text":836,"type":362},"Identifying customers: email vs. customer ID",{"type":357,"attrs":838,"content":839},{"textAlign":59},[840],{"text":841,"type":362},"Foxy treats a customer’s email as a unique identifier, so no two customers in a store can share one. If your system allows customers to change their email, filtering by email may not capture a customer’s full purchase history, since past purchases stay tied to whatever email was active at the time. If your database can store custom attributes, store the Foxy customer ID alongside the customer record. Unlike email, it never changes, making it a more reliable long-term identifier.",{"type":364,"attrs":843,"content":844},{"level":366,"textAlign":59},[845],{"text":846,"type":362},"Best practices",{"type":357,"attrs":848,"content":849},{"textAlign":59},[850],{"text":851,"type":362},"Allow checkout as a guest, or at least without requiring registration on your site first, whenever possible. This keeps the fewest hurdles between a customer and a completed purchase. Customers can still be synced on both sides either way: from your site to Foxy using the API, and from Foxy to your site using webhooks after checkout.",{"type":364,"attrs":853,"content":854},{"level":366,"textAlign":59},[855],{"text":449,"type":362},{"type":451,"content":857},[858],{"type":376,"content":859},[860],{"type":357,"attrs":861,"content":862},{"textAlign":59},[863],{"text":864,"type":362},"SSO shouldn’t be combined with checkout pre-population to set customer values, since the two features can conflict. Combining them is possible but requires thorough testing before relying on it.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":866},{},"What Foxy's single sign-on (SSO) is and how it lets customers skip re-authenticating at checkout or after completing a purchase.",[],"single-sign-on-overview","help\u002Farticles\u002Fsingle-sign-on-overview",-3680,[],"921b4dbb-122c-4dab-a930-51e15fb8410f",[],{"name":876,"created_at":877,"published_at":878,"updated_at":879,"id":880,"uuid":881,"content":882,"slug":1207,"full_slug":1208,"sort_by_date":59,"position":1209,"tag_list":1210,"is_startpage":24,"parent_id":496,"meta_data":59,"group_id":1211,"first_published_at":878,"release_id":59,"lang":65,"path":59,"alternates":1212,"default_full_slug":59,"translated_slugs":59},"Single sign-on parameters reference","2026-07-17T05:31:20.578Z","2026-07-17T05:52:01.741Z","2026-07-17T05:52:01.762Z",198970083696028,"2fd97d1c-1ccb-49f3-bd89-251974515666",{"_uid":883,"body":884,"name":876,"image":1203,"pinned":24,"summary":1205,"category":320,"component":266,"related_articles":1206},"635b07d4-1d0d-4b19-acce-cdcbea641840",{"type":354,"content":885},[886,891,1004,1009,1166,1170],{"type":364,"attrs":887,"content":888},{"level":366,"textAlign":59},[889],{"text":890,"type":362},"Parameters Foxy sends to your SSO endpoint",{"type":892,"content":893},"table",[894,922,950,977],{"type":895,"content":896},"tableRow",[897,906,914],{"type":898,"attrs":899,"content":900},"tableHeader",{"colspan":373,"rowspan":373,"colwidth":59},[901],{"type":357,"attrs":902,"content":903},{"textAlign":59},[904],{"text":905,"type":362},"Parameter",{"type":898,"attrs":907,"content":908},{"colspan":373,"rowspan":373,"colwidth":59},[909],{"type":357,"attrs":910,"content":911},{"textAlign":59},[912],{"text":913,"type":362},"Type",{"type":898,"attrs":915,"content":916},{"colspan":373,"rowspan":373,"colwidth":59},[917],{"type":357,"attrs":918,"content":919},{"textAlign":59},[920],{"text":921,"type":362},"Description",{"type":895,"content":923},[924,934,942],{"type":925,"attrs":926,"content":927},"tableCell",{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[928],{"type":357,"attrs":929,"content":930},{"textAlign":59},[931],{"text":595,"type":362,"marks":932},[933],{"type":543},{"type":925,"attrs":935,"content":936},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[937],{"type":357,"attrs":938,"content":939},{"textAlign":59},[940],{"text":941,"type":362},"string",{"type":925,"attrs":943,"content":944},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[945],{"type":357,"attrs":946,"content":947},{"textAlign":59},[948],{"text":949,"type":362},"The customer’s Foxy session ID. Required to maintain the session across domains, particularly when a store isn’t using a custom subdomain and the customer has third-party cookies disabled.",{"type":895,"content":951},[952,961,969],{"type":925,"attrs":953,"content":954},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[955],{"type":357,"attrs":956,"content":957},{"textAlign":59},[958],{"text":584,"type":362,"marks":959},[960],{"type":543},{"type":925,"attrs":962,"content":963},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[964],{"type":357,"attrs":965,"content":966},{"textAlign":59},[967],{"text":968,"type":362},"integer, epoch time",{"type":925,"attrs":970,"content":971},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[972],{"type":357,"attrs":973,"content":974},{"textAlign":59},[975],{"text":976,"type":362},"The current time on Foxy’s server. Used only to confirm your server’s clock is in sync with Foxy’s — don’t return this value as-is (see below).",{"type":895,"content":978},[979,989,996],{"type":925,"attrs":980,"content":981},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[982],{"type":357,"attrs":983,"content":984},{"textAlign":59},[985],{"text":986,"type":362,"marks":987},"checkout_type",[988],{"type":543},{"type":925,"attrs":990,"content":991},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[992],{"type":357,"attrs":993,"content":994},{"textAlign":59},[995],{"text":941,"type":362},{"type":925,"attrs":997,"content":998},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[999],{"type":357,"attrs":1000,"content":1001},{"textAlign":59},[1002],{"text":1003,"type":362},"The type of transaction involved. Passed conditionally. If present, your endpoint shouldn’t make a CURL request to the cart, or the cart will be emptied.",{"type":364,"attrs":1005,"content":1006},{"level":366,"textAlign":59},[1007],{"text":1008,"type":362},"Parameters your endpoint sends back to Foxy",{"type":892,"content":1010},[1011,1034,1077,1103,1135],{"type":895,"content":1012},[1013,1020,1027],{"type":898,"attrs":1014,"content":1015},{"colspan":373,"rowspan":373,"colwidth":59},[1016],{"type":357,"attrs":1017,"content":1018},{"textAlign":59},[1019],{"text":905,"type":362},{"type":898,"attrs":1021,"content":1022},{"colspan":373,"rowspan":373,"colwidth":59},[1023],{"type":357,"attrs":1024,"content":1025},{"textAlign":59},[1026],{"text":913,"type":362},{"type":898,"attrs":1028,"content":1029},{"colspan":373,"rowspan":373,"colwidth":59},[1030],{"type":357,"attrs":1031,"content":1032},{"textAlign":59},[1033],{"text":921,"type":362},{"type":895,"content":1035},[1036,1045,1053],{"type":925,"attrs":1037,"content":1038},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1039],{"type":357,"attrs":1040,"content":1041},{"textAlign":59},[1042],{"text":540,"type":362,"marks":1043},[1044],{"type":543},{"type":925,"attrs":1046,"content":1047},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1048],{"type":357,"attrs":1049,"content":1050},{"textAlign":59},[1051],{"text":1052,"type":362},"string (SHA-1 hash)",{"type":925,"attrs":1054,"content":1055},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1056],{"type":357,"attrs":1057,"content":1058},{"textAlign":59},[1059,1061,1065,1067,1070,1072,1075],{"text":1060,"type":362},"A hash of ",{"text":1062,"type":362,"marks":1063},"customer_id",[1064],{"type":543},{"text":1066,"type":362},", an expiration ",{"text":584,"type":362,"marks":1068},[1069],{"type":543},{"text":1071,"type":362},", and the store’s secret key, joined with ",{"text":566,"type":362,"marks":1073},[1074],{"type":543},{"text":1076,"type":362},". Generated using the Foxy SDK or a custom implementation.",{"type":895,"content":1078},[1079,1088,1095],{"type":925,"attrs":1080,"content":1081},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1082],{"type":357,"attrs":1083,"content":1084},{"textAlign":59},[1085],{"text":595,"type":362,"marks":1086},[1087],{"type":543},{"type":925,"attrs":1089,"content":1090},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1091],{"type":357,"attrs":1092,"content":1093},{"textAlign":59},[1094],{"text":941,"type":362},{"type":925,"attrs":1096,"content":1097},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1098],{"type":357,"attrs":1099,"content":1100},{"textAlign":59},[1101],{"text":1102,"type":362},"The Foxy session ID, echoed back from the value Foxy sent to your endpoint.",{"type":895,"content":1104},[1105,1114,1122],{"type":925,"attrs":1106,"content":1107},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1108],{"type":357,"attrs":1109,"content":1110},{"textAlign":59},[1111],{"text":578,"type":362,"marks":1112},[1113],{"type":543},{"type":925,"attrs":1115,"content":1116},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1117],{"type":357,"attrs":1118,"content":1119},{"textAlign":59},[1120],{"text":1121,"type":362},"integer",{"type":925,"attrs":1123,"content":1124},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1125],{"type":357,"attrs":1126,"content":1127},{"textAlign":59},[1128,1130,1133],{"text":1129,"type":362},"The customer’s Foxy customer ID, as set or retrieved via the API. Use ",{"text":681,"type":362,"marks":1131},[1132],{"type":543},{"text":1134,"type":362}," to allow an unauthenticated customer through to checkout.",{"type":895,"content":1136},[1137,1146,1153],{"type":925,"attrs":1138,"content":1139},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1140],{"type":357,"attrs":1141,"content":1142},{"textAlign":59},[1143],{"text":584,"type":362,"marks":1144},[1145],{"type":543},{"type":925,"attrs":1147,"content":1148},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1149],{"type":357,"attrs":1150,"content":1151},{"textAlign":59},[1152],{"text":968,"type":362},{"type":925,"attrs":1154,"content":1155},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1156],{"type":357,"attrs":1157,"content":1158},{"textAlign":59},[1159,1161,1164],{"text":1160,"type":362},"The future time at which this authentication token expires. Must match the timestamp used to generate ",{"text":540,"type":362,"marks":1162},[1163],{"type":543},{"text":1165,"type":362},". If a request arrives with an expired token, Foxy redirects the customer back to your SSO endpoint to generate a new one.",{"type":364,"attrs":1167,"content":1168},{"level":366,"textAlign":59},[1169],{"text":449,"type":362},{"type":451,"content":1171},[1172,1196],{"type":376,"content":1173},[1174],{"type":357,"attrs":1175,"content":1176},{"textAlign":59},[1177,1180,1182,1185,1186,1189,1191,1194],{"text":540,"type":362,"marks":1178},[1179],{"type":543},{"text":1181,"type":362}," is invalid if it doesn’t match a hash of the same ",{"text":1062,"type":362,"marks":1183},[1184],{"type":543},{"text":582,"type":362},{"text":584,"type":362,"marks":1187},[1188],{"type":543},{"text":1190,"type":362},", and secret key computed by Foxy, or if ",{"text":584,"type":362,"marks":1192},[1193],{"type":543},{"text":1195,"type":362}," has already passed. In either case, Foxy redirects the customer to the store’s configured URL.",{"type":376,"content":1197},[1198],{"type":357,"attrs":1199,"content":1200},{"textAlign":59},[1201],{"text":1202,"type":362},"After four checkout attempts that don’t reach the checkout page, Foxy redirects the customer to the store’s homepage to prevent an infinite loop. Reaching checkout successfully resets this counter.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1204},{},"A lookup reference for the parameters passed between Foxy and your site during single sign-on authentication.",[],"single-sign-on-parameters-reference","help\u002Farticles\u002Fsingle-sign-on-parameters-reference",-3690,[],"bb808aab-2b82-4a08-8b92-beacfa39946b",[],{"name":1214,"created_at":1215,"published_at":1216,"updated_at":1217,"id":1218,"uuid":1219,"content":1220,"slug":1383,"full_slug":1384,"sort_by_date":59,"position":1385,"tag_list":1386,"is_startpage":24,"parent_id":496,"meta_data":59,"group_id":1387,"first_published_at":1216,"release_id":59,"lang":65,"path":59,"alternates":1388,"default_full_slug":59,"translated_slugs":59},"Sync customer data for single sign-on","2026-07-17T05:39:17.483Z","2026-07-17T05:52:00.996Z","2026-07-17T05:52:01.018Z",198972037111200,"2305b735-cc85-4313-8aac-4f3f1a39b4e8",{"_uid":1221,"body":1222,"name":1214,"image":1379,"pinned":24,"summary":1381,"category":320,"component":266,"related_articles":1382},"63930d25-d5c5-45e9-85f4-001384841e3f",{"type":354,"content":1223},[1224,1229,1234,1366,1370],{"type":357,"attrs":1225,"content":1226},{"textAlign":59},[1227],{"text":1228,"type":362},"Single sign-on relies on customer records staying synced between Foxy and your site. There are four points where that sync happens, each triggered differently.",{"type":364,"attrs":1230,"content":1231},{"level":366,"textAlign":59},[1232],{"text":1233,"type":362},"Sync points",{"type":892,"content":1235},[1236,1262,1288,1314,1340],{"type":895,"content":1237},[1238,1246,1254],{"type":898,"attrs":1239,"content":1240},{"colspan":373,"rowspan":373,"colwidth":59},[1241],{"type":357,"attrs":1242,"content":1243},{"textAlign":59},[1244],{"text":1245,"type":362},"Trigger",{"type":898,"attrs":1247,"content":1248},{"colspan":373,"rowspan":373,"colwidth":59},[1249],{"type":357,"attrs":1250,"content":1251},{"textAlign":59},[1252],{"text":1253,"type":362},"Triggered by",{"type":898,"attrs":1255,"content":1256},{"colspan":373,"rowspan":373,"colwidth":59},[1257],{"type":357,"attrs":1258,"content":1259},{"textAlign":59},[1260],{"text":1261,"type":362},"What to do",{"type":895,"content":1263},[1264,1272,1280],{"type":925,"attrs":1265,"content":1266},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1267],{"type":357,"attrs":1268,"content":1269},{"textAlign":59},[1270],{"text":1271,"type":362},"Webhooks",{"type":925,"attrs":1273,"content":1274},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1275],{"type":357,"attrs":1276,"content":1277},{"textAlign":59},[1278],{"text":1279,"type":362},"Checkout completion, an update-info request, or a subscription modification, cancellation, or past-due payment",{"type":925,"attrs":1281,"content":1282},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1283],{"type":357,"attrs":1284,"content":1285},{"textAlign":59},[1286],{"text":1287,"type":362},"Create the user account if it doesn’t exist, and update the password each time so it stays in sync with any changes made at Foxy checkout. If a subscription moves to a different email, you may need to carry data over from the old email’s account to a new one. Track subscriptions by sub_token if this could affect your store.",{"type":895,"content":1289},[1290,1298,1306],{"type":925,"attrs":1291,"content":1292},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1293],{"type":357,"attrs":1294,"content":1295},{"textAlign":59},[1296],{"text":1297,"type":362},"Subscription webhook",{"type":925,"attrs":1299,"content":1300},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1301],{"type":357,"attrs":1302,"content":1303},{"textAlign":59},[1304],{"text":1305,"type":362},"A subscription being canceled",{"type":925,"attrs":1307,"content":1308},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1309],{"type":357,"attrs":1310,"content":1311},{"textAlign":59},[1312],{"text":1313,"type":362},"Delete or modify the user account depending on the subscription’s status and how you use it.",{"type":895,"content":1315},[1316,1324,1332],{"type":925,"attrs":1317,"content":1318},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1319],{"type":357,"attrs":1320,"content":1321},{"textAlign":59},[1322],{"text":1323,"type":362},"Your website",{"type":925,"attrs":1325,"content":1326},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1327],{"type":357,"attrs":1328,"content":1329},{"textAlign":59},[1330],{"text":1331,"type":362},"A user signing up for a new account or modifying an existing one",{"type":925,"attrs":1333,"content":1334},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1335],{"type":357,"attrs":1336,"content":1337},{"textAlign":59},[1338],{"text":1339,"type":362},"Create a linked Foxy account using the API when a new account is created, or update the linked account when an existing one is modified.",{"type":895,"content":1341},[1342,1350,1358],{"type":925,"attrs":1343,"content":1344},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1345],{"type":357,"attrs":1346,"content":1347},{"textAlign":59},[1348],{"text":1349,"type":362},"Single sign-on endpoint",{"type":925,"attrs":1351,"content":1352},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1353],{"type":357,"attrs":1354,"content":1355},{"textAlign":59},[1356],{"text":1357,"type":362},"A customer checking out from the cart",{"type":925,"attrs":1359,"content":1360},{"colspan":373,"rowspan":373,"colwidth":59,"backgroundColor":59},[1361],{"type":357,"attrs":1362,"content":1363},{"textAlign":59},[1364],{"text":1365,"type":362},"If the user is logged in, use the API to confirm a Foxy customer account exists for that email, creating one if it doesn’t, before redirecting to checkout authenticated. If no user is logged in, redirect to your login or registration page, or allow guest checkout.",{"type":364,"attrs":1367,"content":1368},{"level":366,"textAlign":59},[1369],{"text":449,"type":362},{"type":451,"content":1371},[1372],{"type":376,"content":1373},[1374],{"type":357,"attrs":1375,"content":1376},{"textAlign":59},[1377],{"text":1378,"type":362},"Foxy treats a customer’s email as the unique identifier, so if your system lets customers change their email, store the Foxy customer ID alongside the record. It stays stable even when the email changes. See the single sign-on overview for more on identifying customers by email vs. customer ID.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1380},{},"How to keep customer records synced between Foxy and your site across the points where single sign-on data changes hands.",[],"sync-customer-data-for-single-sign-on","help\u002Farticles\u002Fsync-customer-data-for-single-sign-on",-3720,[],"a3a46a49-b530-41a6-b1de-ebe4df506cd1",[],{"name":1390,"created_at":1391,"published_at":1392,"updated_at":1393,"id":1394,"uuid":1395,"content":1396,"slug":1534,"full_slug":1535,"sort_by_date":59,"position":1536,"tag_list":1537,"is_startpage":24,"parent_id":496,"meta_data":59,"group_id":1538,"first_published_at":1392,"release_id":59,"lang":65,"path":59,"alternates":1539,"default_full_slug":59,"translated_slugs":59},"Troubleshoot single sign-on issues","2026-07-17T05:40:54.628Z","2026-07-17T05:52:00.992Z","2026-07-17T05:52:01.006Z",198972435004833,"a53f757e-32c5-459b-aee8-111fe72dba5d",{"_uid":1397,"body":1398,"name":1390,"image":1530,"pinned":24,"summary":1532,"category":320,"component":266,"related_articles":1533},"f67b6304-a0ce-4c15-b3d3-bda55fcb05e3",{"type":354,"content":1399},[1400,1405,1410,1489,1494,1517,1521],{"type":357,"attrs":1401,"content":1402},{"textAlign":59},[1403],{"text":1404,"type":362},"If single sign-on isn’t working as expected, check these common causes before assuming something’s broken on Foxy’s end.",{"type":364,"attrs":1406,"content":1407},{"level":366,"textAlign":59},[1408],{"text":1409,"type":362},"Common causes",{"type":451,"content":1411},[1412,1423,1434,1445,1456,1467,1478],{"type":376,"content":1413},[1414],{"type":357,"attrs":1415,"content":1416},{"textAlign":59},[1417,1421],{"text":1418,"type":362,"marks":1419},"Check your store’s error log",[1420],{"type":739},{"text":1422,"type":362}," in the Foxy admin. Single sign-on errors are logged there with additional context.",{"type":376,"content":1424},[1425],{"type":357,"attrs":1426,"content":1427},{"textAlign":59},[1428,1432],{"text":1429,"type":362,"marks":1430},"Timestamp is in the past.",[1431],{"type":739},{"text":1433,"type":362}," The timestamp must be set in the future, and shouldn’t be set to an implausibly distant date either.",{"type":376,"content":1435},[1436],{"type":357,"attrs":1437,"content":1438},{"textAlign":59},[1439,1443],{"text":1440,"type":362,"marks":1441},"Wrong customer ID.",[1442],{"type":739},{"text":1444,"type":362}," The customer ID must be the Foxy customer ID, as returned by the webhooks or the API, not the ID from your own database.",{"type":376,"content":1446},[1447],{"type":357,"attrs":1448,"content":1449},{"textAlign":59},[1450,1454],{"text":1451,"type":362,"marks":1452},"Guest customer ID.",[1453],{"type":739},{"text":1455,"type":362}," The customer ID must belong to a non-guest customer record (is_anonymous should be 0). A guest customer can’t be sent through single sign-on.",{"type":376,"content":1457},[1458],{"type":357,"attrs":1459,"content":1460},{"textAlign":59},[1461,1465],{"text":1462,"type":362,"marks":1463},"Wrong endpoint.",[1464],{"type":739},{"text":1466,"type":362}," The URL should point to \u002Fcheckout, not \u002Fcart.",{"type":376,"content":1468},[1469],{"type":357,"attrs":1470,"content":1471},{"textAlign":59},[1472,1476],{"text":1473,"type":362,"marks":1474},"Malformed URL.",[1475],{"type":739},{"text":1477,"type":362}," Check for missing & or = characters, or other syntax errors in the query string.",{"type":376,"content":1479},[1480],{"type":357,"attrs":1481,"content":1482},{"textAlign":59},[1483,1487],{"text":1484,"type":362,"marks":1485},"Incorrect hash.",[1486],{"type":739},{"text":1488,"type":362}," Confirm the hash you’re sending matches what you get from manually hashing the same customer ID, timestamp, and secret key.",{"type":364,"attrs":1490,"content":1491},{"level":366,"textAlign":59},[1492],{"text":1493,"type":362},"What happens on error",{"type":451,"content":1495},[1496,1503,1510],{"type":376,"content":1497},[1498],{"type":357,"attrs":1499,"content":1500},{"textAlign":59},[1501],{"text":1502,"type":362},"If the token doesn’t match what Foxy expects, the customer is redirected to the store’s configured URL. This should only happen if your single sign-on endpoint is misconfigured, or if someone is attempting to tamper with the redirect.",{"type":376,"content":1504},[1505],{"type":357,"attrs":1506,"content":1507},{"textAlign":59},[1508],{"text":1509,"type":362},"If the timestamp has expired, the customer is redirected back to your single sign-on endpoint. This can look like an error if it immediately bounces the customer back to checkout. Set the expiration window generously (an hour or more) to avoid this, or warn the customer before their session is about to expire.",{"type":376,"content":1511},[1512],{"type":357,"attrs":1513,"content":1514},{"textAlign":59},[1515],{"text":1516,"type":362},"To prevent an infinite redirect loop, Foxy sends the customer to your store’s homepage after four checkout attempts that don’t reach the checkout page. Reaching checkout successfully resets this count. See the single sign-on parameters reference for details on token expiration.",{"type":364,"attrs":1518,"content":1519},{"level":366,"textAlign":59},[1520],{"text":449,"type":362},{"type":451,"content":1522},[1523],{"type":376,"content":1524},[1525],{"type":357,"attrs":1526,"content":1527},{"textAlign":59},[1528],{"text":1529,"type":362},"If none of the above resolves the issue, contact Foxy support for help.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1531},{},"Common causes of single sign-on checkout errors, what happens when a token fails, and how to resolve them.",[],"troubleshoot-single-sign-on-issues","help\u002Farticles\u002Ftroubleshoot-single-sign-on-issues",-3730,[],"0bb66e99-7aab-4f97-8244-1c1e74b72087",[],{"name":1541,"created_at":1542,"published_at":1543,"updated_at":1544,"id":1545,"uuid":47,"content":1546,"slug":48,"full_slug":48,"sort_by_date":59,"position":1724,"tag_list":1725,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":1726,"first_published_at":1727,"release_id":59,"lang":65,"path":59,"alternates":1728,"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":1547,"_uid":1550,"title":1551,"action":1552,"fields":1553,"method":1700,"columns":1701,"subtitle":1715,"component":48,"button_text":1721,"submit_title":1722,"submit_subtitle":1723},{"_uid":1548,"title":1541,"plugin":1549,"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",[1554,1559,1563,1671,1674,1679,1694],{"_uid":1555,"name":1556,"type":362,"label":1557,"options":13,"required":33,"component":1558,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":1560,"name":1561,"type":1561,"label":1562,"options":13,"required":33,"component":1558,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","email","Email Address",{"_uid":1564,"name":1565,"type":1566,"label":1567,"options":1568,"required":33,"component":1558,"conditions":1569,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[1570,1625,1635,1642,1650,1658,1664],{"_uid":1571,"equals":1572,"fields":1573,"component":1624},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[1574],{"_uid":1575,"body":1576,"type":1622,"title":13,"component":1623},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":354,"content":1577},[1578],{"type":357,"content":1579},[1580,1582,1589,1591,1593,1594,1598,1600,1605,1613,1615,1620],{"text":1581,"type":362},"We are ",{"text":1583,"type":362,"marks":1584},"Foxy.io",[1585],{"type":534,"attrs":1586},{"href":1587,"uuid":59,"anchor":59,"custom":1588,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":1590,"type":362},", 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":1592},"hard_break",{"type":1592},{"text":1595,"type":362,"marks":1596},"NOTE:",[1597],{"type":739},{"text":1599,"type":362}," We are ",{"text":1601,"type":362,"marks":1602},"not ",[1603],{"type":1604},"italic",{"text":1606,"type":362,"marks":1607},"Foxy.in",[1608,1612],{"type":534,"attrs":1609},{"href":1610,"uuid":59,"anchor":59,"custom":1611,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":1604},{"text":1614,"type":362},". We are not in any way affiliated with ",{"text":1606,"type":362,"marks":1616},[1617],{"type":534,"attrs":1618},{"href":1610,"uuid":59,"anchor":59,"custom":1619,"target":59,"linktype":31},{},{"text":1621,"type":362},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":1626,"equals":1627,"fields":1628,"component":1624},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[1629],{"_uid":1630,"name":1631,"type":1632,"label":13,"options":13,"required":24,"component":1558,"conditions":1633,"placeholder":13,"default_value":1634},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":1636,"equals":208,"fields":1637,"component":1624},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[1638],{"_uid":1639,"name":1631,"type":1632,"label":13,"options":13,"required":24,"component":1558,"conditions":1640,"placeholder":13,"default_value":1641},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":1643,"equals":1644,"fields":1645,"component":1624},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[1646],{"_uid":1647,"name":1631,"type":1632,"label":13,"options":13,"required":24,"component":1558,"conditions":1648,"placeholder":13,"default_value":1649},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":1651,"equals":1652,"fields":1653,"component":1624},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[1654],{"_uid":1655,"name":1631,"type":1632,"label":13,"options":13,"required":24,"component":1558,"conditions":1656,"placeholder":13,"default_value":1657},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":1659,"equals":1572,"fields":1660,"component":1624},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[1661],{"_uid":1662,"name":1631,"type":1632,"label":13,"options":13,"required":24,"component":1558,"conditions":1663,"placeholder":13,"default_value":1634},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":1665,"equals":1666,"fields":1667,"component":1624},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[1668],{"_uid":1669,"name":1631,"type":1632,"label":13,"options":13,"required":24,"component":1558,"conditions":1670,"placeholder":13,"default_value":1634},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":1672,"component":1673},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":1675,"name":1676,"type":1677,"label":1678,"options":13,"required":33,"component":1558,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":1680,"name":1681,"type":1566,"label":1682,"options":1683,"required":33,"component":1558,"conditions":1684,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[1685],{"_uid":1686,"equals":1687,"fields":1688,"component":1624},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[1689],{"_uid":1690,"name":1691,"type":362,"label":1692,"options":13,"required":33,"component":1558,"conditions":1693,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":1695,"name":1696,"type":1566,"label":1697,"options":1698,"required":33,"component":1558,"conditions":1699,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[1702],{"_uid":1703,"text":1704,"title":1713,"component":1714},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":354,"content":1705},[1706],{"type":357,"content":1707},[1708,1710,1711],{"text":1709,"type":362},"855.369.9227",{"type":1592},{"text":1712,"type":362},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":354,"content":1716},[1717],{"type":357,"content":1718},[1719],{"text":1720,"type":362},"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",[],{},1784267958841]