# Wallet Deep Linking

When you display a Lightning invoice in your application, you can offer links such as **Pay with Cash App** or **Pay with Strike** so customers can open the invoice directly in their wallet.

Voltage's [Checkout (Beta)](/checkout-beta) already handles Cash App links for you. If you build your own payment interface, you can create these links using a Lightning invoice generated by Voltage. Hosted checkout is not required.

![](/images/wallet-deep-linking-1.png)

## Link formats

In each format, replace `{bolt11Invoice}` with the complete BOLT11 invoice string from Voltage. Do not include the surrounding braces.

| Wallet | Link format | Network |
| --- | --- | --- |
| Cash App | `https://cash.app/launch/lightning/{bolt11Invoice}` | Mainnet |
| Strike | `strike:{bolt11Invoice}` | Mainnet |
| Voltage demo wallet | `https://demo.wallet.voltage.cloud/launch/lightning/{bolt11Invoice}` | Mutinynet |
| Any Lightning wallet | `lightning:{bolt11Invoice}` | Depends on the wallet |

Use the invoice itself in the Cash App, Strike, and demo wallet formats, without a `lightning:` prefix.

## Add the link to your application

1. Generate a Lightning invoice using a Voltage wallet on the network the destination wallet supports. See [Receiving](/receiving) for the invoice creation flow.
2. Build the link using the format for that wallet.
3. Use the resulting URL for a **Pay with...** link in your payment interface.

For example, once your application has the invoice:

```javascript
function createCashAppLink(bolt11Invoice) {
  return `https://cash.app/launch/lightning/${bolt11Invoice}`;
}

function createStrikeLink(bolt11Invoice) {
  return `strike:${bolt11Invoice}`;
}

// bolt11Invoice is the complete mainnet invoice generated by Voltage.
const cashAppLink = document.createElement("a");
cashAppLink.href = createCashAppLink(bolt11Invoice);
cashAppLink.textContent = "Pay with Cash App";

const strikeLink = document.createElement("a");
strikeLink.href = createStrikeLink(bolt11Invoice);
strikeLink.textContent = "Pay with Strike";

document.body.append(cashAppLink, strikeLink);
```

Keep the invoice and its QR code available for customers who want to pay with another Lightning wallet.

## Test with the Voltage demo wallet

**Cash App only supports mainnet.** Mutinynet invoices cannot be paid through the Cash App link.

To test deep linking without spending real bitcoin, use the [Voltage demo wallet](https://demo.wallet.voltage.cloud/). It accepts the same `/launch/lightning/{bolt11Invoice}` path as Cash App, but pays Mutinynet invoices.

1. In your staging or development environment, generate an invoice using a Mutinynet Voltage wallet.
2. Link to `https://demo.wallet.voltage.cloud/launch/lightning/{bolt11Invoice}`.
3. In production, switch the origin to `https://cash.app` and use mainnet invoices. The rest of the link stays the same.

```javascript
// Use the demo wallet with Mutinynet invoices outside production.
const walletOrigin =
  environment === "production"
    ? "https://cash.app"
    : "https://demo.wallet.voltage.cloud";

const walletUrl = new URL(`/launch/lightning/${bolt11Invoice}`, walletOrigin);
```

The demo wallet asks signed-out users to sign in, then returns them to the same invoice. The user reviews the invoice and taps **Pay** to send it.

## General Lightning links

You can also use `lightning:{bolt11Invoice}` as a general-purpose link that opens any Lightning wallet installed on the customer's device.

Results vary by device and platform. For example, iOS usually opens the most recently installed Lightning wallet instead of letting the customer choose one. Where possible, offer wallet-specific links alongside the invoice and QR code.

## Confirm payment

Opening a link does not mean the invoice has been paid. Verify completion on your server through the Voltage API or [Webhooks](/webhooks) before marking an order as paid or delivering a product.
