πŸ›’Checkout Widget

Embed crypto payments in your website or app with a few lines of code

Integrate the Helio Checkout Widget with just a few lines of code to accept USDC, 100+ digital currencies (Solana, Ethereum, Polygon, Bitcoin), and card payments via a seamless on-ramp flow.

We offer a Vanilla JS & React integration, each with a broad range of config options to customise the checkout for your theme - see here:

IMPORTANT: Phantom requires domain allowlisting for the checkout widget to avoid transaction safety warnings. Email review@blowfish.xyz and cc hi@hel.io for allowlisting.

Get started

  • Log into Helio to set up your paylinkId and generate the code snippet on Step 4 of our payment creation flow. Use https://demo.hel.io/ to customise your theme & config

  • Our standard way to embed our checkout is with our JS/HTML embed - simply paste into your code builder as follows

Embed Helio payments in your website in a few clicks

Dynamic pricing

  • IMPORTANT: If you want to set the price in your widget programatically, create a "Dynamic pricing" paylinkId in the dashboard and pass the "amount" via config

Helio Checkout (React)

If you have a React based app, then the easiest way to embed Helio Checkout is with our React component.

Install the dependancy:

yarn add @heliofi/checkout-react
# or npm install @heliofi/checkout-react
# or pnpm add @heliofi/checkout-react

For Next 14 or React 18, install version ^2.3.1 For Next 15 or React 19, install version ^3.0.0

Then in your React components import it in (simply grab the example code snippet for our React component on step 4 when creating your Pay Link.)

import {HelioCheckout} from '@heliofi/checkout-react'

const helioConfig = {
    paylinkId: "6571e7cd4a2bee8095ee84da",
    amount: "5.99",
};

function YourCheckoutComponent() {
  return <HelioCheckout config={helioConfig} />;
}

Note: if you are dynamically generating the config object, we recommend wrapping it in `useMemo()`

Config options

The configuration options object is the same for our Vanilla JS and React version.

Common config options:

  • One of the following must be set (but not both)

    • paylinkId

      • This is the ID for the Pay Link you would like to embed

        • example: paylinkId: "6571e7cd4a2bee1095ee84da"

    • chargeToken

  • network (optional - default is main)

    • values: main or test

    • example: network: "test"

    • This is only required if you generated a Pay Link on our dev/testnet site `https://app.dev.hel.io/`

    • See note below how our network value works.

  • paymentType (optional - default is paylink)

    • values: paylink or paystream

    • example: paymentType: "paystream"

    • This is only required if you set up a recurring paystream embed.

    • If your Pay Link is recurring, the code snippet on step 4 will already include paymentType: "paystream"

  • platform only if you are embedding from presale.magiceden.io

    • If you are embedding our checkout for a Pay link created from https://app.hel.io you should not set this value.

    • This will automatically be added to the code snippet on step 4 of Pay Link creation if you are on https://presale.magiceden.io

    • values: magic_eden

    • example: platform: "magic_eden"

Customising the look of the embed:

  • display (optional - default is inline)

    • values: button inline or new-tab

    • example: display: "button" Use this to display a button that opens up a modal with our checkout flow

    • example: display: "new-tab" Use this to display a button that opens up a unique, single use checkout page in a new tab. The "charge pages" are optimal for mobile payment flows, deep-linking, QR codes, embedded pay buttons on simple websites like Wix, or other custom payment flows. Learn more about Charges

  • primaryPaymentMethod (optional - default is crypto)

    • values: crypto or fiat

    • example: primaryPaymentMethod: "fiat"

    • If set to fiat, then 'pay with card' will be the default button option.

  • customTexts (optional)

    • Use this to override some texts/copy within the embed.

    • Current options are as follows:

{
  customTexts: {
    mainButtonTitle: "Purchase via Helio",
    payButtonTitle: "Click to pay",
  }
}
  • theme (optional)

    • Use this to override theming options within the embed.

    • themeMode (use this to switch between light or dark appearances):

      • values: light or dark

    • Example usage:

{
    paylinkId: "6571e7cd4a2bee1095ee84da",
    theme: {
        themeMode: "dark", // or "light"
    }
}
  • primaryColor (optional, required when neutralColor is defined)

    • Use this to customise main colours within the embed

  • neutralColor (optional, required when primaryColor is defined)

    • Use this to customise neutral colours such as border and text colours within the embed

    • Example usage:

{
    paylinkId: "6571e7cd4a2bee1095ee84da",
    primaryColor: "#E60000",
    neutralColor: "#5A6578"
}
  • showPayWithCard (optional - default is true)

    • Use this to remove the 'Pay with card' button from the embed.

    • values: true or false

    • example: showPayWithCard: false

Dynamic config options

If you have a dynamic payment (to programatically set the amount a) then you will need to use these options:

  • Log in to Helio and select CREATE PAYMENT -> Dynamic pricing -> paylinkId

  • amount (required for dynamic payments)

    • values: a string value

    • example: amount: "5.99"

    • This will be the amount of the payment currency

  • Use step 2 of the Pay link creation process on https://app.hel.io to set the currencies you will receive in.

Callback config options

Use our callbacks to run Javascript code when certain actions occur.

You can use these to trigger changes in your application.

  • onSuccess

  • onError

  • onPending

  • onCancel

  • onStartPayment

Example:

{
  // ... (your other config options) ...
  onSuccess: event => console.log(event),
  onError: event => console.log(event),
  onPending: event => console.log(event),
  onCancel: () => console.log("Cancelled payment"),
  onStartPayment: () => console.log("Starting payment"),
}

In addition, we recommend using our webhooks to verify transaction on your backend. You can find an end-to-end developer example here including the Checkout Widget and webhooks here:

Advanced config options:

  • debug (optional - default is false)

    • true or false

    • example: debug: true

    • if true then it will output some helpful debug information

  • additionalJSON (optional)

    • values can be any valid JSON data.

    • example: additionalJSON: {customerId: "customer1", product: "T-shirt"}

    • Anything you pass in here will get stored when a customer makes a transaction.

    • You can retrieve this on transactions by listening for our webhooks, which include all relevant values

Our network options for testnet

When you generate a paylink on app.dev.hel.io (for test transactions), then you must set network: "test" in your config.

If you generate on app.hel.io (mainnet) you do not need to set network config options!

(You cannot set network: "test" for a paylink generated on app.hel.io)

The testnets that we use for each blockchain are described below:

  • Solana:

    • main = mainnet

    • test = devnet

  • Ethereum

    • main = mainnet

    • test = Sepolia

  • Polygon

    • main = mainnet

    • test = Mumbai

  • Bitcoin

    • main = mainnet

    • test = testnet3

  • Base

    • main = Mainnet

    • test = Sepolia

Supported Currencies

Use our Swagger API to get a list of currencies currently supported : https://api.hel.io/v1/docs#/Currency/CurrencyController_value

Try it out with currency 'type' of "DIGITAL" to return all supported currencies

Or pull directly from : https://api.hel.io/v1/currency?type=DIGITAL

Last updated