Payment Links

Create shareable, no-code payment pages from your dashboard. Compare the four link types and pick the right one.

Payment Links let you collect money without writing any code. You create a link in the OGateway dashboard, share it by WhatsApp, SMS, email or QR code, and your customer pays on a hosted page at ogateway.io/pay/<your-link>.

Every payment made through a link records the payer's name and email, along with any extra fields you add, and sends them to you in the callback, so you can reconcile payments against a real person rather than just a phone number.

๐Ÿ“˜

Payment Links or Checkout URL?

Payment Links are created in the dashboard and can be shared with anyone. They suit invoices, tickets, dues and appeals.

Checkout URL is created through the API, one session per transaction. It suits websites and apps that need to send a customer to pay for a specific order.

The four link types

All links share the same features: description, banner image, payment channels, extra fields, receipts and redirect. The type controls three things:

  1. How many times can the link be paid?
  2. Who sets the amount?
  3. Does OGateway send it out on a schedule?
Link typePaid how many timesAmountSent by OGatewayTypical use
One-time linkExactly onceOptionalNoInvoice, deposit
Fixed amount linkUnlimitedRequired, can't be changedNoTicket, fixed fee
Recurring linkUnlimitedOptionalYes, on a scheduleDues, subscriptions
Dynamic linkUnlimitedAlways set by the payerNoTip jar, appeal, donations

Compare link types

One-timeFixed amountRecurringDynamic
Successful paymentsExactly 1UnlimitedUnlimitedUnlimited
AmountOptionalRequired, can't be changed after creationOptionalCan't be set, the payer enters it
Sent by OGatewayNoNoOn a scheduleNo
Recipient listโ€”โ€”Requiredโ€”
Ends automaticallyOn first paymentNo12 months after the next scheduled sendNo
Donation presetโ€”โ€”โ€”Optional
Status when it endsUsedโ€”Expiredโ€”

Which one should I use?

  • One customer pays one bill. Use a one-time link.
  • Many people pay the same price. Use a fixed amount link.
  • The same people pay again every week or month. Use a recurring link.
  • The payer chooses how much to pay. Use a dynamic link. Turn on the donation preset if you're raising funds towards a target.

One-time link

A one-time link can be paid exactly once. It closes on its first successful payment, and anyone who opens it afterwards sees an Already paid screen instead of being asked to pay again.

  • Amount: optional. Set one for an invoice, or leave it blank and let the payer enter it (for example, a security deposit).
  • Ends: automatically, on the first successful payment. Its status becomes Used.
  • Good for: invoices, deposits, one-off balances.

Fixed amount link

A fixed amount link can be paid any number of times, always for the same amount. The payer can't change the price.

  • Amount: required. It can't be changed after the link is created. To charge a different price, create a new link.
  • Ends: only when you deactivate it.
  • Good for: event tickets, registration fees, standard service charges.

Recurring link

A recurring link is sent to a list of recipients on a schedule you choose. Each recipient gets a reminder by email and/or SMS with a link to the payment page, and pays when they open it.

๐Ÿšง

Recurring links are reminders, not direct debits

OGateway does not debit the payer's wallet automatically. The payer approves each payment themselves when they open the reminder.

  • Schedule: daily, weekly, monthly, or every N days, weeks or months.
  • Recipients: at least one is required. Each recipient can have an email address, a phone number, or both. An email is required to send reminders by email, and a phone number to send them by SMS.
  • SMS reminders: sent through a Ghanaian SMS gateway, so use SMS for Ghanaian phone numbers and email for everyone else.
  • Removing a recipient: they stop receiving reminders from the next scheduled send.
  • Unsubscribing: every reminder includes an unsubscribe link. A recipient who uses it is removed from the list.
  • Opted out list: removed recipients appear under Opted out on the link's page, with the date and whether they were removed by the recipient or by you.
  • Reminder deliveries: the link's page shows each reminder that was sent and whether it was delivered.
  • Ends: automatically, 12 months after the next scheduled send. Editing the schedule recalculates this date. When the link ends, its status becomes Expired. Click Renew to reactivate it with the same recipients and schedule.
  • Good for: membership dues, SACCO contributions, school fees, subscriptions.
๐Ÿ“˜

Identifying who paid

The callback for a recurring link payment includes the payer's name, email and any extra fields, but not which recipient's reminder they used. If you need to match payments to recipients, add an extra field such as a membership number.

Dynamic link

A dynamic link is an always-on link where the payer decides the amount. It can be paid any number of times.

  • Amount: you can't set one. The payer always enters it.
  • Ends: only when you deactivate it.
  • Good for: tip jars, general "Pay us" links, settling open balances.

Donation preset

To raise money for a cause, turn on the donation preset when creating a dynamic link. This adds:

  • A target amount, with a progress bar on the payment page showing how much has been raised against it
  • Donation wording on the receipt
  • A Make another donation button after payment

Link lifecycle

A link is always in exactly one state, shown on the link's page in the dashboard. A link can only end in three ways: it's used up, it expires, or you deactivate it.

flowchart LR
    Active -->|One-time link paid| Used
    Active -->|Recurring link reaches its end date| Expired
    Active -->|You deactivate it| Deactivated
    Expired -->|Renew| Active
StatusApplies toWhat it means
ActiveAll typesThe link is accepting payments. Every new link starts as Active.
UsedOne-time linksThe link has been paid and no longer accepts payments.
ExpiredRecurring linksThe link reached its end date and stopped sending reminders. Click Renew to reactivate it.
DeactivatedAll typesYou closed the link. This can't be undone.

Deactivating a link

Deactivating is how you remove a link. When you deactivate one:

  • It stops accepting payments immediately. For recurring links, all scheduled reminders are cancelled.
  • Its address (/pay/<your-link>) is freed up. You can create a new link at the same address later, but it's a completely new link, with no settings or payment history carried over.
  • Past payments and receipts aren't affected. Receipts live at their own permanent address (/r/<reference>), not at the link's address.
  • It can't be undone. To collect again, create a new link.
๐Ÿšง

Old copies of the link may still be around

If you reuse an address, an older copy of it may still be sitting in a customer's WhatsApp chat or inbox. Make sure the new link's title and description make it clear what's being paid for.

What the payer sees

  1. The payer opens the link and sees your banner, description and the amount (or an amount field, if they decide).
  2. They choose a payment channel from the ones you enabled for the link: Mobile Money, Bank, Card or Crypto.
  3. They fill in their details:
    • Mobile Money or Bank: first name, last name, email, and their network and account or wallet number.
    • Card: name and email, then card details.
    • Plus any extra fields you've added.
  4. They approve the payment. For Mobile Money, each network shows its own approval steps:
    • MTN MoMo and AirtelTigo Money send a prompt to the payer's phone.
    • Telecel Cash doesn't send a prompt, so it's marked Manual approval and the payer is shown how to approve it by dialling *110# and going to My Approvals.
  5. They land on a receipt at a permanent address (ogateway.io/r/<reference>), which they can download, copy or share by QR code. A copy is also sent to them by email, and by SMS for GHS payments.

If you've set a redirect URL, the receipt shows a Close and return to button that takes the payer back to your site. Otherwise, the payer stays on the receipt.

Setting up a link

These options are available on every link type:

OptionDetails
Title and descriptionDescriptions can be up to 2,000 characters.
Banner imagePNG, JPG or WebP, up to 2 MB. We recommend 1200 ร— 400 px.
Payment channelsChoose which channels the payer can use: Mobile Money, Bank, Card or Crypto. Availability depends on your business account.
Extra fieldsAsk the payer for anything else you need, such as a membership number or invoice reference. Answers are sent to you in the callback, keyed by the field's label, so give each field a unique label.
ReceiptsSent to the payer by email for all currencies, and by SMS for GHS payments only. SMS is skipped for other currencies. The Receipts & alerts tab on each link shows every attempt, where it was sent and the provider's response.
Redirect URLOptional. Where the payer goes when they click Close and return to on the receipt.
Callback URLOptional. Overrides your business's default callback URL for payments made through this link.
๐Ÿ“˜

Test mode

Links created while your dashboard is in test mode process payments in the test environment. Switch the dashboard to live mode before creating links for real customers.

Standard transaction limits for your currency and channel apply to every payment.

Callback

When a payment through a link completes or fails, OGateway sends a callback to your business's callback URL, or to the link's own callback URL if you set one. The payload is the same shape as every other OGateway collection, including Checkout URL, so you can use the handler you already have.

The details the payer entered on the payment page are in metadata.

{
  "id": "6e2f6a1e-9c7b-4a3a-8e21-6f0c6a2b6c11",
  "amount": 120,
  "fee": 2.4,
  "currency": "GHS",
  "status": "COMPLETED",
  "channel": "MOMO",
  "type": "DEBIT",
  "customer": {
    "accountName": "Emmanuel Dodoo",
    "accountNumber": "233244110921"
  },
  "metadata": {
    "firstName": "Ama",
    "lastName": "Boateng",
    "email": "[email protected]",
    "extra": {
      "Membership number": "ADB-2291"
    }
  },
  "reason": null,
  "network": "MTN",
  "checkout_url": null,
  "provider_message": "APPROVED",
  "reference_business": null,
  "created_at": "2026-09-01T08:00:03.000Z",
  "updated_at": "2026-09-01T08:00:41.000Z",
  "virtual_account": null,
  "message": "0000 | Switch | Approved",
  "telco_response": "APPROVED",
  "instructions": null,
  "bear_fee": "business"
}

A failed payment has the same shape, with "status": "FAILED" and the reason in message.

FieldDescription
idThe transaction ID.
statusCOMPLETED or FAILED.
metadata.firstName, lastName, emailThe details the payer entered on the payment page.
metadata.extraEvery extra field you configured, keyed by the label the payer saw.
reference_businessAlways null for Payment Links, because the payer starts the payment, not your system.
๐Ÿ“˜

Telling Payment Link payments apart

The callback doesn't include the link it came from. To route Payment Link callbacks separately from your other collections, set a callback URL on the link.

Every callback includes an x-ogateway-signature header, an HMAC-SHA512 signature of the payload made with your secret key. Verify it before trusting the callback. See Webhook Security for how.

See Callbacks for more on handling callbacks.


Did this page help you?