> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lightspark.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rewards

export const FeatureCardGrid = ({cols = 3, children}) => <div className={`not-prose feature-cards-grid feature-cards-cols-${cols}`}>
    {children}
  </div>;

export const FeatureCard = ({icon, title, children, href, linkHref, linkText, color, tag, tagPosition, layout, variant, iconSize}) => {
  const isHorizontal = layout === 'horizontal';
  const isFlat = variant === 'flat';
  const isLargeIcon = iconSize === 'lg';
  const isInlineTag = tagPosition === 'inline';
  const card = <div className={`feature-card ${href ? 'feature-card-link' : ''} ${!icon ? 'feature-card-no-icon' : ''} ${isHorizontal ? 'feature-card-horizontal' : ''} ${isFlat ? 'feature-card-flat' : ''} ${isLargeIcon ? 'feature-card-icon-lg' : ''}`}>
      {icon && <div className="feature-card-icon-wrapper">
          {color ? <div className="feature-card-icon" style={{
    WebkitMaskImage: `url(${icon})`,
    maskImage: `url(${icon})`,
    backgroundColor: color,
    width: '24px',
    height: '24px',
    WebkitMaskSize: 'contain',
    maskSize: 'contain',
    WebkitMaskRepeat: 'no-repeat',
    maskRepeat: 'no-repeat'
  }} /> : <img src={icon} alt="" className="feature-card-icon" />}
        </div>}
      <div className="feature-card-content">
        {isInlineTag ? <div className="feature-card-title-row">
            <span className="feature-card-title">{title}</span>
            {tag && <span className="feature-card-tag">{tag}</span>}
          </div> : <div className="feature-card-title">{title}</div>}
        <div className="feature-card-desc">{children}</div>
        {tag && !isInlineTag && <div className="feature-card-tag-row"><span className="feature-card-tag">{tag}</span></div>}
        {linkText && <div className="feature-card-link-row">
            {linkHref ? <a href={linkHref} className="feature-card-text-link" style={{
    color: color
  }}>
                {linkText}
              </a> : <span className="feature-card-text-link feature-card-coming-soon" style={{
    color: color,
    opacity: 0.6
  }}>
                {linkText}
              </span>}
          </div>}
      </div>
    </div>;
  return href ? <a href={href} className="feature-card-anchor">{card}</a> : card;
};

export const topLevelProductName = "Grid";

export const rewardsProductName = "Grid";

<img src="https://mintcdn.com/ramps/hc9AVHNgWd4BcukA/images/heroes/hero-rewards.jpg?fit=max&auto=format&n=hc9AVHNgWd4BcukA&q=85&s=f922eee18042147fc56b91d2f6ed77ca" alt="Rewards hero" className="page-hero" width="1856" height="800" data-path="images/heroes/hero-rewards.jpg" />

With {rewardsProductName}, you can send instant Bitcoin rewards to your **users' self-custody wallets** worldwide through a single, simple API. {topLevelProductName} automatically handles the entire process, managing the fiat-to-crypto conversion, compliance checks, and instant delivery for you.

<FeatureCardGrid cols={3}>
  <FeatureCard icon="/images/icons/lightning.svg" title="Buy & Send in One Call">
    The Grid API combines USD-to-BTC conversion and payout into a single, atomic operation, simplifying the process of distributing rewards.
  </FeatureCard>

  <FeatureCard icon="/images/icons/shield.svg" title="No Crypto Handling">
    Grid converts your platform's fiat balance into Bitcoin on demand, allowing you to offer crypto rewards without managing digital asset custody or complex exchange integrations.
  </FeatureCard>

  <FeatureCard icon="/images/icons/paper-plane-top-right.svg" title="Instant Delivery">
    Delivers Bitcoin to your users' wallets in seconds (like a Spark wallet) giving them immediate ownership and control.
  </FeatureCard>
</FeatureCardGrid>

***

## Rewards Payout Flow

<Steps>
  <Step title="Funding">
    Your platform's internal account is pre-funded with fiat currency (e.g., USD) via standard payment rails like ACH push.
  </Step>

  <Step title="Customer Onboarding">
    For rewards, the only entity who needs to be KYB'd is the entity paying for the reward. This can be you, the platform, or
    your business customers that want to pay out rewards to their end users.
  </Step>

  <Step title="Quote & Execution">
    You execute a single API call to create a quote, instantly convert a specific USD amount to BTC at the current market rate, and transfer the Bitcoin to the user's wallet address.
  </Step>
</Steps>

***

## {rewardsProductName} Features

Users interact with {rewardsProductName} through two main interfaces:

<Tabs>
  <Tab title="API">
    Programmatic access to onboard customers, fund your platform account, get quotes for Bitcoin purchases, and execute reward payouts. Reconcile all activity with real-time webhooks.
  </Tab>

  <Tab title="Dashboard">
    Your development and operations team can use the dashboard to monitor balances and transactions, manage API keys and environments, and troubleshoot with detailed logs.
  </Tab>
</Tabs>

### Onboarding Customers

For rewards with Grid, the only entity who needs to be KYB'd is the entity paying for the reward. This can be you, the platform, or
your business customers that want to pay out rewards to their end users.
All you need in order to pay out a reward is the wallet address.
No need to collect extra personal information or go through the full hosted KYC flow for end users!
To generate a spark wallet, you can use a tool like [Privy](https://privy.io) or the Spark SDK directly.

If you do have business customers that want to pay out rewards to their end users, you can onboard that business customer
via the hosted KYB link flow.

### Funding Your Platform Account

{rewardsProductName} operates on a pre-funded model. You can fund your internal platform account using several payment rails such as ACH, wire transfers, Lightning, and more. This stored balance is then used to instantly purchase and send Bitcoin rewards to your customers.

### Sending Rewards

To send a reward with {rewardsProductName}, you create and execute a quote. The API call specifies your funded internal account as the source and the customer's Bitcoin wallet address as the destination. Grid handles the USD-to-BTC conversion and instant delivery to the receiving wallet, notifying you of the completed transfer via webhook.

### Environments

<Note>
  {rewardsProductName} supports two environments: **Sandbox** and **Production**.

  The Sandbox mirrors production behavior, allowing you to test the full end-to-end flow—from funding a test account and onboarding a mock customer to sending a simulated Bitcoin reward—without moving real funds.

  The Production environment uses live credentials and base URLs for real transactions once you're ready to launch.
</Note>

***

<FeatureCardGrid cols={1}>
  <FeatureCard icon="/images/icons/light-bulb.svg" title="Get Started" href="/rewards/quickstart">
    Ready to integrate {rewardsProductName}? Check out our quickstart guide.
  </FeatureCard>
</FeatureCardGrid>
