[{"data":1,"prerenderedAt":761},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Farticles\u002Fset-up-single-sign-on-for-checkout":314,"no-guide:set-up-single-sign-on-for-checkout":59,"article:\u002Fhelp\u002Farticles\u002Fset-up-single-sign-on-for-checkout":530,"story:contact":544,"help:tree:e290ebae-9b90-4f3a-b715-c3f68f79a9e5":734,"_apollo:default":760},{"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":523,"full_slug":524,"sort_by_date":59,"position":525,"tag_list":526,"is_startpage":24,"parent_id":527,"meta_data":59,"group_id":528,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":529,"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":322,"body":323,"name":315,"image":518,"pinned":24,"summary":520,"category":521,"component":266,"related_articles":522},"e9ea7dca-62bf-4259-ade4-fa92cae5d6e2",{"type":324,"content":325},"doc",[326,333,340,430,435,441,446],{"type":327,"attrs":328,"content":329},"paragraph",{"textAlign":59},[330],{"text":331,"type":332},"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.","text",{"type":334,"attrs":335,"content":337},"heading",{"level":336,"textAlign":59},2,[338],{"text":339,"type":332},"Steps",{"type":341,"attrs":342,"content":344},"ordered_list",{"order":343},1,[345,369,376,393,423],{"type":346,"content":347},"list_item",[348],{"type":327,"attrs":349,"content":350},{"textAlign":59},[351,353,360,362,367],{"text":352,"type":332},"In the ",{"text":354,"type":332,"marks":355},"Foxy admin",[356],{"type":357,"attrs":358},"link",{"href":359,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Fadmin.foxy.io",{"text":361,"type":332},", 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":363,"type":332,"marks":364},"fc_auth_token",[365],{"type":366},"code",{"text":368,"type":332},".",{"type":346,"content":370},[371],{"type":327,"attrs":372,"content":373},{"textAlign":59},[374],{"text":375,"type":332},"On your endpoint, check whether the current user is authenticated on your site, using your existing session or cookie data.",{"type":346,"content":377},[378],{"type":327,"attrs":379,"content":380},{"textAlign":59},[381,383,386,388,392],{"text":382,"type":332},"If the customer is authenticated, generate an ",{"text":363,"type":332,"marks":384},[385],{"type":366},{"text":387,"type":332}," by hashing their Foxy customer ID, an expiration timestamp, and your store’s secret key with SHA-1, joined by ",{"text":389,"type":332,"marks":390},"|",[391],{"type":366},{"text":368,"type":332},{"type":346,"content":394},[395],{"type":327,"attrs":396,"content":397},{"textAlign":59},[398,400,404,406,410,412,415,417,421],{"text":399,"type":332},"Redirect the customer to your Foxy checkout URL with ",{"text":401,"type":332,"marks":402},"fc_customer_id",[403],{"type":366},{"text":405,"type":332},", ",{"text":407,"type":332,"marks":408},"timestamp",[409],{"type":366},{"text":411,"type":332},", and ",{"text":363,"type":332,"marks":413},[414],{"type":366},{"text":416,"type":332}," as query parameters, plus ",{"text":418,"type":332,"marks":419},"fcsid",[420],{"type":366},{"text":422,"type":332}," if Foxy provided one. See the SSO parameters reference for details on each value.",{"type":346,"content":424},[425],{"type":327,"attrs":426,"content":427},{"textAlign":59},[428],{"text":429,"type":332},"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":334,"attrs":431,"content":432},{"level":336,"textAlign":59},[433],{"text":434,"type":332},"Example",{"type":436,"attrs":437,"content":438},"code_block",{"class":59},[439],{"text":440,"type":332},"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":334,"attrs":442,"content":443},{"level":336,"textAlign":59},[444],{"text":445,"type":332},"Notes",{"type":447,"content":448},"bullet_list",[449,470,487,494,511],{"type":346,"content":450},[451],{"type":327,"attrs":452,"content":453},{"textAlign":59},[454,456,462,464,468],{"text":455,"type":332},"Use the ",{"text":457,"type":332,"marks":458},"Foxy SDK",[459],{"type":357,"attrs":460},{"href":461,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Fsdk.foxy.dev",{"text":463,"type":332},"’s ",{"text":465,"type":332,"marks":466},"createSsoUrl",[467],{"type":366},{"text":469,"type":332}," function to generate this URL rather than building the hash yourself, where possible.",{"type":346,"content":471},[472],{"type":327,"attrs":473,"content":474},{"textAlign":59},[475,477,480,482,485],{"text":476,"type":332},"The expiration ",{"text":407,"type":332,"marks":478},[479],{"type":366},{"text":481,"type":332}," you hash must exactly match the ",{"text":407,"type":332,"marks":483},[484],{"type":366},{"text":486,"type":332}," 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":346,"content":488},[489],{"type":327,"attrs":490,"content":491},{"textAlign":59},[492],{"text":493,"type":332},"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":346,"content":495},[496],{"type":327,"attrs":497,"content":498},{"textAlign":59},[499,501,504,506,510],{"text":500,"type":332},"To allow an unauthenticated customer through to checkout, set ",{"text":401,"type":332,"marks":502},[503],{"type":366},{"text":505,"type":332}," to ",{"text":507,"type":332,"marks":508},"0",[509],{"type":366},{"text":368,"type":332},{"type":346,"content":512},[513],{"type":327,"attrs":514,"content":515},{"textAlign":59},[516],{"text":517,"type":332},"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":519},{},"How to configure your site's single sign-on endpoint so customers already logged into your site skip re-authenticating at checkout.","89b14cf6-52cb-41c8-8aed-7ceae33cb271",[],"set-up-single-sign-on-for-checkout","help\u002Farticles\u002Fset-up-single-sign-on-for-checkout",-3700,[],2659,"b866faeb-6938-4162-b26f-2db067260736",[],{"html":531,"sections":532,"segments":540},"\u003Cp>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.\u003C\u002Fp>\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>In the \u003Ca href=\"https:\u002F\u002Fadmin.foxy.io\" class=\"\">Foxy admin\u003C\u002Fa>, set your store’s shared-authentication endpoint URL. This is the URL Foxy redirects customers to whenever a checkout request arrives without a valid \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_auth_token\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>On your endpoint, check whether the current user is authenticated on your site, using your existing session or cookie data.\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>If the customer is authenticated, generate an \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_auth_token\u003C\u002Fcode> by hashing their Foxy customer ID, an expiration timestamp, and your store’s secret key with SHA-1, joined by \u003Ccode class=\"badge bg-soft-danger text-danger\">|\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\">4\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>Redirect the customer to your Foxy checkout URL with \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_customer_id\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">timestamp\u003C\u002Fcode>, and \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_auth_token\u003C\u002Fcode> as query parameters, plus \u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode> if Foxy provided one. See the SSO parameters reference for details on each value.\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\">5\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>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.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fsection>\u003Csection id=\"example\" data-title=\"Example\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"example\">Example\u003C\u002Fh2>\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>const crypto = require(&#x27;crypto&#x27;);\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(&#x27;sha1&#x27;).update(stringToSign).digest(&#x27;hex&#x27;);\n  let url = `https:\u002F\u002F${storeDomain}\u002Fcheckout?fc_customer_id=${customerId}×tamp=${timestamp}&amp;fc_auth_token=${token}`;\n  if (sessionId) url += `&amp;fcsid=${sessionId}`;\n  return url;\n}\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>Use the \u003Ca href=\"https:\u002F\u002Fsdk.foxy.dev\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Foxy SDK\u003C\u002Fa>’s \u003Ccode class=\"badge bg-soft-danger text-danger\">createSsoUrl\u003C\u002Fcode> function to generate this URL rather than building the hash yourself, where possible.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The expiration \u003Ccode class=\"badge bg-soft-danger text-danger\">timestamp\u003C\u002Fcode> you hash must exactly match the \u003Ccode class=\"badge bg-soft-danger text-danger\">timestamp\u003C\u002Fcode> 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.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>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.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>To allow an unauthenticated customer through to checkout, set \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_customer_id\u003C\u002Fcode> to \u003Ccode class=\"badge bg-soft-danger text-danger\">0\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For guidance on keeping customer records synced with Foxy so a customer ID is available, see Sync customer data for SSO.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fsection>",[533,536,538],{"id":534,"title":339,"level":535},"steps","H2",{"id":537,"title":434,"level":535},"example",{"id":539,"title":445,"level":535},"notes",[541],{"type":542,"content":543},"html","\u003Cp>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.\u003C\u002Fp>\u003Ch2>Steps\u003C\u002Fh2>\u003Col order=\"1\">\u003Cli>\u003Cp>In the \u003Ca href=\"https:\u002F\u002Fadmin.foxy.io\" class=\"\">Foxy admin\u003C\u002Fa>, set your store’s shared-authentication endpoint URL. This is the URL Foxy redirects customers to whenever a checkout request arrives without a valid \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_auth_token\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>On your endpoint, check whether the current user is authenticated on your site, using your existing session or cookie data.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>If the customer is authenticated, generate an \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_auth_token\u003C\u002Fcode> by hashing their Foxy customer ID, an expiration timestamp, and your store’s secret key with SHA-1, joined by \u003Ccode class=\"badge bg-soft-danger text-danger\">|\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Redirect the customer to your Foxy checkout URL with \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_customer_id\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">timestamp\u003C\u002Fcode>, and \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_auth_token\u003C\u002Fcode> as query parameters, plus \u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode> if Foxy provided one. See the SSO parameters reference for details on each value.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>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.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Ch2>Example\u003C\u002Fh2>\u003Cpre>\u003Ccode>const crypto = require(&#039;crypto&#039;);\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(&#039;sha1&#039;).update(stringToSign).digest(&#039;hex&#039;);\n  let url = `https:\u002F\u002F${storeDomain}\u002Fcheckout?fc_customer_id=${customerId}×tamp=${timestamp}&amp;fc_auth_token=${token}`;\n  if (sessionId) url += `&amp;fcsid=${sessionId}`;\n  return url;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>Notes\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>Use the \u003Ca href=\"https:\u002F\u002Fsdk.foxy.dev\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Foxy SDK\u003C\u002Fa>’s \u003Ccode class=\"badge bg-soft-danger text-danger\">createSsoUrl\u003C\u002Fcode> function to generate this URL rather than building the hash yourself, where possible.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The expiration \u003Ccode class=\"badge bg-soft-danger text-danger\">timestamp\u003C\u002Fcode> you hash must exactly match the \u003Ccode class=\"badge bg-soft-danger text-danger\">timestamp\u003C\u002Fcode> 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.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>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.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>To allow an unauthenticated customer through to checkout, set \u003Ccode class=\"badge bg-soft-danger text-danger\">fc_customer_id\u003C\u002Fcode> to \u003Ccode class=\"badge bg-soft-danger text-danger\">0\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For guidance on keeping customer records synced with Foxy so a customer ID is available, see Sync customer data for SSO.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>",{"name":545,"created_at":546,"published_at":547,"updated_at":548,"id":549,"uuid":47,"content":550,"slug":48,"full_slug":48,"sort_by_date":59,"position":729,"tag_list":730,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":731,"first_published_at":732,"release_id":59,"lang":65,"path":59,"alternates":733,"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":551,"_uid":554,"title":555,"action":556,"fields":557,"method":705,"columns":706,"subtitle":720,"component":48,"button_text":726,"submit_title":727,"submit_subtitle":728},{"_uid":552,"title":545,"plugin":553,"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",[558,563,567,676,679,684,699],{"_uid":559,"name":560,"type":332,"label":561,"options":13,"required":33,"component":562,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":564,"name":565,"type":565,"label":566,"options":13,"required":33,"component":562,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","email","Email Address",{"_uid":568,"name":569,"type":570,"label":571,"options":572,"required":33,"component":562,"conditions":573,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[574,630,640,647,655,663,669],{"_uid":575,"equals":576,"fields":577,"component":629},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[578],{"_uid":579,"body":580,"type":627,"title":13,"component":628},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":324,"content":581},[582],{"type":327,"content":583},[584,586,593,595,597,598,603,605,610,618,620,625],{"text":585,"type":332},"We are ",{"text":587,"type":332,"marks":588},"Foxy.io",[589],{"type":357,"attrs":590},{"href":591,"uuid":59,"anchor":59,"custom":592,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":594,"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":596},"hard_break",{"type":596},{"text":599,"type":332,"marks":600},"NOTE:",[601],{"type":602},"bold",{"text":604,"type":332}," We are ",{"text":606,"type":332,"marks":607},"not ",[608],{"type":609},"italic",{"text":611,"type":332,"marks":612},"Foxy.in",[613,617],{"type":357,"attrs":614},{"href":615,"uuid":59,"anchor":59,"custom":616,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":609},{"text":619,"type":332},". We are not in any way affiliated with ",{"text":611,"type":332,"marks":621},[622],{"type":357,"attrs":623},{"href":615,"uuid":59,"anchor":59,"custom":624,"target":59,"linktype":31},{},{"text":626,"type":332},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":631,"equals":632,"fields":633,"component":629},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[634],{"_uid":635,"name":636,"type":637,"label":13,"options":13,"required":24,"component":562,"conditions":638,"placeholder":13,"default_value":639},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":641,"equals":208,"fields":642,"component":629},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[643],{"_uid":644,"name":636,"type":637,"label":13,"options":13,"required":24,"component":562,"conditions":645,"placeholder":13,"default_value":646},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":648,"equals":649,"fields":650,"component":629},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[651],{"_uid":652,"name":636,"type":637,"label":13,"options":13,"required":24,"component":562,"conditions":653,"placeholder":13,"default_value":654},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":656,"equals":657,"fields":658,"component":629},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[659],{"_uid":660,"name":636,"type":637,"label":13,"options":13,"required":24,"component":562,"conditions":661,"placeholder":13,"default_value":662},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":664,"equals":576,"fields":665,"component":629},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[666],{"_uid":667,"name":636,"type":637,"label":13,"options":13,"required":24,"component":562,"conditions":668,"placeholder":13,"default_value":639},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":670,"equals":671,"fields":672,"component":629},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[673],{"_uid":674,"name":636,"type":637,"label":13,"options":13,"required":24,"component":562,"conditions":675,"placeholder":13,"default_value":639},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":677,"component":678},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":680,"name":681,"type":682,"label":683,"options":13,"required":33,"component":562,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":685,"name":686,"type":570,"label":687,"options":688,"required":33,"component":562,"conditions":689,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[690],{"_uid":691,"equals":692,"fields":693,"component":629},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[694],{"_uid":695,"name":696,"type":332,"label":697,"options":13,"required":33,"component":562,"conditions":698,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":700,"name":701,"type":570,"label":702,"options":703,"required":33,"component":562,"conditions":704,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[707],{"_uid":708,"text":709,"title":718,"component":719},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":324,"content":710},[711],{"type":327,"content":712},[713,715,716],{"text":714,"type":332},"855.369.9227",{"type":596},{"text":717,"type":332},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":324,"content":721},[722],{"type":327,"content":723},[724],{"text":725,"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,735],{"name":736,"created_at":737,"published_at":738,"updated_at":739,"id":740,"uuid":521,"content":741,"slug":754,"full_slug":755,"sort_by_date":59,"position":756,"tag_list":757,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":758,"first_published_at":738,"release_id":59,"lang":65,"path":59,"alternates":759,"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,{"_uid":742,"icon":13,"name":736,"type":743,"pinned":24,"summary":744,"category":13,"component":297,"blog_posts":745,"icon_custom":746,"case_studies":748,"faq_sections":749,"featured_guides":750,"mailbox_category":13,"featured_articles":751,"featured_blog_posts":752,"featured_case_studies":753},"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":747},{},[],[],[],[],[],[],"single-sign-on","help\u002Fcategories\u002Fsingle-sign-on",-720,[],"51903714-6c5b-45ba-b8a6-5bf411ffb056",[],{},1784267941061]