Skip to main content
Pay Links are durable URLs that deliver a fixed stablecoin amount to a recipient. Each click creates a fresh Lightning invoice at the current market rate and redirects to Cash App. The link itself never expires.
https://orchestration.flashnet.xyz/pay/DNHKySOZ
The user clicks, Cash App opens with a Lightning payment, and Orchestra handles the swap and delivery. No wallet connection, no app download, no expired invoices. Just a URL.
Pay Links build on the same pipeline as the fiat onramp. The difference is that the onramp specifies BTC input (sats), while Pay Links specify stablecoin output (exact-out).

How It Works

  1. Partner calls POST /v1/pay-links with a destination chain, asset, recipient address, and desired output amount.
  2. Orchestra returns a shortId and shortUrl.
  3. Anyone who opens the URL gets a fresh Lightning invoice sized to deliver the exact output amount at current market rates.
  4. After payment, Orchestra swaps BTC to the destination asset and delivers it.
The invoice is created on each click. Pricing reflects the live BTC rate. If the link is shared in a group chat and three people click it, three independent orders are created.

Use Cases

  • Payment requests: “Pay me $50 USDC” as a link. Share via text, email, QR code, or embed in a website.
  • Invoicing: Generate a link per invoice line item. The recipient pays the exact amount without manual entry.
  • Donations and tips: A fixed-amount link on a profile or stream overlay.
  • Recurring collection: Reuse the same link for repeated payments to the same address.

Supported Destinations

Pay Links support any stablecoin destination that Orchestra supports from a Lightning BTC source:
ChainAssets
SolanaUSDC
BaseUSDC, USDT
EthereumUSDC, USDT
ArbitrumUSDC, USDT
OptimismUSDC, USDT
PolygonUSDC
TronUSDT

Integration

1

Create a pay link

const BASE_URL = 'https://orchestration.flashnet.xyz';

const response = await fetch(`${BASE_URL}/v1/pay-links`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.FLASHNET_API_KEY}`,
    'X-Idempotency-Key': `paylink:${Date.now()}`,
  },
  body: JSON.stringify({
    destinationChain: 'solana',
    destinationAsset: 'USDC',
    recipientAddress: 'So1YourSolanaAddress...',
    amountOut: '50000000', // $50 USDC (6 decimals)
    label: 'Invoice #1234',
  }),
}).then((r) => r.json());
Response:
{
  "payLink": {
    "id": "pl_abc123",
    "shortId": "DNHKySOZ",
    "destinationChain": "solana",
    "destinationAsset": "USDC",
    "recipientAddress": "So1YourSolanaAddress...",
    "amountOut": "50000000",
    "affiliateId": null,
    "label": "Invoice #1234",
    "enabled": true,
    "createdAt": "2025-01-15T12:00:00.000Z",
    "updatedAt": "2025-01-15T12:00:00.000Z",
    "shortUrl": "https://orchestration.flashnet.xyz/pay/DNHKySOZ"
  }
}
2

Share the link

Share the shortUrl anywhere. On click:
  • Orchestra creates an exact-out Lightning quote (BTC sats calculated from the desired stablecoin output at current rates).
  • A fresh BOLT11 invoice is generated.
  • The browser redirects to https://cash.app/launch/lightning/{invoice}.
  • Cash App opens with the payment ready.
https://orchestration.flashnet.xyz/pay/DNHKySOZ
The default link serves a landing page with OpenGraph metadata (title, image) for rich previews in iMessage, WhatsApp, Twitter, etc., then redirects the user to Cash App.If you want to handle your own messaging previews or embed the link in a custom UI, use the /go variant to skip the landing page and go straight to quote creation and Cash App redirect:
https://orchestration.flashnet.xyz/pay/DNHKySOZ/go
3

Track orders from a pay link

Each click creates a standard Orchestra order. Track them the same way as any other order: via webhooks or polling.List all orders created from a specific pay link:
const orders = await fetch(
  `${BASE_URL}/v1/orchestration/history?payLinkId=pl_abc123`,
  { headers: { Authorization: `Bearer ${API_KEY}` } }
).then((r) => r.json());
4

Disable a pay link

Disabled links return a 404 page. Existing orders created before disabling continue to process.
await fetch(`${BASE_URL}/v1/pay-links/pl_abc123`, {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.FLASHNET_API_KEY}`,
    'X-Idempotency-Key': `disable:${Date.now()}`,
  },
});

API Reference

POST /v1/pay-links

Create a new pay link. Requires authentication and idempotency. Request body:
FieldRequiredTypeNotes
destinationChainYesstringTarget chain (e.g., solana, base, tron)
destinationAssetYesstringTarget asset (USDC or USDT)
recipientAddressYesstringDestination address on the target chain
amountOutYesstringDesired output in smallest units (e.g., "50000000" = $50 USDC)
affiliateIdNostringRegistered affiliate ID for fee collection
labelNostringPartner-facing label (max 255 chars)
List pay links for the authenticated partner. Supports limit, offset, and includeDisabled query parameters.

GET /v1/pay-links/:id

Get a single pay link by ID.

DELETE /v1/pay-links/:id

Disable a pay link (soft delete). The link returns 404 after disabling. Requires idempotency.

Fees

All fees are sender-side. The recipient always receives exactly amountOut. The sender’s Lightning invoice is sized to cover the desired output plus all fees.
FeeRatePaid by
Platform fee0.20% (20 bps)Sender
LP pool fee~0.05% (~5 bps)Sender
Affiliate feeVariable (configured per affiliate)Sender
Relay bridge feeVariable (for non-Solana chains)Sender

Affiliate Fees

Pay links support affiliate fees through the affiliateId field. Register an affiliate via PUT /v1/affiliates/:affiliateId first, then reference it when creating the pay link. The affiliate fee is added on top of the Lightning invoice amount. The sender pays more sats to cover the recipient’s exact output plus all fees. The recipient’s amountOut is unaffected.
{
  "destinationChain": "solana",
  "destinationAsset": "USDC",
  "recipientAddress": "So1...",
  "amountOut": "50000000",
  "affiliateId": "my-partner"
}

Pricing

Each click computes a fresh exact-out quote. The Lightning invoice amount reflects:
  1. The desired stablecoin output on the destination chain.
  2. Relay bridge fees (for non-Solana chains).
  3. Platform fee (0.20%).
  4. Affiliate fees (if configured).
  5. BTC/USDB swap rate at the moment of the click.
The sender pays the computed sats amount. The recipient receives exactly amountOut.

Next Steps