Payment Links
The shareable-URL rail that lets a third party fund one of your campaigns, purchase sponsored placement, or pay an ad-hoc invoice - without needing a UGC account.
A Payment Link is a shareable URL that lets anyone pay - card, bank transfer, mobile money, or crypto - without an account or API integration on their side. The same rail serves three purposes:
| Purpose | Who creates it | What it's for |
|---|---|---|
| Campaign funding | You, via or POST /campaigns/:id/fund with method: "payment_link" | Send to a CEO, finance lead, or client who doesn't have (or doesn't want) a UGC account, so they can fund your campaign directly |
| Sponsored placement | You, when purchasing featured placement for an existing campaign | Same shareable-link mechanism, scoped to a placement purchase instead of a campaign budget |
| Ad-hoc invoicing | Your backend or AI agent, via POST /payment-links or the PAYMENT_LINK_CREATE action | A one-off payment request outside the campaign flow - there's no dashboard UI for this today, so it's API/agent-only |
Campaign funding is the primary, dashboard-visible use case - most developers integrating with Payment Links are building around that flow. Ad-hoc invoicing exists on the same rail and is real, but it's reached through the API or an agent credential, not a "create a payment link" button in the dashboard.
How campaign funding links work
1. You create a campaign as DRAFT
↓
2. Instead of funding it yourself (wallet/card/crypto/mobile money), you request a payment link
↓
3. You share the link (URL or QR code) with whoever will fund it
↓
4. They open the link, see the campaign, and pay - no account needed
↓
5. Settlement emits campaign_funded and moves the campaign toward ACTIVERequest the link via POST /campaigns/:id/fund with method: "payment_link" (see Fund a campaign), or generate it from the dashboard's Advertiser Checkout flow. Either way it's the same underlying PaymentLink record - just created with metadata.purpose: CAMPAIGN_FUNDING instead of no purpose at all.
Payment Link URLs
All Payment Links are hosted on https://ugc.africa:
https://ugc.africa/pay/:ref`:ref` can be:
- shortCode - auto-generated unique code (e.g.
UHnP5FnW1J) - custom slug - a branded slug you set at creation, e.g.
https://ugc.africa/pay/q3-campaign-funding
Transaction protection
Ad-hoc (non-campaign-funding) links can optionally hold funds pending confirmation instead of settling instantly:
When protection is enabled:
1. Payer pays -> funds are held
2. You deliver the product/service
3. Payer confirms receipt (or the auto-release window elapses)
4. Funds release to your wallet
When protection is disabled:
1. Payer pays -> funds settle directly to your wallet, instantly, with no confirmation step
Campaign funding links don't use this - a campaign-funding payment settles straight into the campaign's budget once it clears.
Tracking payments
Payers can track their payment at:
https://ugc.africa/track/:referenceCodeFrom there they can view payment status, confirm receipt, raise a dispute, or download a receipt. See for the confirm-receipt/report-issue flow.
Customization
Set at creation via the API:
| Option | Field | Notes |
|---|---|---|
| Custom slug | customSlug | 3-50 chars, lowercase/numbers/hyphens, must be unique |
| Redirect after payment | successRedirectUrl | Where to send the payer once they've paid |
| Expiration | expiresAt | ISO date; useful for time-boxed funding requests |
| Usage limit | maxUses | Caps how many times a reusable link can be paid |
| Custom/flexible amount | allowCustomAmount, minAmount | Let the payer enter their own amount, with an optional floor |
Fees
Fees are set for your account and can vary by currency and product. Any percentage, fixed amount, or minimum that applies is always shown on the checkout page and, for integrations, in the documented fee/estimate endpoints.
| Transaction type | Fee |
|---|---|
| Payment received | 2.5% + ₦100 |
| Transaction protection | Included |
| Multi-currency (136+ currencies) | Included |
| Instant settlement (when protection is off) | Included |
API access
curl -X POST https://api.ugc.africa/payment-links \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Design consultation invoice",
"amount": 50000,
"currency": "NGN",
"productType": "SERVICE",
"autoReleaseAfterDays": 7
}'To fund a specific campaign instead, use POST /campaigns/:id/fund with method: "payment_link" - see Fund a campaign.
An AI agent acting on your behalf can also create one within limits you set, via the PAYMENT_LINK_CREATE action (POST /agent/payment-link).
Troubleshooting
Link not working? Check it hasn't expired, hasn't been deactivated, and hasn't hit its maxUses limit.
Payer can't complete payment? Confirm the currency is supported in their region and that the payment method they're using is enabled for your account.
Funds not released? For protected links, confirm the payer has confirmed receipt (or that the auto-release window has elapsed) and that there's no open dispute on the transaction.
Did this solve your problem?