UGCDocumentation

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.

Updated September 10, 2026

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:

PurposeWho creates itWhat it's for
Campaign fundingYou, 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 placementYou, when purchasing featured placement for an existing campaignSame shareable-link mechanism, scoped to a placement purchase instead of a campaign budget
Ad-hoc invoicingYour backend or AI agent, via POST /payment-links or the PAYMENT_LINK_CREATE actionA 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.


code
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 ACTIVE

Request 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.


All Payment Links are hosted on https://ugc.africa:

code
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.

For how the auto-release window is determined, see How You Get Paid.

Tracking payments

Payers can track their payment at:

code
https://ugc.africa/track/:referenceCode

From 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:

OptionFieldNotes
Custom slugcustomSlug3-50 chars, lowercase/numbers/hyphens, must be unique
Redirect after paymentsuccessRedirectUrlWhere to send the payer once they've paid
ExpirationexpiresAtISO date; useful for time-boxed funding requests
Usage limitmaxUsesCaps how many times a reusable link can be paid
Custom/flexible amountallowCustomAmount, minAmountLet 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 typeFee
Payment received2.5% + ₦100
Transaction protectionIncluded
Multi-currency (136+ currencies)Included
Instant settlement (when protection is off)Included

API access

bash
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).

See for the complete endpoint list.

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?