Payment Links
Persistent URLs your customers can pay through. Create once, share anywhere — email, invoice, SMS, social bio. Each visit spins up a fresh session.
When to use links
- Freelancer invoices — one URL per client, share by email
- Social bio links — replace tip jars, buy-me-a-coffee, ko-fi
- Recurring buyers — regulars pay via the same URL every time
- Donations — leave amount blank so supporters pick their own
- Single-use invoices — enable single-use to auto-close after payment
Creating links
Payment Links are created and managed in your Dashboard → Payment Links. No API required — most merchants never touch code.
Anatomy of a link
| Field | Description |
|---|---|
| title | Public-facing name. Shown to customers on the checkout page. |
| description | Optional short blurb. |
| amount | Fixed amount, or leave blank for customer-picked (donation style). |
| currency | USD, EUR, GBP, NGN, etc. |
| accepted_currencies | Which cryptos the customer can pay with. |
| single_use | If true, auto-pauses after first payment. |
| is_active | Set to false to temporarily disable the link. |
Public URL structure
https://blockcade.app/pay/link/{slug}/
The slug is a short random string generated automatically. Custom slugs are coming.
Passing an amount in the URL (donation-style links)
https://blockcade.app/pay/link/{slug}/?amount=25
Skips the amount prompt and takes the customer straight to checkout.
Pre-filling the customer email
https://blockcade.app/pay/link/{slug}/?email=buyer@example.com
Webhooks on link payments
Payments made through a link fire the same payment.succeeded event. The metadata object includes:
{
"created_via": "payment_link",
"link_id": "uuid-of-the-link",
"title": "Consulting hour"
}
Analytics
Each link shows its times_used count in the dashboard. Detailed per-link analytics (revenue, geographic breakdown, referrers) are coming.
API (v23+)
Payment links can now be managed programmatically. All endpoints require Authorization: Bearer <api-key>.
| Method | Path | Purpose |
|---|---|---|
| POST | /gateway/api/links/ | Create a link |
| GET | /gateway/api/links/ | List (paginated: ?limit=&cursor=) |
| GET | /gateway/api/links/<slug>/ | Retrieve |
| PATCH | /gateway/api/links/<slug>/ | Update |
| DELETE | /gateway/api/links/<slug>/ | Deactivate (soft delete) |
Create example
curl -X POST https://blockcade.app/gateway/api/links/ \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-unique-key" \
-d '{
"title": "Consulting hour",
"amount": 150,
"currency": "USD",
"accepted_currencies": ["USDC","USDT"],
"single_use": false
}'
Node.js SDK
const link = await bc.paymentLinks.create({
title: 'Consulting hour', amount: 150, currency: 'USD',
});
console.log(link.url);
// Later:
await bc.paymentLinks.update(link.slug, { amount: 175 });
await bc.paymentLinks.cancel(link.slug);