This tutorial shows you how to build an ecommerce app using Lovable, Supabase, and Rye. You can see a live version of it here and view the source code here.Lovable is an AI-powered app builder that can generate applications from natural language prompts. Supabase is a backend-as-a-service platform, including serverless functions to enable calling third-party APIs. Rye is an ecommerce API that lets you surface products from multiple merchants in your app and place orders programmatically.By the end of this tutorial, you will have a Lovable app connected to Supabase and Rye, capable of letting users browse products and place orders. From there, you can customize it, including the look and feel, and extend the app’s functionality to build any type of ecommerce experience.
This app is for demo purposes only. Before using any code generated from this repo in production, thoroughly review and test it for security and proper functionality.
Log in to Supabase and navigate to the new function created within your Supabase project from step 1. Find the environmental variable with the value AddAPIKeyHere and replace it with your Rye API key from the staging environment.
After running the prompts in step 3, Lovable will display a preview of your app. Test your app in that section.Run Lovable’s built-in security test and address any issues it identifies. Lovable generates code with AI, so it is important to verify that all security measures, such as input validation, authentication, and access controls are correctly implemented before deploying the app.
Now you can customize your app, including the UI and functionality, to build any type of ecommerce experience.Using Lovable prompts, you can add features like an admin dashboard to manage products. For a more AI-focused experience, you could integrate a chatbot to answer common questions or guide users through checkout.Remember, this app is for demo purposes, so review and test it thoroughly before deploying to production.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rye","colors":{"primary":"#8FA957","light":"#71F47B","dark":"#4ED558"},"logo":{"light":"https://mintcdn.com/rye-35/HxmlWhy6JbETnsaq/logo/light.png?fit=max\u0026auto=format\u0026n=HxmlWhy6JbETnsaq\u0026q=85\u0026s=182633959f1a288230f647271c1c7476","dark":"https://mintcdn.com/rye-35/HxmlWhy6JbETnsaq/logo/dark.png?fit=max\u0026auto=format\u0026n=HxmlWhy6JbETnsaq\u0026q=85\u0026s=7fac74ff711d8f0881f72abac10a06d3"},"favicon":"https://mintcdn.com/rye-35/xUdlCl6dEnnyYEIw/favicon.svg?fit=max\u0026auto=format\u0026n=xUdlCl6dEnnyYEIw\u0026q=85\u0026s=c870aa7f86a3c0c182086626c79a2713","appearance":{"default":"light"},"navbar":{"primary":{"type":"button","label":"Get Started","href":"https://console.rye.com/login"}},"footer":{"socials":{"twitter":"https://twitter.com/rye","linkedin":"https://www.linkedin.com/company/rye"}},"seo":{"metatags":{"canonical":"https://rye.com/docs"}},"integrations":{"koala":{"publicApiKey":"pk_95052208d158276836ec341f6a0080042796"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rye-35","hasAudioNarration":false,"actualSubdomain":"rye-35","customDomains":["docs-test.rye.com"],"gitSource":{"type":"github","owner":"rye-com","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a8ce6f9a36c60d45730fb3b","collectionId":"351129e7-0187-489e-a688-bd36bb42791a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a8ce6f9a36c60d45730fb3b"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a8ce6f9a36c60d45730fb3b","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"Universal Checkout API Documentation","count":74},{"language":"default","tag":"API Reference","count":40},{"language":"default","tag":"Universal Checkout API","count":23},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"Checkout Intents","count":7},{"language":"default","tag":"Rewards SDK","count":6},{"language":"default","tag":"Billing","count":6},{"language":"default","tag":"Test Helpers","count":6},{"language":"default","tag":"API Access \u0026 Environments","count":4},{"language":"default","tag":"Quickstart","count":4}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@rye.com","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-v2/lovable-rye-tutorial","slug":"/api-v2/lovable-rye-tutorial","pageMetadata":{"title":"Build an Ecommerce App with Lovable","sidebarTitle":"Lovable","description":"Build a full ecommerce app using Lovable and Rye's Universal Checkout API with Supabase Edge Functions.","href":"/api-v2/lovable-rye-tutorial"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Build a full ecommerce app using Lovable and Rye’s Universal Checkout API with Supabase Edge Functions.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const OpenWithLLM=({prompt,tools})=>{const handleClick=(tool,e)=>{const btn=e.currentTarget;const labelSpan=btn.querySelector(`[data-label]`);const copiedLabel=btn.getAttribute(`data-copied`);if(tool===`claude`){window.open(`https://claude.ai/new?q=${encodeURIComponent(prompt)}`,`_blank`);return}if(tool===`lovable`){window.open(`https://lovable.dev/?autosubmit=true#prompt=${encodeURIComponent(prompt)}`,`_blank`);return}navigator.clipboard.writeText(prompt);if(labelSpan\u0026\u0026copiedLabel){const original=labelSpan.textContent;labelSpan.textContent=copiedLabel;setTimeout(()=>{labelSpan.textContent=original},2500)}if(tool===`chatgpt`){window.open(`https://chatgpt.com/`,`_blank`)}};const show=tool=>!tools||tools.includes(tool);const buttonBase=`inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 border cursor-pointer`;return _jsxs(`div`,{className:`mint-my-6 mint-rounded-xl mint-border mint-border-gray-200 dark:mint-border-gray-700 mint-bg-gray-50 dark:mint-bg-gray-800/50 mint-p-5`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2 mint-mb-3`,children:[_jsxs(`svg`,{width:`18`,height:`18`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,className:`mint-text-gray-500 dark:mint-text-gray-400`,children:[_jsx(`path`,{d:`M12 2L2 7l10 5 10-5-10-5z`}),_jsx(`path`,{d:`M2 17l10 5 10-5`}),_jsx(`path`,{d:`M2 12l10 5 10-5`})]}),_jsx(`span`,{className:`mint-text-sm mint-font-semibold mint-text-gray-700 dark:mint-text-gray-200`,children:`Build this with AI`})]}),_jsx(`p`,{className:`mint-text-xs mint-text-gray-500 dark:mint-text-gray-400 mint-mb-4`,children:`Open a pre-built prompt in your preferred AI tool to generate a complete working integration.`}),_jsxs(`div`,{className:`mint-flex mint-flex-wrap mint-gap-2`,children:[show(`claude`)\u0026\u0026_jsxs(`button`,{onClick:e=>handleClick(`claude`,e),\"data-copied\":`Opening...`,className:`${`mint-inline-flex mint-items-center mint-gap-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-text-sm mint-font-medium mint-transition-all mint-duration-200 mint-border mint-cursor-pointer`}`,children:[_jsx(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`,children:_jsx(`path`,{d:`M4.709 15.955l4.72-2.756.08-.046 2.698-1.575c.092-.054.153-.063.2-.063.046 0 .107.01.199.063l2.698 1.575 4.8 2.802c.026.014.04.022.064.037l-7.552 4.41a.46.46 0 01-.232.063.46.46 0 01-.232-.063L4.709 15.955zm7.897-12.42l7.585 4.428a.471.471 0 01.233.408v8.747c0 .03-.003.057-.01.094l-4.812-2.81-2.698-1.574a.384.384 0 01-.199-.327V3.535zm-1.212 0v8.966a.384.384 0 01-.2.327L8.498 14.4l-4.812 2.81a.519.519 0 01-.01-.095V8.37c0-.17.09-.326.233-.408l7.485-4.428z`})}),_jsx(`span`,{\"data-label\":true,children:`Open in Claude`})]}),show(`lovable`)\u0026\u0026_jsxs(`button`,{onClick:e=>handleClick(`lovable`,e),\"data-copied\":`Opening...`,className:`${`mint-inline-flex mint-items-center mint-gap-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-text-sm mint-font-medium mint-transition-all mint-duration-200 mint-border mint-cursor-pointer`}`,children:[_jsx(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`,children:_jsx(`path`,{d:`M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z`})}),_jsx(`span`,{\"data-label\":true,children:`Open in Lovable`})]}),show(`chatgpt`)\u0026\u0026_jsxs(`button`,{onClick:e=>handleClick(`chatgpt`,e),\"data-copied\":`Copied! Paste in ChatGPT`,className:`${`mint-inline-flex mint-items-center mint-gap-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-text-sm mint-font-medium mint-transition-all mint-duration-200 mint-border mint-cursor-pointer`}`,children:[_jsx(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`,children:_jsx(`path`,{d:`M22.282 9.821a5.985 5.985 0 00-.516-4.91 6.046 6.046 0 00-6.51-2.9A6.065 6.065 0 0011.708.414a6.116 6.116 0 00-5.89 4.412 6.005 6.005 0 00-4.014 2.91 6.048 6.048 0 00.749 7.084 5.98 5.98 0 00.516 4.911 6.051 6.051 0 006.511 2.9 6.056 6.056 0 004.548 1.956 6.116 6.116 0 005.889-4.411 6.006 6.006 0 004.014-2.912 6.043 6.043 0 00-.749-7.084zM13.109 21.95a4.582 4.582 0 01-2.94-1.063c.037-.02.102-.056.144-.081l4.884-2.822a.794.794 0 00.4-.688v-6.892l2.064 1.192a.073.073 0 01.04.056v5.707a4.601 4.601 0 01-4.592 4.592zM3.6 17.938a4.556 4.556 0 01-.546-3.072c.036.021.099.06.144.084l4.884 2.822a.796.796 0 00.79 0l5.964-3.444v2.384a.074.074 0 01-.03.063L9.88 19.615a4.6 4.6 0 01-6.28-1.677zM2.338 7.875a4.56 4.56 0 012.394-2.007c0 .042-.003.114-.003.164v5.645a.788.788 0 00.4.688l5.964 3.443-2.064 1.192a.075.075 0 01-.071.006L4.032 14.16a4.6 4.6 0 01-1.694-6.284zM18.93 11.99l-5.965-3.443 2.065-1.192a.074.074 0 01.07-.006l4.927 2.844a4.588 4.588 0 01-.71 8.282v-5.797a.793.793 0 00-.387-.688zm2.056-3.08c-.037-.022-.1-.06-.144-.084L15.96 6.004a.795.795 0 00-.79 0L9.205 9.448V7.064a.073.073 0 01.03-.063l4.925-2.843a4.591 4.591 0 016.826 4.752zM8.114 12.544L6.05 11.352a.073.073 0 01-.04-.057V5.59a4.59 4.59 0 017.533-3.523c-.037.02-.102.055-.144.08L8.514 4.97a.794.794 0 00-.4.688v6.886zm1.12-2.418l2.657-1.534 2.656 1.534v3.068l-2.656 1.534-2.657-1.534V10.126z`})}),_jsx(`span`,{\"data-label\":true,children:`Open in ChatGPT`})]}),show(`cursor`)\u0026\u0026_jsxs(`button`,{onClick:e=>handleClick(`cursor`,e),\"data-copied\":`Copied! Paste in Composer`,className:`${`mint-inline-flex mint-items-center mint-gap-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-text-sm mint-font-medium mint-transition-all mint-duration-200 mint-border mint-cursor-pointer`}`,children:[_jsx(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`,children:_jsx(`path`,{d:`M3.147 2.245a.6.6 0 01.652-.054l17.4 9.6a.6.6 0 01.014 1.046l-6.9 4.027-4.182 5.178a.6.6 0 01-1.075-.232L3.013 2.858a.6.6 0 01.134-.613zM10.17 15.2l3.563-2.08L5.34 4.44l4.83 10.76zm.894 1.09l-1.1 1.362 1.357 4.58 2.83-3.504-3.087-2.438z`})}),_jsx(`span`,{\"data-label\":true,children:`Copy for Cursor`})]}),show(`vscode`)\u0026\u0026_jsxs(`button`,{onClick:e=>handleClick(`vscode`,e),\"data-copied\":`Copied! Paste in Copilot Chat`,className:`${`mint-inline-flex mint-items-center mint-gap-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-text-sm mint-font-medium mint-transition-all mint-duration-200 mint-border mint-cursor-pointer`}`,children:[_jsx(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`currentColor`,children:_jsx(`path`,{d:`M17.583 2.603l-5.402 4.914L6.968 3.26 4.2 4.86v14.28l2.768 1.6 5.213-4.257 5.402 4.914L21.6 19.2V4.8l-4.017-2.197zM17.4 17.063l-4.392-3.994 4.392-3.994v7.988zM6.6 15.674V8.326l3.695 3.674L6.6 15.674z`})}),_jsx(`span`,{\"data-label\":true,children:`Copy for Copilot`})]}),show(`claude-code`)\u0026\u0026_jsxs(`button`,{onClick:e=>handleClick(`claude-code`,e),\"data-copied\":`Copied! Paste in Claude Code`,className:`${`mint-inline-flex mint-items-center mint-gap-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-text-sm mint-font-medium mint-transition-all mint-duration-200 mint-border mint-cursor-pointer`}`,children:[_jsxs(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`polyline`,{points:`4 17 10 11 4 5`}),_jsx(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})]}),_jsx(`span`,{\"data-label\":true,children:`Copy for Claude Code`})]})]})]})};const llmPrompt=`Build a complete ecommerce application using Rye's Universal Checkout API with Supabase Edge Functions as the backend. Use the official Rye TypeScript SDK (checkout-intents) for all Rye API calls. The app should let users browse products and place orders through any merchant (Amazon, Shopify, etc.).\n\n## What Rye Does\nRye is a commerce API that lets you sell products from any merchant (Amazon, Shopify, etc.) in your app. You provide a product URL and buyer details, Rye fetches pricing/shipping from the merchant, and you confirm with a payment token to place the order.\n\n## Architecture\nIMPORTANT: All Rye SDK calls MUST happen server-side. Never import or use the checkout-intents SDK in frontend code — the API key must stay on the server.\n- Frontend: React app (Vite or Next.js) with TypeScript and Tailwind CSS. Calls Supabase Edge Functions via fetch — never calls Rye directly.\n- Backend: Supabase Edge Functions (Deno) that use the checkout-intents SDK to call the Rye API. The CHECKOUT_INTENTS_API_KEY stays server-side as a Supabase secret.\n\n## Rye SDK Setup\nIn Supabase Edge Functions (Deno), import the SDK via npm: specifier:\nimport CheckoutIntents from 'npm:checkout-intents';\n\nFor Node.js projects: npm install checkout-intents\nimport CheckoutIntents from 'checkout-intents';\n\nEnvironment variable: CHECKOUT_INTENTS_API_KEY (the SDK reads this by default)\nFor staging, also set: CHECKOUT_INTENTS_BASE_URL=https://staging.api.rye.com\n\nInitialize:\nconst client = new CheckoutIntents(); // reads CHECKOUT_INTENTS_API_KEY from env\n\n## Rye SDK Usage\n\n### Create checkout intent and poll until offer is ready\nconst intent = await client.checkoutIntents.createAndPoll({\n buyer: { firstName, lastName, email, phone, address1, city, province, postalCode, country: 'US' },\n productUrl: 'https://flybyjing.com/collections/shop/products/sichuan-chili-crisp',\n quantity: 1,\n});\n// intent.state === 'awaiting_confirmation'\n// intent.offer.cost: { subtotal, tax, total } (each with amountSubunits, currencyCode)\n// intent.offer.shipping: { availableOptions, selectedOptionId }\n\n### Confirm with payment and poll until completed\nconst completed = await client.checkoutIntents.confirmAndPoll(intent.id, {\n paymentMethod: { stripeToken: 'tok_visa', type: 'stripe_token' },\n});\n// completed.state === 'completed' or 'failed'\n\n### Other useful SDK methods\n- client.checkoutIntents.create(params) — create without polling\n- client.checkoutIntents.retrieve(id) — get current state\n- client.checkoutIntents.confirm(id, params) — confirm without polling\n- client.checkoutIntents.pollUntilCompleted(id) — poll existing intent\n- client.products.lookup({ url }) — look up product details by URL\n\n### Error handling\nimport CheckoutIntents, { PollTimeoutError } from 'checkout-intents';\nIf intent.state === 'failed', check intent.failureReason.code and intent.failureReason.message.\n\n## Important Notes\n- Test payment token: tok_visa (Stripe test token, works in staging)\n- US shipping addresses only\n\n## App Requirements\n1. Product browsing page with sample product URLs from various merchants\n2. Product detail view showing item info\n3. Checkout flow: buyer info form → create intent via Supabase function (using SDK) → poll for offer → display pricing (subtotal, shipping, tax, total) → confirm payment → show order result\n4. Supabase Edge Function that uses the checkout-intents SDK (keeps CHECKOUT_INTENTS_API_KEY server-side)\n5. Error handling for failed orders with failureReason display\n6. Clean, modern UI with Tailwind CSS\n7. Environment variables: SUPABASE_URL, SUPABASE_ANON_KEY (frontend), CHECKOUT_INTENTS_API_KEY and CHECKOUT_INTENTS_BASE_URL (Supabase Edge Function secrets)\n\n## Supabase Edge Function Example\nThe edge function receives requests from the frontend and uses the SDK:\n- POST /rye-checkout with action: \"create\" | \"confirm\" | \"get\" and relevant payload\n- Uses the checkout-intents SDK initialized with CHECKOUT_INTENTS_API_KEY from Deno.env\n- Returns Rye API response to frontend\n\nGenerate the complete application with all files. Include a README with setup instructions for connecting to Supabase and configuring the Rye API key. Make sure the .gitignore includes .env and .env.* so secrets are never committed to version control. After generating the code, ask the user for their Rye API key so you can update the .env or .env.local file with the actual CHECKOUT_INTENTS_API_KEY value. Also ask for their Supabase URL and anon key to fill in SUPABASE_URL and SUPABASE_ANON_KEY. Confirm which environment they want to use (staging or production) so you can set CHECKOUT_INTENTS_BASE_URL accordingly.`;function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,li:`li`,ol:`ol`,p:`p`,..._provideComponents(),...props.components},{Heading,OptimizedImage,Warning,_MdxComponentBoundary}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`OpenWithLLM`,children:_jsx(OpenWithLLM,{prompt:llmPrompt,tools:[`lovable`]})}),`\n`,_jsx(Heading,{level:`1`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`This tutorial shows you how to build an ecommerce app using Lovable, Supabase, and Rye. You can see a `,_jsx(_components.a,{href:`https://rye-demo.lovable.app/`,children:`live version of it here`}),` and `,_jsx(_components.a,{href:`https://github.com/rye-com/rye-lovable-demo`,children:`view the source code here`}),`.`]}),`\n`,_jsx(_components.p,{children:`Lovable is an AI-powered app builder that can generate applications from natural language prompts. Supabase is a backend-as-a-service platform, including serverless functions to enable calling third-party APIs. Rye is an ecommerce API that lets you surface products from multiple merchants in your app and place orders programmatically.`}),`\n`,_jsx(_components.p,{children:`By the end of this tutorial, you will have a Lovable app connected to Supabase and Rye, capable of letting users browse products and place orders. From there, you can customize it, including the look and feel, and extend the app’s functionality to build any type of ecommerce experience.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=93a38e9dc3284c70756fa6177d99d276`,alt:`Demo App Screenshot`,\"data-og-width\":`2414`,width:`2414`,\"data-og-height\":`1934`,height:`1934`,\"data-path\":`images/demo-app-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=b32a2830091818530de8debebeb4d24f 280w, https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=20a77c64cc3e907513e1f54f39313be6 560w, https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=4a3a8d6d15a46ae43b205b47d8ff8cfe 840w, https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=2ab0a12d49405b204ac33b4fbce57ada 1100w, https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=83c4eb88a74ccdc583d06d919923b8c5 1650w, https://mintcdn.com/rye-35/NgqGsU8bKa84ml3P/images/demo-app-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=NgqGsU8bKa84ml3P\u0026q=85\u0026s=21efde893cf6dbf088780a10aed2c716 2500w`}),`\n`,_jsx(Heading,{level:`1`,id:`tutorial`,children:`Tutorial`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`This app is for demo purposes only. Before using any code generated from this repo in production, thoroughly review and test it for security and proper functionality.`})}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-set-up-accounts`,children:`Step 1: Set Up Accounts`}),`\n`,_jsxs(_components.p,{children:[`Lovable: `,_jsx(_components.a,{href:`https://lovable.dev/signup`,children:`Sign up for a Lovable account`}),` to generate and manage your app.`]}),`\n`,_jsxs(_components.p,{children:[`Supabase: `,_jsx(_components.a,{href:`https://supabase.com/dashboard/sign-up`,children:`Create a Supabase account`}),` and `,_jsx(_components.a,{href:`https://supabase.com/docs/guides/getting-started`,children:`set up a new project`}),` in your account for use with this tutorial.`]}),`\n`,_jsxs(_components.p,{children:[`Rye: `,_jsx(_components.a,{href:`https://docs.rye.com/api-v2/account-registration`,children:`Sign up for a Rye staging account`}),` to checkout orders. `,_jsx(_components.a,{href:`https://docs.rye.com/api-v2/authorization`,children:`Get your API key`}),` and store it in a secure place.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-connect-lovable-with-supabase`,children:`Step 2: Connect Lovable with Supabase`}),`\n`,_jsxs(_components.p,{children:[`Connect Supabase to Lovable by `,_jsx(_components.a,{href:`https://docs.lovable.dev/integrations/supabase`,children:`following these steps`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-create-app-in-lovable`,children:`Step 3: Create App in Lovable`}),`\n`,_jsx(_components.p,{children:`Create a new app in Lovable with this prompt.`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Copy an existing GitHub repo`}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=088932ad56a82f6b50dc7d3b74ae5c20`,alt:`Lovable 1 Pn`,\"data-og-width\":`2124`,width:`2124`,\"data-og-height\":`1158`,height:`1158`,\"data-path\":`images/lovable-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=d3865ecbc2b3104396da5868cbf1bef3 280w, https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=030cd2c9007c0cc036b5222ff8b649d7 560w, https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=92860f97ec4acbeb7a3b8498615e28f5 840w, https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=b32507fa2649714c179de4e78296b5e8 1100w, https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=fc13e74b7520087fae67273b30190592 1650w, https://mintcdn.com/rye-35/8I_GNfHB5aVdNFZL/images/lovable-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8I_GNfHB5aVdNFZL\u0026q=85\u0026s=c32942369c9d5a1e5d270667c7dd0b69 2500w`}),`\n`,_jsx(_components.p,{children:`This will create a blank Lovable project. Then ask Lovable to use this repo.`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://github.com/rye-com/rye-lovable-demo`,children:`https://github.com/rye-com/rye-lovable-demo`})}),`\n`]}),`\n`,_jsx(_components.p,{children:`Lovable will generate the app now. Afterwards run this prompt to confirm the setup.`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Check for any required Supabase functions used by the code.`}),`\n`,_jsx(_components.li,{children:`If the Supabase functions already exist in Supabase, connect to them.`}),`\n`,_jsx(_components.li,{children:`If the Supabase functions do not exist, create them in Supabase.`}),`\n`,_jsx(_components.li,{children:`If the Rye API key doesn’t exist in Supabase, add a placeholder Rye API key with the value of “AddAPIKeyHere”`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-add-api-key-in-supabase`,children:`Step 4: Add API Key in Supabase`}),`\n`,_jsxs(_components.p,{children:[`Log in to Supabase and navigate to the new function created within your Supabase project from step 1. Find the environmental variable with the value `,_jsx(_components.code,{children:`AddAPIKeyHere`}),` and replace it with your Rye API key from the staging environment.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-5-test-\u0026-secure-the-app`,children:`Step 5: Test \u0026 Secure the App`}),`\n`,_jsx(_components.p,{children:`After running the prompts in step 3, Lovable will display a preview of your app. Test your app in that section.`}),`\n`,_jsxs(_components.p,{children:[`Run `,_jsx(_components.a,{href:`https://docs.lovable.dev/features/security`,children:`Lovable’s built-in security test`}),` and address any issues it identifies. Lovable generates code with AI, so it is important to verify that all security measures, such as input validation, authentication, and access controls are correctly implemented before deploying the app.`]}),`\n`,_jsx(Heading,{level:`1`,id:`extend-your-app`,children:`Extend Your App`}),`\n`,_jsx(_components.p,{children:`Now you can customize your app, including the UI and functionality, to build any type of ecommerce experience.`}),`\n`,_jsx(_components.p,{children:`Using Lovable prompts, you can add features like an admin dashboard to manage products. For a more AI-focused experience, you could integrate a chatbot to answer common questions or guide users through checkout.`}),`\n`,_jsx(_components.p,{children:`Remember, this app is for demo purposes, so review and test it thoroughly before deploying to production.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{OpenWithLLM,llmPrompt,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Build an Ecommerce App with Lovable","sidebarTitle":"Lovable","description":"Build a full ecommerce app using Lovable and Rye's Universal Checkout API with Supabase Edge Functions.","href":"/api-v2/lovable-rye-tutorial"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[147,12156,")=>null;const llmPrompt=undefined;functi"]]},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":1,"children":[]},{"title":"Tutorial","slug":"tutorial","depth":1,"children":[]},{"title":"Step 1: Set Up Accounts","slug":"step-1-set-up-accounts","depth":2,"children":[]},{"title":"Step 2: Connect Lovable with Supabase","slug":"step-2-connect-lovable-with-supabase","depth":2,"children":[]},{"title":"Step 3: Create App in Lovable","slug":"step-3-create-app-in-lovable","depth":2,"children":[]},{"title":"Step 4: Add API Key in Supabase","slug":"step-4-add-api-key-in-supabase","depth":2,"children":[]},{"title":"Step 5: Test \u0026 Secure the App","slug":"step-5-test-\u0026-secure-the-app","depth":2,"children":[]},{"title":"Extend Your App","slug":"extend-your-app","depth":1,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-my-6 {\n margin-top: 1.5rem;\n margin-bottom: 1.5rem\n}\n.mint-mb-3 {\n margin-bottom: 0.75rem\n}\n.mint-mb-4 {\n margin-bottom: 1rem\n}\n.mint-flex {\n display: flex\n}\n.mint-inline-flex {\n display: inline-flex\n}\n.mint-cursor-pointer {\n cursor: pointer\n}\n.mint-flex-wrap {\n flex-wrap: wrap\n}\n.mint-items-center {\n align-items: center\n}\n.mint-gap-2 {\n gap: 0.5rem\n}\n.mint-rounded-lg {\n border-radius: 0.5rem\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}\n.mint-border {\n border-width: 1px\n}\n.mint-border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1))\n}\n.mint-bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1))\n}\n.mint-p-5 {\n padding: 1.25rem\n}\n.mint-px-4 {\n padding-left: 1rem;\n padding-right: 1rem\n}\n.mint-py-2\\.5 {\n padding-top: 0.625rem;\n padding-bottom: 0.625rem\n}\n.mint-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem\n}\n.mint-text-xs {\n font-size: 0.75rem;\n line-height: 1rem\n}\n.mint-font-medium {\n font-weight: 500\n}\n.mint-font-semibold {\n font-weight: 600\n}\n.mint-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1))\n}\n.mint-text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1))\n}\n.mint-transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms\n}\n.mint-duration-200 {\n transition-duration: 200ms\n}\n.dark\\:mint-border-gray-700:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(55 65 81 / var(--tw-border-opacity, 1))\n}\n.dark\\:mint-bg-gray-800\\/50:is(.dark *) {\n background-color: rgb(31 41 55 / 0.5)\n}\n.dark\\:mint-text-gray-200:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-text-gray-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1))\n}","subdomain":"rye-35","siteName":"Rye","title":"Build an Ecommerce App with Lovable - Rye","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-02-17T03:36:13.130Z","originalFileLocation":"api-v2/lovable-rye-tutorial.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Build a full ecommerce app using Lovable and Rye\u0026#x27;s Universal Checkout API with Supabase Edge Functions.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rye\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Build an Ecommerce App with Lovable - Rye\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build a full ecommerce app using Lovable and Rye\u0026#x27;s Universal Checkout API with Supabase Edge Functions.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rye\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://rye.com/docs/api-v2/lovable-rye-tutorial\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rye-35.mintlify.site/docs/_mintlify/api/og/v2?division=Quickstart\u0026amp;title=Build+an+Ecommerce+App+with+Lovable\u0026amp;description=Build+a+full+ecommerce+app+using+Lovable+and+Rye%27s+Universal+Checkout+API+with+Supabase+Edge+Functions.\u0026amp;theme=0da4786005ceb4b92b0a6966\u0026amp;signature=c3fa65cfffbbe856055152b0cbd447f3dde715dfc6e298cb311c379dd8fa3113\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Build an Ecommerce App with Lovable - Rye\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build a full ecommerce app using Lovable and Rye\u0026#x27;s Universal Checkout API with Supabase Edge Functions.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rye-35.mintlify.site/docs/_mintlify/api/og/v2?division=Quickstart\u0026amp;title=Build+an+Ecommerce+App+with+Lovable\u0026amp;description=Build+a+full+ecommerce+app+using+Lovable+and+Rye%27s+Universal+Checkout+API+with+Supabase+Edge+Functions.\u0026amp;theme=0da4786005ceb4b92b0a6966\u0026amp;signature=c3fa65cfffbbe856055152b0cbd447f3dde715dfc6e298cb311c379dd8fa3113\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/rye-35/lTMw_Vp29smCXrIS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rye\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8FA957\">\u003clink data-mint-head rel=\"canonical\" href=\"https://rye.com/docs/api-v2/lovable-rye-tutorial\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-v2/lovable-rye-tutorial.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://rye.com/#organization\",\"name\":\"Rye\",\"url\":\"https://rye.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rye-35/HxmlWhy6JbETnsaq/logo/light.png?fit=max\u0026auto=format\u0026n=HxmlWhy6JbETnsaq\u0026q=85\u0026s=182633959f1a288230f647271c1c7476\"}},{\"@type\":\"WebSite\",\"@id\":\"https://rye.com/docs#website\",\"name\":\"Rye\",\"url\":\"https://rye.com/docs\",\"publisher\":{\"@id\":\"https://rye.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial#webpage\",\"url\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial\",\"name\":\"Build an Ecommerce App with Lovable\",\"description\":\"Build a full ecommerce app using Lovable and Rye's Universal Checkout API with Supabase Edge Functions.\",\"dateModified\":\"2026-02-17T03:36:13.130Z\",\"isPartOf\":{\"@id\":\"https://rye.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Universal Checkout API\",\"item\":\"https://rye.com/docs/api-v2/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quickstart\",\"item\":\"https://rye.com/docs/api-v2/example-flows/simple-checkout\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Build an Ecommerce App with Lovable\",\"item\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial#article\",\"headline\":\"Build an Ecommerce App with Lovable\",\"name\":\"Build an Ecommerce App with Lovable\",\"description\":\"Build a full ecommerce app using Lovable and Rye's Universal Checkout API with Supabase Edge Functions.\",\"url\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial\",\"mainEntityOfPage\":{\"@id\":\"https://rye.com/docs/api-v2/lovable-rye-tutorial#webpage\"},\"dateModified\":\"2026-02-17T03:36:13.130Z\",\"publisher\":{\"@id\":\"https://rye.com/#organization\"},\"isPartOf\":{\"@id\":\"https://rye.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rye\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rye","nav":{"global":null,"tabs":[{"tab":"Universal Checkout API Documentation","groups":[{"group":"Universal Checkout API","pages":[{"title":"Rye API: Enable Your Users to Buy Any Product","sidebarTitle":"Introduction","href":"/api-v2/introduction"},{"group":"Quickstart","pages":[{"title":"Quickstart: Send an Order to Any Merchant","sidebarTitle":"Send an Order to Any Merchant","href":"/api-v2/example-flows/simple-checkout"},{"title":"Single Step Checkout","href":"/api-v2/example-flows/single-step-checkout"},{"title":"Build an AI chat storefront with Rye and Stripe in Next.js","description":"Build a conversational AI storefront where users discover and purchase products through chat, using Rye's checkout API and Stripe.","sidebarTitle":"Chat Storefront","href":"/api-v2/example-flows/chat-storefront"},{"title":"Build an Ecommerce App with Lovable","sidebarTitle":"Lovable","href":"/api-v2/lovable-rye-tutorial"}]},{"group":"API Access \u0026 Environments","pages":[{"title":"Account Registration","description":"Create a Rye account and get API access in seconds from the developer console.","sidebarTitle":"Account Registration","href":"/api-v2/account-registration"},{"title":"Authorization","href":"/api-v2/authorization"},{"title":"Environments","href":"/api-v2/environments"},{"title":"Rate Limits","href":"/api-v2/rate-limits"}]},{"group":"Guides","pages":[{"title":"API Comparison: Universal Checkout vs Sync","sidebarTitle":"API Comparison","href":"/api-v2/api-comparison"},{"title":"API Limitations","sidebarTitle":"API Limitations","href":"/api-v2/developer-notes"},{"title":"Submit Orders to Best Buy","sidebarTitle":"Best Buy","href":"/api-v2/best-buy"},{"title":"Checkout Intent Lifecycle","sidebarTitle":"Checkout Intent Lifecycle","href":"/api-v2/checkout-intent-lifecycle"},{"title":"Returns","sidebarTitle":"Returns","href":"/api-v2/returns"},{"title":"Go Live with Rye: Production Checklist","sidebarTitle":"Go Live","href":"/api-v2/go-live"},{"title":"Handling API Errors","sidebarTitle":"Handling API Errors","href":"/api-v2/errors"},{"title":"Promo Codes","href":"/api-v2/promo-codes"},{"title":"RyeBot Allowlisting","sidebarTitle":"RyeBot","href":"/api-v2/ryebot"},{"group":"Payment Providers","pages":[{"title":"Payment Providers","sidebarTitle":"Overview","href":"/api-v2/payment-providers"},{"title":"Basis Theory Elements","sidebarTitle":"Basis Theory","href":"/api-v2/payment-providers/basis-theory"},{"title":"Stripe","sidebarTitle":"Stripe","href":"/api-v2/payment-providers/stripe"},{"title":"Drawdown","sidebarTitle":"Drawdown","href":"/api-v2/payment-providers/drawdown"}]},{"title":"Variants","href":"/api-v2/variants"}]}]},{"group":"Tools","pages":[{"title":"Build with Rye Using AI","sidebarTitle":"Coding Agents","href":"/api-v2/llm-quickstart"},{"title":"SDKs","sidebarTitle":"SDKs","href":"/api-v2/sdk"},{"title":"Postman Collection","sidebarTitle":"Postman Collection","url":"https://www.postman.com/rye-team/rye/collection/cwbmsqg/universal-checkout-api","href":"/api-v2/postman"}]},{"group":"Testing","pages":[{"title":"Create a Test Store","sidebarTitle":"Create a Test Store","href":"/api-v2/testing/with-shopify"},{"title":"Test Products","sidebarTitle":"Test Products","href":"/api-v2/testing/test-products"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","sidebarTitle":"Webhooks","href":"/api-v2/webhooks"},{"title":"Types of events","href":"/api-v2/webhooks/types"}]},{"group":"API Reference","pages":[{"group":"Billing","pages":[{"title":"Get drawdown balance","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/billing/balance","href":"/api-v2/api-reference/billing/get-drawdown-balance"},{"title":"Get billing info","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/billing","href":"/api-v2/api-reference/billing/get-billing-info"},{"title":"Setup drawdown billing","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/billing/drawdown","href":"/api-v2/api-reference/billing/setup-drawdown-billing"},{"title":"Create on-demand top-up invoice","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/billing/drawdown/topup","href":"/api-v2/api-reference/billing/create-on-demand-top-up-invoice"},{"title":"Cancel top-up invoice","deprecated":null,"version":null,"openapi":"/openapi.documented.yml delete /api/v1/billing/drawdown/topup/{invoiceId}","href":"/api-v2/api-reference/billing/cancel-top-up-invoice"},{"title":"List drawdown transactions","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/billing/transactions","href":"/api-v2/api-reference/billing/list-drawdown-transactions"}]},{"group":"Brands","pages":[{"title":"Retrieve brand","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/brands/domain/{domain}","href":"/api-v2/api-reference/brands/retrieve-brand"}]},{"group":"Checkout Intents","pages":[{"title":"List checkout intents","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/checkout-intents","href":"/api-v2/api-reference/checkout-intents/list-checkout-intents"},{"title":"Create checkout intent","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/checkout-intents","href":"/api-v2/api-reference/checkout-intents/create-checkout-intent"},{"title":"Retrieve checkout intent","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/checkout-intents/{id}","href":"/api-v2/api-reference/checkout-intents/retrieve-checkout-intent"},{"title":"Retrieve order","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/checkout-intents/{id}/order","href":"/api-v2/api-reference/checkout-intents/retrieve-order"},{"title":"Confirm checkout intent","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/checkout-intents/{id}/confirm","href":"/api-v2/api-reference/checkout-intents/confirm-checkout-intent"},{"title":"List shipments for checkout intent","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/checkout-intents/{id}/shipments","href":"/api-v2/api-reference/checkout-intents/list-shipments-for-checkout-intent"},{"title":"Purchase product","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/checkout-intents/purchase","href":"/api-v2/api-reference/checkout-intents/purchase-product"}]},{"group":"Betas","pages":[{"title":"Create checkout session","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/betas/checkout-sessions","href":"/api-v2/api-reference/betas/create-checkout-session"}]},{"group":"Commissions","pages":[{"title":"Retrieve commission","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/commissions/{id}","href":"/api-v2/api-reference/commissions/retrieve-commission"},{"title":"List commissions","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/commissions","href":"/api-v2/api-reference/commissions/list-commissions"}]},{"group":"Events","pages":[{"title":"List events","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/events","href":"/api-v2/api-reference/events/list-events"},{"title":"Retrieve event","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/events/{id}","href":"/api-v2/api-reference/events/retrieve-event"},{"title":"Trigger event","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/events/trigger","href":"/api-v2/api-reference/events/trigger-event"}]},{"group":"Merchant Connectors","pages":[{"title":"Create merchant connector installation link","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/merchant-connectors/{connector}/installation-link","href":"/api-v2/api-reference/merchant-connectors/create-merchant-connector-installation-link"}]},{"group":"Orders","pages":[{"title":"List orders","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/orders","href":"/api-v2/api-reference/orders/list-orders"},{"title":"Get order","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/orders/{id}","href":"/api-v2/api-reference/orders/get-order"},{"title":"Update order buyer","deprecated":null,"version":null,"openapi":"/openapi.documented.yml put /api/v1/orders/{id}/buyer","href":"/api-v2/api-reference/orders/update-order-buyer"},{"title":"Cancel order","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/orders/{id}/cancel","href":"/api-v2/api-reference/orders/cancel-order"}]},{"group":"Payment Gateways","pages":[{"title":"Create payment gateway session","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/payment-gateways/{gateway}/session","href":"/api-v2/api-reference/payment-gateways/create-payment-gateway-session"}]},{"group":"Products","pages":[{"title":"Lookup product","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/products/lookup","href":"/api-v2/api-reference/products/lookup-product"},{"title":"List product subscriptions","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/products/subscriptions","href":"/api-v2/api-reference/products/list-product-subscriptions"},{"title":"Subscribe to product events","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/products/subscribe","href":"/api-v2/api-reference/products/subscribe-to-product-events"},{"title":"Unsubscribe from product events","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/products/unsubscribe","href":"/api-v2/api-reference/products/unsubscribe-from-product-events"}]},{"group":"Returns","pages":[{"title":"Create return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/returns","href":"/api-v2/api-reference/returns/create-return"},{"title":"Get return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/returns/{returnId}","href":"/api-v2/api-reference/returns/get-return"}]},{"group":"Shipments","pages":[{"title":"List shipments","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/shipments","href":"/api-v2/api-reference/shipments/list-shipments"},{"title":"Retrieve shipment by id","deprecated":null,"version":null,"openapi":"/openapi.documented.yml get /api/v1/shipments/{id}","href":"/api-v2/api-reference/shipments/retrieve-shipment-by-id"}]},{"group":"Test Helpers","pages":[{"title":"Advance simulated shipment","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/test-helpers/checkout-intents/{checkoutIntentId}/shipments/advance","href":"/api-v2/api-reference/test-helpers/advance-simulated-shipment"},{"title":"Create simulated return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/test-helpers/returns","href":"/api-v2/api-reference/test-helpers/create-simulated-return"},{"title":"Approve simulated return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/test-helpers/returns/{returnId}/approve","href":"/api-v2/api-reference/test-helpers/approve-simulated-return"},{"title":"Deny simulated return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/test-helpers/returns/{returnId}/deny","href":"/api-v2/api-reference/test-helpers/deny-simulated-return"},{"title":"Refund simulated return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/test-helpers/returns/{returnId}/refund","href":"/api-v2/api-reference/test-helpers/refund-simulated-return"},{"title":"Fail simulated return","deprecated":null,"version":null,"openapi":"/openapi.documented.yml post /api/v1/test-helpers/returns/{returnId}/fail","href":"/api-v2/api-reference/test-helpers/fail-simulated-return"}]}]},{"group":"Help","pages":[{"title":"Security","href":"/api-v2/security"},{"title":"Support","href":"/api-v2/support"},{"title":"Migrate from V1","href":"/api-v2/migrate-from-v1"},{"title":"Legacy Documentation","url":"https://docs-v1.rye.com","href":"/sync-api-docs"}]}]},{"tab":"Rewards SDK","pages":[{"title":"Rewards SDK","href":"/rewards/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/api-v2/changelog"}]},{"tab":"Rye Status","href":"https://ryestatus.com"}]},"basePath":"","title":"Build an Ecommerce App with Lovable - Rye","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CypZe82l.js","lightbox-handle-r17bVUz3.js"]}