[{"data":1,"prerenderedAt":1213},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Farticles\u002Fintegrate-your-own-cart-with-foxy":314,"no-guide:integrate-your-own-cart-with-foxy":59,"article:\u002Fhelp\u002Farticles\u002Fintegrate-your-own-cart-with-foxy":938,"story:contact":972,"help:tree:bf44382f-e40f-42ec-9b7f-f0d40daa7fa1:7872e868-fad7-4aab-98d2-fdced98cfce8":1161,"_apollo:default":1212},{"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":931,"full_slug":932,"sort_by_date":59,"position":933,"tag_list":934,"is_startpage":24,"parent_id":935,"meta_data":59,"group_id":936,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":937,"default_full_slug":59,"translated_slugs":59},"Integrate your own cart with Foxy","2026-07-27T21:03:49.636Z","2026-07-27T21:04:43.380Z","2026-07-27T21:04:43.406Z",202738195044093,"bf44382f-e40f-42ec-9b7f-f0d40daa7fa1",{"_uid":322,"body":323,"name":315,"image":925,"pinned":24,"summary":927,"category":928,"component":266,"related_articles":930},"6a833002-c122-422b-a1c3-4f278728fc9c",{"type":324,"content":325},"doc",[326,333,340,345,370,382,387,392,403,408,419,424,467,472,477,526,540,557,562,567,573,579,589,594,599,604,615,638,649,654,659,664,674,679,684,730,735,740,745,752,757,767,784,794,801,806,811,816,821,857,880,885,890],{"type":327,"attrs":328,"content":329},"paragraph",{"textAlign":59},[330],{"text":331,"type":332},"This article covers how to integrate with Foxy when you already have your own cart functionality and want Foxy to take over starting at checkout — creating carts server-side, authenticating customers via SSO, and handling taxes, shipping, and coupons without relying on the standard clientside cart flow. This is an advanced integration path and assumes comfort with server-side scripting and the Foxy API.","text",{"type":334,"attrs":335,"content":337},"heading",{"level":336,"textAlign":59},2,[338],{"text":339,"type":332},"Why you’d do this",{"type":327,"attrs":341,"content":342},{"textAlign":59},[343],{"text":344,"type":332},"A few common situations call for bypassing Foxy’s cart functionality:",{"type":346,"content":347},"bullet_list",[348,356,363],{"type":349,"content":350},"list_item",[351],{"type":327,"attrs":352,"content":353},{"textAlign":59},[354],{"text":355,"type":332},"You already have a persistent cart in your own system, and want Foxy to take over just the checkout (commonly to offload PCI compliance).",{"type":349,"content":357},[358],{"type":327,"attrs":359,"content":360},{"textAlign":59},[361],{"text":362,"type":332},"You need custom validation or other application logic in front of the Foxy-powered cart that doesn’t exist in a standard integration.",{"type":349,"content":364},[365],{"type":327,"attrs":366,"content":367},{"textAlign":59},[368],{"text":369,"type":332},"Products are configured entirely at the time of purchase, and customers should never interact with the cart directly.",{"type":327,"attrs":371,"content":372},{"textAlign":59},[373,375,380],{"text":374,"type":332},"If you only want to skip the visual cart step and send customers straight to checkout, you don’t need any of this — just use the ",{"text":376,"type":332,"marks":377},"cart=checkout",[378],{"type":379},"code",{"text":381,"type":332}," parameter on your add-to-cart links.",{"type":334,"attrs":383,"content":384},{"level":336,"textAlign":59},[385],{"text":386,"type":332},"The cart: interaction versus underlying data",{"type":327,"attrs":388,"content":389},{"textAlign":59},[390],{"text":391,"type":332},"“Cart” can mean two different things: the visual display a customer normally sees (names, images, prices, quantities), and the underlying data behind that display. You can bypass the first, but Foxy always requires the underlying cart data to exist for a transaction — this is what gets passed to the payment gateway and what taxes and other functionality are calculated from. You can’t tell Foxy to simply charge a customer $100; you have to supply what makes up that $100.",{"type":327,"attrs":393,"content":394},{"textAlign":59},[395,397,401],{"text":396,"type":332},"You can self-host a custom cart, but you must still use Foxy’s hosted checkout (at ",{"text":398,"type":332,"marks":399},"\u002Fcheckout",[400],{"type":379},{"text":402,"type":332}," on your Foxy domain) to shift the bulk of PCI compliance from you to Foxy.",{"type":334,"attrs":404,"content":405},{"level":336,"textAlign":59},[406],{"text":407,"type":332},"How the integration differs from a standard flow",{"type":327,"attrs":409,"content":410},{"textAlign":59},[411,413,417],{"text":412,"type":332},"In a standard Foxy integration, add-to-cart buttons point directly to your store’s ",{"text":414,"type":332,"marks":415},"\u002Fcart",[416],{"type":379},{"text":418,"type":332}," endpoint, and the customer sees the Foxy-hosted cart, checkout, and receipt in sequence.",{"type":327,"attrs":420,"content":421},{"textAlign":59},[422],{"text":423,"type":332},"In this integration, your own cart handles everything up until checkout:",{"type":425,"attrs":426,"content":428},"ordered_list",{"order":427},1,[429,441,448,460],{"type":349,"content":430},[431],{"type":327,"attrs":432,"content":433},{"textAlign":59},[434,436,439],{"text":435,"type":332},"Add-to-cart buttons point to your own system, not to Foxy’s ",{"text":414,"type":332,"marks":437},[438],{"type":379},{"text":440,"type":332}," endpoint.",{"type":349,"content":442},[443],{"type":327,"attrs":444,"content":445},{"textAlign":59},[446],{"text":447,"type":332},"Any cart display before checkout is handled entirely by your system.",{"type":349,"content":449},[450],{"type":327,"attrs":451,"content":452},{"textAlign":59},[453,455,458],{"text":454,"type":332},"When the customer is ready to pay, your system creates a cart in Foxy via the API (based on your own cart’s contents), then redirects the customer to ",{"text":398,"type":332,"marks":456},[457],{"type":379},{"text":459,"type":332}," with the appropriate session ID — optionally including an SSO token if the customer is already authenticated.",{"type":349,"content":461},[462],{"type":327,"attrs":463,"content":464},{"textAlign":59},[465],{"text":466,"type":332},"After checkout, the customer lands on the Foxy-hosted receipt, or is redirected to a URL of your choosing (optionally with an outgoing SSO token), and your system can sync the customer’s account.",{"type":334,"attrs":468,"content":469},{"level":336,"textAlign":59},[470],{"text":471,"type":332},"Creating a cart server-side",{"type":327,"attrs":473,"content":474},{"textAlign":59},[475],{"text":476,"type":332},"Foxy provides two ways to create a cart from your server:",{"type":346,"content":478},[479,504],{"type":349,"content":480},[481],{"type":327,"attrs":482,"content":483},{"textAlign":59},[484,489,492,496,498,502],{"text":485,"type":332,"marks":486},"The ",[487],{"type":488},"bold",{"text":414,"type":332,"marks":490},[491],{"type":379},{"text":493,"type":332,"marks":494}," endpoint",[495],{"type":488},{"text":497,"type":332}," — the same endpoint clientside requests hit, using ",{"text":499,"type":332,"marks":500},"output=json",[501],{"type":379},{"text":503,"type":332},". No authentication is required by default (though you can lock it down with link\u002Fform signing), which makes it the easier option for most integrations.",{"type":349,"content":505},[506],{"type":327,"attrs":507,"content":508},{"textAlign":59},[509,513,515,519,521,524],{"text":510,"type":332,"marks":511},"The Hypermedia API (hAPI)",[512],{"type":488},{"text":514,"type":332}," — POST to the ",{"text":516,"type":332,"marks":517},"\u002Fcarts",[518],{"type":379},{"text":520,"type":332}," resource for more functionality and a consistent interface with the rest of your Foxy account. Retrieving and setting shipping rates isn’t currently supported through the hAPI, so you’ll need the ",{"text":414,"type":332,"marks":522},[523],{"type":379},{"text":525,"type":332}," endpoint approach for that regardless of which method you use elsewhere.",{"type":327,"attrs":527,"content":528},{"textAlign":59},[529,531,538],{"text":530,"type":332},"See ",{"text":532,"type":332,"marks":533},"Interact with the cart server-side",[534],{"type":535,"attrs":536},"link",{"href":537,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Finteract-with-the-cart-server-side",{"text":539,"type":332}," for the request details for both approaches.",{"type":327,"attrs":541,"content":542},{"textAlign":59},[543,545,549,551,555],{"text":544,"type":332},"Whichever approach you use, note the ",{"text":546,"type":332,"marks":547},"session_id",[548],{"type":379},{"text":550,"type":332}," (",{"text":552,"type":332,"marks":553},"fcsid",[554],{"type":379},{"text":556,"type":332},") returned — you’ll need to pass it on subsequent requests to modify the same cart, and to send the customer to checkout.",{"type":334,"attrs":558,"content":559},{"level":336,"textAlign":59},[560],{"text":561,"type":332},"Redirecting the customer to checkout",{"type":327,"attrs":563,"content":564},{"textAlign":59},[565],{"text":566,"type":332},"Once the cart exists, send the customer to:",{"type":568,"attrs":569,"content":570},"code_block",{"class":59},[571],{"text":572,"type":332},"https:\u002F\u002FYOURDOMAIN.foxycart.com\u002Fcart?cart=checkout&fcsid=YOUR_FCSID_VALUE_HERE\n",{"type":334,"attrs":574,"content":576},{"level":575,"textAlign":59},3,[577],{"text":578,"type":332},"Authenticating the customer (incoming SSO)",{"type":327,"attrs":580,"content":581},{"textAlign":59},[582,584,587],{"text":583,"type":332},"If your customer is already logged into your own system, use Foxy’s SSO functionality so they don’t have to log in again at checkout. If SSO is enabled on the store, a valid SSO auth token is required to load ",{"text":398,"type":332,"marks":585},[586],{"type":379},{"text":588,"type":332},". Rather than redirecting through your SSO endpoint, a serverside integration can generate the token directly and send the customer straight to a URL like:",{"type":568,"attrs":590,"content":591},{"class":59},[592],{"text":593,"type":332},"\u002Fcheckout?fc_auth_token=AUTH_TOKEN&fcsid=SESSION_ID&fc_customer_id=CUSTOMER_ID&timestamp=TIMESTAMP\n",{"type":327,"attrs":595,"content":596},{"textAlign":59},[597],{"text":598,"type":332},"The customer must already exist in Foxy before you can generate a token for them — create them via the hAPI either on demand right before redirecting, or ahead of time.",{"type":334,"attrs":600,"content":601},{"level":336,"textAlign":59},[602],{"text":603,"type":332},"Handling the customer after the transaction",{"type":327,"attrs":605,"content":606},{"textAlign":59},[607,609,613],{"text":608,"type":332},"By default, a completed checkout lands the customer on the Foxy-hosted ",{"text":610,"type":332,"marks":611},"\u002Freceipt",[612],{"type":379},{"text":614,"type":332}," page and triggers a webhook. For a serverside integration, you may want more control:",{"type":346,"content":616},[617,624,631],{"type":349,"content":618},[619],{"type":327,"attrs":620,"content":621},{"textAlign":59},[622],{"text":623,"type":332},"Empty the receipt template so it never displays, and always redirect elsewhere.",{"type":349,"content":625},[626],{"type":327,"attrs":627,"content":628},{"textAlign":59},[629],{"text":630,"type":332},"Keep the Foxy receipt for historical purposes (it’s linked from email receipts by default), but redirect immediately on first view.",{"type":349,"content":632},[633],{"type":327,"attrs":634,"content":635},{"textAlign":59},[636],{"text":637,"type":332},"Keep the receipt visible with an optional “click here to continue” link.",{"type":327,"attrs":639,"content":640},{"textAlign":59},[641,643,647],{"text":642,"type":332},"To redirect on the initial view only, add logic to your template config using the ",{"text":644,"type":332,"marks":645},"first_receipt_display",[646],{"type":379},{"text":648,"type":332}," boolean check.",{"type":334,"attrs":650,"content":651},{"level":575,"textAlign":59},[652],{"text":653,"type":332},"Outgoing SSO and user syncing",{"type":327,"attrs":655,"content":656},{"textAlign":59},[657],{"text":658,"type":332},"To log the customer into your own system automatically after their purchase — useful when customers are paying for access to content on your site — use outgoing (reverse) SSO. The approach mirrors incoming SSO. Foxy doesn’t support SAML by default, but it’s available for Enterprise customers, either implemented by Foxy or by using an intermediary script to bridge SAML to Foxy’s SSO approach.",{"type":334,"attrs":660,"content":661},{"level":336,"textAlign":59},[662],{"text":663,"type":332},"Taxes, shipping, and coupons",{"type":327,"attrs":665,"content":666},{"textAlign":59},[667,669,672],{"text":668,"type":332},"This section uses the ",{"text":414,"type":332,"marks":670},[671],{"type":379},{"text":673,"type":332}," endpoint rather than the hAPI, since shipping rate handling in particular isn’t currently supported there.",{"type":334,"attrs":675,"content":676},{"level":575,"textAlign":59},[677],{"text":678,"type":332},"Taxes",{"type":327,"attrs":680,"content":681},{"textAlign":59},[682],{"text":683,"type":332},"To retrieve a tax estimate during your own checkout flow:",{"type":425,"attrs":685,"content":686},{"order":427},[687,694,717],{"type":349,"content":688},[689],{"type":327,"attrs":690,"content":691},{"textAlign":59},[692],{"text":693,"type":332},"Create the cart and session as described above.",{"type":349,"content":695},[696,701,706],{"type":327,"attrs":697,"content":698},{"textAlign":59},[699],{"text":700,"type":332},"Attach a postal code to the session with a request such as:",{"type":568,"attrs":702,"content":703},{"class":59},[704],{"text":705,"type":332},"https:\u002F\u002FEXAMPLE.foxycart.com\u002Fv\u002F2.0.0\u002Fapi_json.php?city=San+Diego&region=CA&postal_code=92106&country=US&ThisAction=SaveCartContactInfo&fcsid=XXX&store_id=XXX\n",{"type":327,"attrs":707,"content":708},{"textAlign":59},[709,711,715],{"text":710,"type":332},"A ",{"text":712,"type":332,"marks":713},"GetAddressByPostalCode",[714],{"type":379},{"text":716,"type":332}," action is also available to retrieve possible cities from an entered postal code, for basic address validation similar to the Foxy checkout.",{"type":349,"content":718},[719],{"type":327,"attrs":720,"content":721},{"textAlign":59},[722,724,728],{"text":723,"type":332},"Retrieve the tax information with a request to ",{"text":725,"type":332,"marks":726},"https:\u002F\u002FEXAMPLE.foxycart.com\u002Fcart?fcsid=XXX&output=json",[727],{"type":379},{"text":729,"type":332},".",{"type":327,"attrs":731,"content":732},{"textAlign":59},[733],{"text":734,"type":332},"Note that the tax value may change once shipping is set, so you may need to repeat the retrieval step after setting shipping details.",{"type":334,"attrs":736,"content":737},{"level":575,"textAlign":59},[738],{"text":739,"type":332},"Shipping",{"type":327,"attrs":741,"content":742},{"textAlign":59},[743],{"text":744,"type":332},"Shipping is normally handled automatically on checkout, but you can set shipping details (method name and price) without customer input.",{"type":327,"attrs":746,"content":747},{"textAlign":59},[748],{"text":749,"type":332,"marks":750},"Step 1: add the rate to the session.",[751],{"type":488},{"type":568,"attrs":753,"content":754},{"class":59},[755],{"text":756,"type":332},"https:\u002F\u002FEXAMPLE.foxycart.com\u002Fv\u002F2.0.0\u002Fapi_json.php?shipping_address_name=YYY&shipping_service_id=XXX&shipping_service_description=UPS+Ground&total_shipping=16.65&total_future_shipping=0&ThisAction=SaveShippingServiceInfo&fcsid=XXX&store_id=XXX\n",{"type":327,"attrs":758,"content":759},{"textAlign":59},[760,761,765],{"text":485,"type":332},{"text":762,"type":332,"marks":763},"YYY",[764],{"type":379},{"text":766,"type":332}," value is only needed for multiship addresses and can be left empty otherwise.",{"type":327,"attrs":768,"content":769},{"textAlign":59},[770,772,776,778,782],{"text":771,"type":332},"You can use Foxy’s built-in shipping rates — after retrieving a tax estimate, the cart’s JSON includes a ",{"text":773,"type":332,"marks":774},"shipping_results",[775],{"type":379},{"text":777,"type":332}," node whose values you can submit back using the pattern above — or pass through arbitrary shipping amounts, in which case ",{"text":779,"type":332,"marks":780},"shipping_service_id",[781],{"type":379},{"text":783,"type":332}," must be an integer greater than 10000.",{"type":327,"attrs":785,"content":786},{"textAlign":59},[787,789,792],{"text":788,"type":332},"If you’re pushing the transaction through entirely via the hAPI, this step is sufficient. If the customer will complete the transaction on the ",{"text":398,"type":332,"marks":790},[791],{"type":379},{"text":793,"type":332}," page themselves, continue to step 2.",{"type":327,"attrs":795,"content":796},{"textAlign":59},[797],{"text":798,"type":332,"marks":799},"Step 2: handle the shipping on checkout.",[800],{"type":488},{"type":327,"attrs":802,"content":803},{"textAlign":59},[804],{"text":805,"type":332},"Even though the rate is already set, you also need to configure the custom shipping endpoint functionality so the checkout displays the same rate. If your endpoint returns the same details you set in step 1, the checkout loads with that rate already selected.",{"type":327,"attrs":807,"content":808},{"textAlign":59},[809],{"text":810,"type":332},"If the customer is authenticated via SSO, the rate may not be pre-selected — contact Foxy support to discuss options for these cases.",{"type":334,"attrs":812,"content":813},{"level":575,"textAlign":59},[814],{"text":815,"type":332},"Coupons",{"type":327,"attrs":817,"content":818},{"textAlign":59},[819],{"text":820,"type":332},"Foxy doesn’t support passing through arbitrary discount amounts the way it does shipping, so applying your own discount logic takes a few more steps:",{"type":425,"attrs":822,"content":823},{"order":427},[824,831,838],{"type":349,"content":825},[826],{"type":327,"attrs":827,"content":828},{"textAlign":59},[829],{"text":830,"type":332},"Calculate the discount amount in your own system.",{"type":349,"content":832},[833],{"type":327,"attrs":834,"content":835},{"textAlign":59},[836],{"text":837,"type":332},"Create a coupon code for that amount via the hAPI, with the appropriate display name and other details.",{"type":349,"content":839},[840],{"type":327,"attrs":841,"content":842},{"textAlign":59},[843,845,849,851,855],{"text":844,"type":332},"Add the coupon to the cart with a request like ",{"text":846,"type":332,"marks":847},"\u002Fcart?coupon=XXX",[848],{"type":379},{"text":850,"type":332},", where ",{"text":852,"type":332,"marks":853},"XXX",[854],{"type":379},{"text":856,"type":332}," is the coupon code.",{"type":327,"attrs":858,"content":859},{"textAlign":59},[860,862,866,868,872,874,878],{"text":861,"type":332},"To remove a coupon, use ",{"text":863,"type":332,"marks":864},"\u002Fcart?cart=remove_coupon&coupon_code_id=XXX&fcsid=XXX",[865],{"type":379},{"text":867,"type":332},". The ",{"text":869,"type":332,"marks":870},"coupon_code_id",[871],{"type":379},{"text":873,"type":332}," is available in the ",{"text":875,"type":332,"marks":876},"coupons",[877],{"type":379},{"text":879,"type":332}," node of the cart JSON for each applied coupon.",{"type":327,"attrs":881,"content":882},{"textAlign":59},[883],{"text":884,"type":332},"If your discount logic fits within Foxy’s existing functionality (quantity discounts, for example), it’s generally better to use Foxy’s built-in logic rather than generating a unique coupon code per transaction.",{"type":334,"attrs":886,"content":887},{"level":336,"textAlign":59},[888],{"text":889,"type":332},"Notes",{"type":346,"content":891},[892,899,911],{"type":349,"content":893},[894],{"type":327,"attrs":895,"content":896},{"textAlign":59},[897],{"text":898,"type":332},"This is an advanced integration path. Foxy’s support team can only offer full support for this approach to customers on API Premium or Single-Store Advanced plans.",{"type":349,"content":900},[901],{"type":327,"attrs":902,"content":903},{"textAlign":59},[904,906,910],{"text":905,"type":332},"For the request details behind server-side cart creation itself, see ",{"text":532,"type":332,"marks":907},[908],{"type":535,"attrs":909},{"href":537,"uuid":59,"anchor":59,"target":59,"linktype":31},{"text":729,"type":332},{"type":349,"content":912},[913],{"type":327,"attrs":914,"content":915},{"textAlign":59},[916,918,924],{"text":917,"type":332},"For a full list of cart parameters, see ",{"text":919,"type":332,"marks":920},"Cart parameters reference",[921],{"type":535,"attrs":922},{"href":923,"uuid":59,"anchor":59,"target":59,"linktype":31},"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fcart-parameters-reference",{"text":729,"type":332},{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":926},{},"How to hand off an existing cart to Foxy's checkout — creating carts server-side, authenticating customers with SSO, and setting taxes, shipping, and coupons without the standard clientside flow.",[929],"7872e868-fad7-4aab-98d2-fdced98cfce8",[],"integrate-your-own-cart-with-foxy","help\u002Farticles\u002Fintegrate-your-own-cart-with-foxy",-4720,[],2659,"4c96b6ed-fb0e-4d39-a707-a9c44c8fcbdb",[],{"html":939,"sections":940,"segments":968},"\u003Cp>This article covers how to integrate with Foxy when you already have your own cart functionality and want Foxy to take over starting at checkout — creating carts server-side, authenticating customers via SSO, and handling taxes, shipping, and coupons without relying on the standard clientside cart flow. This is an advanced integration path and assumes comfort with server-side scripting and the Foxy API.\u003C\u002Fp>\u003Csection id=\"why-youd-do-this\" data-title=\"Why you’d do this\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"why-youd-do-this\">Why you’d do this\u003C\u002Fh2>\u003Cp>A few common situations call for bypassing Foxy’s cart functionality:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>You already have a persistent cart in your own system, and want Foxy to take over just the checkout (commonly to offload PCI compliance).\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>You need custom validation or other application logic in front of the Foxy-powered cart that doesn’t exist in a standard integration.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Products are configured entirely at the time of purchase, and customers should never interact with the cart directly.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>If you only want to skip the visual cart step and send customers straight to checkout, you don’t need any of this — just use the \u003Ccode class=\"badge bg-soft-danger text-danger\">cart=checkout\u003C\u002Fcode> parameter on your add-to-cart links.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"the-cart-interaction-versus-underlying-data\" data-title=\"The cart: interaction versus underlying data\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"the-cart-interaction-versus-underlying-data\">The cart: interaction versus underlying data\u003C\u002Fh2>\u003Cp>“Cart” can mean two different things: the visual display a customer normally sees (names, images, prices, quantities), and the underlying data behind that display. You can bypass the first, but Foxy always requires the underlying cart data to exist for a transaction — this is what gets passed to the payment gateway and what taxes and other functionality are calculated from. You can’t tell Foxy to simply charge a customer $100; you have to supply what makes up that $100.\u003C\u002Fp>\u003Cp>You can self-host a custom cart, but you must still use Foxy’s hosted checkout (at \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode> on your Foxy domain) to shift the bulk of PCI compliance from you to Foxy.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"how-the-integration-differs-from-a-standard-flow\" data-title=\"How the integration differs from a standard flow\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"how-the-integration-differs-from-a-standard-flow\">How the integration differs from a standard flow\u003C\u002Fh2>\u003Cp>In a standard Foxy integration, add-to-cart buttons point directly to your store’s \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint, and the customer sees the Foxy-hosted cart, checkout, and receipt in sequence.\u003C\u002Fp>\u003Cp>In this integration, your own cart handles everything up until checkout:\u003C\u002Fp>\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>Add-to-cart buttons point to your own system, not to Foxy’s \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint.\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>Any cart display before checkout is handled entirely by your system.\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>When the customer is ready to pay, your system creates a cart in Foxy via the API (based on your own cart’s contents), then redirects the customer to \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode> with the appropriate session ID — optionally including an SSO token if the customer is already authenticated.\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>After checkout, the customer lands on the Foxy-hosted receipt, or is redirected to a URL of your choosing (optionally with an outgoing SSO token), and your system can sync the customer’s account.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fsection>\u003Csection id=\"creating-a-cart-server-side\" data-title=\"Creating a cart server-side\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"creating-a-cart-server-side\">Creating a cart server-side\u003C\u002Fh2>\u003Cp>Foxy provides two ways to create a cart from your server:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>The \u003C\u002Fstrong>\u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode>\u003Cstrong> endpoint\u003C\u002Fstrong> — the same endpoint clientside requests hit, using \u003Ccode class=\"badge bg-soft-danger text-danger\">output=json\u003C\u002Fcode>. No authentication is required by default (though you can lock it down with link\u002Fform signing), which makes it the easier option for most integrations.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>The Hypermedia API (hAPI)\u003C\u002Fstrong> — POST to the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcarts\u003C\u002Fcode> resource for more functionality and a consistent interface with the rest of your Foxy account. Retrieving and setting shipping rates isn’t currently supported through the hAPI, so you’ll need the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint approach for that regardless of which method you use elsewhere.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>See \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Finteract-with-the-cart-server-side\" class=\"\">Interact with the cart server-side\u003C\u002Fa> for the request details for both approaches.\u003C\u002Fp>\u003Cp>Whichever approach you use, note the \u003Ccode class=\"badge bg-soft-danger text-danger\">session_id\u003C\u002Fcode> (\u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode>) returned — you’ll need to pass it on subsequent requests to modify the same cart, and to send the customer to checkout.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"redirecting-the-customer-to-checkout\" data-title=\"Redirecting the customer to checkout\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"redirecting-the-customer-to-checkout\">Redirecting the customer to checkout\u003C\u002Fh2>\u003Cp>Once the cart exists, send the customer to:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>https:\u002F\u002FYOURDOMAIN.foxycart.com\u002Fcart?cart=checkout&amp;fcsid=YOUR_FCSID_VALUE_HERE\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"authenticating-the-customer-incoming-sso\" data-title=\"Authenticating the customer (incoming SSO)\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"authenticating-the-customer-incoming-sso\">Authenticating the customer (incoming SSO)\u003C\u002Fh3>\u003Cp>If your customer is already logged into your own system, use Foxy’s SSO functionality so they don’t have to log in again at checkout. If SSO is enabled on the store, a valid SSO auth token is required to load \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode>. Rather than redirecting through your SSO endpoint, a serverside integration can generate the token directly and send the customer straight to a URL like:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>\u002Fcheckout?fc_auth_token=AUTH_TOKEN&amp;fcsid=SESSION_ID&amp;fc_customer_id=CUSTOMER_ID&amp;timestamp=TIMESTAMP\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>The customer must already exist in Foxy before you can generate a token for them — create them via the hAPI either on demand right before redirecting, or ahead of time.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"handling-the-customer-after-the-transaction\" data-title=\"Handling the customer after the transaction\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"handling-the-customer-after-the-transaction\">Handling the customer after the transaction\u003C\u002Fh2>\u003Cp>By default, a completed checkout lands the customer on the Foxy-hosted \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Freceipt\u003C\u002Fcode> page and triggers a webhook. For a serverside integration, you may want more control:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>Empty the receipt template so it never displays, and always redirect elsewhere.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Keep the Foxy receipt for historical purposes (it’s linked from email receipts by default), but redirect immediately on first view.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Keep the receipt visible with an optional “click here to continue” link.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>To redirect on the initial view only, add logic to your template config using the \u003Ccode class=\"badge bg-soft-danger text-danger\">first_receipt_display\u003C\u002Fcode> boolean check.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"outgoing-sso-and-user-syncing\" data-title=\"Outgoing SSO and user syncing\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"outgoing-sso-and-user-syncing\">Outgoing SSO and user syncing\u003C\u002Fh3>\u003Cp>To log the customer into your own system automatically after their purchase — useful when customers are paying for access to content on your site — use outgoing (reverse) SSO. The approach mirrors incoming SSO. Foxy doesn’t support SAML by default, but it’s available for Enterprise customers, either implemented by Foxy or by using an intermediary script to bridge SAML to Foxy’s SSO approach.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"taxes-shipping-and-coupons\" data-title=\"Taxes, shipping, and coupons\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"taxes-shipping-and-coupons\">Taxes, shipping, and coupons\u003C\u002Fh2>\u003Cp>This section uses the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint rather than the hAPI, since shipping rate handling in particular isn’t currently supported there.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"taxes\" data-title=\"Taxes\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"taxes\">Taxes\u003C\u002Fh3>\u003Cp>To retrieve a tax estimate during your own checkout flow:\u003C\u002Fp>\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>Create the cart and session as described above.\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>Attach a postal code to the session with a request such as:\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>https:\u002F\u002FEXAMPLE.foxycart.com\u002Fv\u002F2.0.0\u002Fapi_json.php?city=San+Diego&amp;region=CA&amp;postal_code=92106&amp;country=US&amp;ThisAction=SaveCartContactInfo&amp;fcsid=XXX&amp;store_id=XXX\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>A \u003Ccode class=\"badge bg-soft-danger text-danger\">GetAddressByPostalCode\u003C\u002Fcode> action is also available to retrieve possible cities from an entered postal code, for basic address validation similar to the Foxy checkout.\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>Retrieve the tax information with a request to \u003Ccode class=\"badge bg-soft-danger text-danger\">https:\u002F\u002FEXAMPLE.foxycart.com\u002Fcart?fcsid=XXX&amp;output=json\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>Note that the tax value may change once shipping is set, so you may need to repeat the retrieval step after setting shipping details.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"shipping\" data-title=\"Shipping\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"shipping\">Shipping\u003C\u002Fh3>\u003Cp>Shipping is normally handled automatically on checkout, but you can set shipping details (method name and price) without customer input.\u003C\u002Fp>\u003Cp>\u003Cstrong>Step 1: add the rate to the session.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cdiv class=\"position-relative w-100 overflow-hidden rounded-2\" data-code-block>\u003Cdiv class=\"d-flex justify-content-end border-bottom\" style=\"background:#2b2c3b;\">\u003Cbutton type=\"button\" class=\"btn btn-link btn-sm text-light\" title=\"Copy\" data-code-button>\u003Cspan data-code-default style=\"\">\u003Ci class=\"fal fa-copy me-2\">\u003C\u002Fi> Copy \u003C\u002Fspan>\u003Cspan class=\"text-success\" data-code-success style=\"display:none;\">\u003Ci class=\"fal fa-check ms-2\">\u003C\u002Fi> Copied \u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"small\">\u003Cpre class=\"hljs p-2\" data-code-content>https:\u002F\u002FEXAMPLE.foxycart.com\u002Fv\u002F2.0.0\u002Fapi_json.php?shipping_address_name=YYY&amp;shipping_service_id=XXX&amp;shipping_service_description=UPS+Ground&amp;total_shipping=16.65&amp;total_future_shipping=0&amp;ThisAction=SaveShippingServiceInfo&amp;fcsid=XXX&amp;store_id=XXX\n\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>The \u003Ccode class=\"badge bg-soft-danger text-danger\">YYY\u003C\u002Fcode> value is only needed for multiship addresses and can be left empty otherwise.\u003C\u002Fp>\u003Cp>You can use Foxy’s built-in shipping rates — after retrieving a tax estimate, the cart’s JSON includes a \u003Ccode class=\"badge bg-soft-danger text-danger\">shipping_results\u003C\u002Fcode> node whose values you can submit back using the pattern above — or pass through arbitrary shipping amounts, in which case \u003Ccode class=\"badge bg-soft-danger text-danger\">shipping_service_id\u003C\u002Fcode> must be an integer greater than 10000.\u003C\u002Fp>\u003Cp>If you’re pushing the transaction through entirely via the hAPI, this step is sufficient. If the customer will complete the transaction on the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode> page themselves, continue to step 2.\u003C\u002Fp>\u003Cp>\u003Cstrong>Step 2: handle the shipping on checkout.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>Even though the rate is already set, you also need to configure the custom shipping endpoint functionality so the checkout displays the same rate. If your endpoint returns the same details you set in step 1, the checkout loads with that rate already selected.\u003C\u002Fp>\u003Cp>If the customer is authenticated via SSO, the rate may not be pre-selected — contact Foxy support to discuss options for these cases.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"coupons\" data-title=\"Coupons\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"coupons\">Coupons\u003C\u002Fh3>\u003Cp>Foxy doesn’t support passing through arbitrary discount amounts the way it does shipping, so applying your own discount logic takes a few more steps:\u003C\u002Fp>\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>Calculate the discount amount in your own system.\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>Create a coupon code for that amount via the hAPI, with the appropriate display name and other details.\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>Add the coupon to the cart with a request like \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart?coupon=XXX\u003C\u002Fcode>, where \u003Ccode class=\"badge bg-soft-danger text-danger\">XXX\u003C\u002Fcode> is the coupon code.\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>To remove a coupon, use \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart?cart=remove_coupon&amp;coupon_code_id=XXX&amp;fcsid=XXX\u003C\u002Fcode>. The \u003Ccode class=\"badge bg-soft-danger text-danger\">coupon_code_id\u003C\u002Fcode> is available in the \u003Ccode class=\"badge bg-soft-danger text-danger\">coupons\u003C\u002Fcode> node of the cart JSON for each applied coupon.\u003C\u002Fp>\u003Cp>If your discount logic fits within Foxy’s existing functionality (quantity discounts, for example), it’s generally better to use Foxy’s built-in logic rather than generating a unique coupon code per transaction.\u003C\u002Fp>\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>This is an advanced integration path. Foxy’s support team can only offer full support for this approach to customers on API Premium or Single-Store Advanced plans.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For the request details behind server-side cart creation itself, see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Finteract-with-the-cart-server-side\" class=\"\">Interact with the cart server-side\u003C\u002Fa>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For a full list of cart parameters, see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fcart-parameters-reference\" class=\"\">Cart parameters reference\u003C\u002Fa>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fsection>",[941,944,946,948,950,952,955,957,959,961,963,965,966],{"id":942,"title":339,"level":943},"why-youd-do-this","H2",{"id":945,"title":386,"level":943},"the-cart-interaction-versus-underlying-data",{"id":947,"title":407,"level":943},"how-the-integration-differs-from-a-standard-flow",{"id":949,"title":471,"level":943},"creating-a-cart-server-side",{"id":951,"title":561,"level":943},"redirecting-the-customer-to-checkout",{"id":953,"title":578,"level":954},"authenticating-the-customer-incoming-sso","H3",{"id":956,"title":603,"level":943},"handling-the-customer-after-the-transaction",{"id":958,"title":653,"level":954},"outgoing-sso-and-user-syncing",{"id":960,"title":663,"level":943},"taxes-shipping-and-coupons",{"id":962,"title":678,"level":954},"taxes",{"id":964,"title":739,"level":954},"shipping",{"id":875,"title":815,"level":954},{"id":967,"title":889,"level":943},"notes",[969],{"type":970,"content":971},"html","\u003Cp>This article covers how to integrate with Foxy when you already have your own cart functionality and want Foxy to take over starting at checkout — creating carts server-side, authenticating customers via SSO, and handling taxes, shipping, and coupons without relying on the standard clientside cart flow. This is an advanced integration path and assumes comfort with server-side scripting and the Foxy API.\u003C\u002Fp>\u003Ch2>Why you’d do this\u003C\u002Fh2>\u003Cp>A few common situations call for bypassing Foxy’s cart functionality:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>You already have a persistent cart in your own system, and want Foxy to take over just the checkout (commonly to offload PCI compliance).\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>You need custom validation or other application logic in front of the Foxy-powered cart that doesn’t exist in a standard integration.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Products are configured entirely at the time of purchase, and customers should never interact with the cart directly.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>If you only want to skip the visual cart step and send customers straight to checkout, you don’t need any of this — just use the \u003Ccode class=\"badge bg-soft-danger text-danger\">cart=checkout\u003C\u002Fcode> parameter on your add-to-cart links.\u003C\u002Fp>\u003Ch2>The cart: interaction versus underlying data\u003C\u002Fh2>\u003Cp>“Cart” can mean two different things: the visual display a customer normally sees (names, images, prices, quantities), and the underlying data behind that display. You can bypass the first, but Foxy always requires the underlying cart data to exist for a transaction — this is what gets passed to the payment gateway and what taxes and other functionality are calculated from. You can’t tell Foxy to simply charge a customer $100; you have to supply what makes up that $100.\u003C\u002Fp>\u003Cp>You can self-host a custom cart, but you must still use Foxy’s hosted checkout (at \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode> on your Foxy domain) to shift the bulk of PCI compliance from you to Foxy.\u003C\u002Fp>\u003Ch2>How the integration differs from a standard flow\u003C\u002Fh2>\u003Cp>In a standard Foxy integration, add-to-cart buttons point directly to your store’s \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint, and the customer sees the Foxy-hosted cart, checkout, and receipt in sequence.\u003C\u002Fp>\u003Cp>In this integration, your own cart handles everything up until checkout:\u003C\u002Fp>\u003Col order=\"1\">\u003Cli>\u003Cp>Add-to-cart buttons point to your own system, not to Foxy’s \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Any cart display before checkout is handled entirely by your system.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>When the customer is ready to pay, your system creates a cart in Foxy via the API (based on your own cart’s contents), then redirects the customer to \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode> with the appropriate session ID — optionally including an SSO token if the customer is already authenticated.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>After checkout, the customer lands on the Foxy-hosted receipt, or is redirected to a URL of your choosing (optionally with an outgoing SSO token), and your system can sync the customer’s account.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Ch2>Creating a cart server-side\u003C\u002Fh2>\u003Cp>Foxy provides two ways to create a cart from your server:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>The \u003C\u002Fstrong>\u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode>\u003Cstrong> endpoint\u003C\u002Fstrong> — the same endpoint clientside requests hit, using \u003Ccode class=\"badge bg-soft-danger text-danger\">output=json\u003C\u002Fcode>. No authentication is required by default (though you can lock it down with link\u002Fform signing), which makes it the easier option for most integrations.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>The Hypermedia API (hAPI)\u003C\u002Fstrong> — POST to the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcarts\u003C\u002Fcode> resource for more functionality and a consistent interface with the rest of your Foxy account. Retrieving and setting shipping rates isn’t currently supported through the hAPI, so you’ll need the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint approach for that regardless of which method you use elsewhere.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>See \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Finteract-with-the-cart-server-side\" class=\"\">Interact with the cart server-side\u003C\u002Fa> for the request details for both approaches.\u003C\u002Fp>\u003Cp>Whichever approach you use, note the \u003Ccode class=\"badge bg-soft-danger text-danger\">session_id\u003C\u002Fcode> (\u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode>) returned — you’ll need to pass it on subsequent requests to modify the same cart, and to send the customer to checkout.\u003C\u002Fp>\u003Ch2>Redirecting the customer to checkout\u003C\u002Fh2>\u003Cp>Once the cart exists, send the customer to:\u003C\u002Fp>\u003Cpre>\u003Ccode>https:\u002F\u002FYOURDOMAIN.foxycart.com\u002Fcart?cart=checkout&amp;fcsid=YOUR_FCSID_VALUE_HERE\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>Authenticating the customer (incoming SSO)\u003C\u002Fh3>\u003Cp>If your customer is already logged into your own system, use Foxy’s SSO functionality so they don’t have to log in again at checkout. If SSO is enabled on the store, a valid SSO auth token is required to load \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode>. Rather than redirecting through your SSO endpoint, a serverside integration can generate the token directly and send the customer straight to a URL like:\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002Fcheckout?fc_auth_token=AUTH_TOKEN&amp;fcsid=SESSION_ID&amp;fc_customer_id=CUSTOMER_ID&amp;timestamp=TIMESTAMP\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The customer must already exist in Foxy before you can generate a token for them — create them via the hAPI either on demand right before redirecting, or ahead of time.\u003C\u002Fp>\u003Ch2>Handling the customer after the transaction\u003C\u002Fh2>\u003Cp>By default, a completed checkout lands the customer on the Foxy-hosted \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Freceipt\u003C\u002Fcode> page and triggers a webhook. For a serverside integration, you may want more control:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>Empty the receipt template so it never displays, and always redirect elsewhere.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Keep the Foxy receipt for historical purposes (it’s linked from email receipts by default), but redirect immediately on first view.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Keep the receipt visible with an optional “click here to continue” link.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>To redirect on the initial view only, add logic to your template config using the \u003Ccode class=\"badge bg-soft-danger text-danger\">first_receipt_display\u003C\u002Fcode> boolean check.\u003C\u002Fp>\u003Ch3>Outgoing SSO and user syncing\u003C\u002Fh3>\u003Cp>To log the customer into your own system automatically after their purchase — useful when customers are paying for access to content on your site — use outgoing (reverse) SSO. The approach mirrors incoming SSO. Foxy doesn’t support SAML by default, but it’s available for Enterprise customers, either implemented by Foxy or by using an intermediary script to bridge SAML to Foxy’s SSO approach.\u003C\u002Fp>\u003Ch2>Taxes, shipping, and coupons\u003C\u002Fh2>\u003Cp>This section uses the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint rather than the hAPI, since shipping rate handling in particular isn’t currently supported there.\u003C\u002Fp>\u003Ch3>Taxes\u003C\u002Fh3>\u003Cp>To retrieve a tax estimate during your own checkout flow:\u003C\u002Fp>\u003Col order=\"1\">\u003Cli>\u003Cp>Create the cart and session as described above.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Attach a postal code to the session with a request such as:\u003C\u002Fp>\u003Cpre>\u003Ccode>https:\u002F\u002FEXAMPLE.foxycart.com\u002Fv\u002F2.0.0\u002Fapi_json.php?city=San+Diego&amp;region=CA&amp;postal_code=92106&amp;country=US&amp;ThisAction=SaveCartContactInfo&amp;fcsid=XXX&amp;store_id=XXX\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>A \u003Ccode class=\"badge bg-soft-danger text-danger\">GetAddressByPostalCode\u003C\u002Fcode> action is also available to retrieve possible cities from an entered postal code, for basic address validation similar to the Foxy checkout.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Retrieve the tax information with a request to \u003Ccode class=\"badge bg-soft-danger text-danger\">https:\u002F\u002FEXAMPLE.foxycart.com\u002Fcart?fcsid=XXX&amp;output=json\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>Note that the tax value may change once shipping is set, so you may need to repeat the retrieval step after setting shipping details.\u003C\u002Fp>\u003Ch3>Shipping\u003C\u002Fh3>\u003Cp>Shipping is normally handled automatically on checkout, but you can set shipping details (method name and price) without customer input.\u003C\u002Fp>\u003Cp>\u003Cstrong>Step 1: add the rate to the session.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode>https:\u002F\u002FEXAMPLE.foxycart.com\u002Fv\u002F2.0.0\u002Fapi_json.php?shipping_address_name=YYY&amp;shipping_service_id=XXX&amp;shipping_service_description=UPS+Ground&amp;total_shipping=16.65&amp;total_future_shipping=0&amp;ThisAction=SaveShippingServiceInfo&amp;fcsid=XXX&amp;store_id=XXX\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The \u003Ccode class=\"badge bg-soft-danger text-danger\">YYY\u003C\u002Fcode> value is only needed for multiship addresses and can be left empty otherwise.\u003C\u002Fp>\u003Cp>You can use Foxy’s built-in shipping rates — after retrieving a tax estimate, the cart’s JSON includes a \u003Ccode class=\"badge bg-soft-danger text-danger\">shipping_results\u003C\u002Fcode> node whose values you can submit back using the pattern above — or pass through arbitrary shipping amounts, in which case \u003Ccode class=\"badge bg-soft-danger text-danger\">shipping_service_id\u003C\u002Fcode> must be an integer greater than 10000.\u003C\u002Fp>\u003Cp>If you’re pushing the transaction through entirely via the hAPI, this step is sufficient. If the customer will complete the transaction on the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcheckout\u003C\u002Fcode> page themselves, continue to step 2.\u003C\u002Fp>\u003Cp>\u003Cstrong>Step 2: handle the shipping on checkout.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>Even though the rate is already set, you also need to configure the custom shipping endpoint functionality so the checkout displays the same rate. If your endpoint returns the same details you set in step 1, the checkout loads with that rate already selected.\u003C\u002Fp>\u003Cp>If the customer is authenticated via SSO, the rate may not be pre-selected — contact Foxy support to discuss options for these cases.\u003C\u002Fp>\u003Ch3>Coupons\u003C\u002Fh3>\u003Cp>Foxy doesn’t support passing through arbitrary discount amounts the way it does shipping, so applying your own discount logic takes a few more steps:\u003C\u002Fp>\u003Col order=\"1\">\u003Cli>\u003Cp>Calculate the discount amount in your own system.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Create a coupon code for that amount via the hAPI, with the appropriate display name and other details.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Add the coupon to the cart with a request like \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart?coupon=XXX\u003C\u002Fcode>, where \u003Ccode class=\"badge bg-soft-danger text-danger\">XXX\u003C\u002Fcode> is the coupon code.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>To remove a coupon, use \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart?cart=remove_coupon&amp;coupon_code_id=XXX&amp;fcsid=XXX\u003C\u002Fcode>. The \u003Ccode class=\"badge bg-soft-danger text-danger\">coupon_code_id\u003C\u002Fcode> is available in the \u003Ccode class=\"badge bg-soft-danger text-danger\">coupons\u003C\u002Fcode> node of the cart JSON for each applied coupon.\u003C\u002Fp>\u003Cp>If your discount logic fits within Foxy’s existing functionality (quantity discounts, for example), it’s generally better to use Foxy’s built-in logic rather than generating a unique coupon code per transaction.\u003C\u002Fp>\u003Ch2>Notes\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>This is an advanced integration path. Foxy’s support team can only offer full support for this approach to customers on API Premium or Single-Store Advanced plans.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For the request details behind server-side cart creation itself, see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Finteract-with-the-cart-server-side\" class=\"\">Interact with the cart server-side\u003C\u002Fa>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>For a full list of cart parameters, see \u003Ca href=\"https:\u002F\u002Ffoxy.io\u002Fhelp\u002Farticles\u002Fcart-parameters-reference\" class=\"\">Cart parameters reference\u003C\u002Fa>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>",{"name":973,"created_at":974,"published_at":975,"updated_at":976,"id":977,"uuid":47,"content":978,"slug":48,"full_slug":48,"sort_by_date":59,"position":1156,"tag_list":1157,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":1158,"first_published_at":1159,"release_id":59,"lang":65,"path":59,"alternates":1160,"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":979,"_uid":982,"title":983,"action":984,"fields":985,"method":1132,"columns":1133,"subtitle":1147,"component":48,"button_text":1153,"submit_title":1154,"submit_subtitle":1155},{"_uid":980,"title":973,"plugin":981,"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",[986,991,995,1103,1106,1111,1126],{"_uid":987,"name":988,"type":332,"label":989,"options":13,"required":33,"component":990,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":992,"name":993,"type":993,"label":994,"options":13,"required":33,"component":990,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","email","Email Address",{"_uid":996,"name":997,"type":998,"label":999,"options":1000,"required":33,"component":990,"conditions":1001,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[1002,1057,1067,1074,1082,1090,1096],{"_uid":1003,"equals":1004,"fields":1005,"component":1056},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[1006],{"_uid":1007,"body":1008,"type":1054,"title":13,"component":1055},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":324,"content":1009},[1010],{"type":327,"content":1011},[1012,1014,1021,1023,1025,1026,1030,1032,1037,1045,1047,1052],{"text":1013,"type":332},"We are ",{"text":1015,"type":332,"marks":1016},"Foxy.io",[1017],{"type":535,"attrs":1018},{"href":1019,"uuid":59,"anchor":59,"custom":1020,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":1022,"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":1024},"hard_break",{"type":1024},{"text":1027,"type":332,"marks":1028},"NOTE:",[1029],{"type":488},{"text":1031,"type":332}," We are ",{"text":1033,"type":332,"marks":1034},"not ",[1035],{"type":1036},"italic",{"text":1038,"type":332,"marks":1039},"Foxy.in",[1040,1044],{"type":535,"attrs":1041},{"href":1042,"uuid":59,"anchor":59,"custom":1043,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":1036},{"text":1046,"type":332},". We are not in any way affiliated with ",{"text":1038,"type":332,"marks":1048},[1049],{"type":535,"attrs":1050},{"href":1042,"uuid":59,"anchor":59,"custom":1051,"target":59,"linktype":31},{},{"text":1053,"type":332},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":1058,"equals":1059,"fields":1060,"component":1056},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[1061],{"_uid":1062,"name":1063,"type":1064,"label":13,"options":13,"required":24,"component":990,"conditions":1065,"placeholder":13,"default_value":1066},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":1068,"equals":208,"fields":1069,"component":1056},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[1070],{"_uid":1071,"name":1063,"type":1064,"label":13,"options":13,"required":24,"component":990,"conditions":1072,"placeholder":13,"default_value":1073},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":1075,"equals":1076,"fields":1077,"component":1056},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[1078],{"_uid":1079,"name":1063,"type":1064,"label":13,"options":13,"required":24,"component":990,"conditions":1080,"placeholder":13,"default_value":1081},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":1083,"equals":1084,"fields":1085,"component":1056},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[1086],{"_uid":1087,"name":1063,"type":1064,"label":13,"options":13,"required":24,"component":990,"conditions":1088,"placeholder":13,"default_value":1089},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":1091,"equals":1004,"fields":1092,"component":1056},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[1093],{"_uid":1094,"name":1063,"type":1064,"label":13,"options":13,"required":24,"component":990,"conditions":1095,"placeholder":13,"default_value":1066},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":1097,"equals":1098,"fields":1099,"component":1056},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[1100],{"_uid":1101,"name":1063,"type":1064,"label":13,"options":13,"required":24,"component":990,"conditions":1102,"placeholder":13,"default_value":1066},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":1104,"component":1105},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":1107,"name":1108,"type":1109,"label":1110,"options":13,"required":33,"component":990,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":1112,"name":1113,"type":998,"label":1114,"options":1115,"required":33,"component":990,"conditions":1116,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[1117],{"_uid":1118,"equals":1119,"fields":1120,"component":1056},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[1121],{"_uid":1122,"name":1123,"type":332,"label":1124,"options":13,"required":33,"component":990,"conditions":1125,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":1127,"name":1128,"type":998,"label":1129,"options":1130,"required":33,"component":990,"conditions":1131,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[1134],{"_uid":1135,"text":1136,"title":1145,"component":1146},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":324,"content":1137},[1138],{"type":327,"content":1139},[1140,1142,1143],{"text":1141,"type":332},"855.369.9227",{"type":1024},{"text":1144,"type":332},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":324,"content":1148},[1149],{"type":327,"content":1150},[1151],{"text":1152,"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,1162,1188],{"name":1163,"created_at":1164,"published_at":1165,"updated_at":1166,"id":1167,"uuid":1168,"content":1169,"slug":1182,"full_slug":1183,"sort_by_date":59,"position":1184,"tag_list":1185,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":1186,"first_published_at":1165,"release_id":59,"lang":65,"path":59,"alternates":1187,"default_full_slug":59,"translated_slugs":59},"Cart","2026-06-30T21:44:38.509Z","2026-06-30T21:52:06.971Z","2026-06-30T21:52:06.998Z",193193076819032,"d9dfda0a-e048-42b5-aafd-62e2b42fd938",{"_uid":1170,"icon":13,"name":1163,"type":1171,"pinned":24,"summary":1172,"category":13,"component":297,"blog_posts":1173,"icon_custom":1174,"case_studies":1176,"faq_sections":1177,"featured_guides":1178,"mailbox_category":13,"featured_articles":1179,"featured_blog_posts":1180,"featured_case_studies":1181},"8a24659e-940a-4097-878e-0310179ef9aa","simple","How the cart works, configuration options, customizations, and advanced integrations.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1175},{},[],[],[],[],[],[],"cart","help\u002Fcategories\u002Fcart",-430,[],"3a76f1bc-b39c-488b-b092-663996df4ce1",[],{"name":1189,"created_at":1190,"published_at":1191,"updated_at":1192,"id":1193,"uuid":929,"content":1194,"slug":1206,"full_slug":1207,"sort_by_date":59,"position":1208,"tag_list":1209,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":1210,"first_published_at":1191,"release_id":59,"lang":65,"path":59,"alternates":1211,"default_full_slug":59,"translated_slugs":59},"Advanced Cart Implementations","2026-06-30T21:49:36.416Z","2026-06-30T21:52:06.007Z","2026-06-30T21:52:06.028Z",193194297050205,{"_uid":1195,"icon":13,"name":1189,"type":1171,"pinned":24,"summary":1196,"category":1168,"component":297,"blog_posts":1197,"icon_custom":1198,"case_studies":1200,"faq_sections":1201,"featured_guides":1202,"mailbox_category":13,"featured_articles":1203,"featured_blog_posts":1204,"featured_case_studies":1205},"63fdd955-f933-44e1-b35b-36a734a4ac33","Technical approaches for interacting with the cart via JSON, server-side requests, and session variables.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1199},{},[],[],[],[],[],[],"advanced-cart-implementations","help\u002Fcategories\u002Fadvanced-cart-implementations",-470,[],"1548bed5-0a63-482b-baa5-4c6f6c642337",[],{},1785187029815]