UGCDocumentation

Payment Link Issue Report

Reporting an issue on a protected payment-link transaction, and releasing funds

Updated July 14, 2026

For a with transaction protection enabled, the payer can either confirm receipt (releasing the held funds to the recipient) or report an issue before the auto-release window elapses. There is no separate case-management system with evidence upload, timelines, or admin arbitration - it's a two-endpoint flow, and unresolved reports are handled by support.

Report Issue Request

POST /link/:linkId/transactions/:transactionId/report-issue (authenticated, or guest via ?token=)

json
{
  "reason": "NOT_RECEIVED",
  "description": "I have not received my order after 2 weeks",
  "evidence": [
    "https://api.ugc.africa/evidence/abc123.jpg"
  ]
}
FieldTypeDescription
reasonstringOne of the reason codes below
descriptionstringFree-text explanation (max 2000 characters)
evidencestring[]Optional array of already-uploaded file URLs (max 5)

Response:

json
{
  "success": true,
  "data": {
    "message": "Contact support with your transaction reference to report an issue."
  }
}

Reporting an issue pauses the auto-release window - support resolves the report manually (refund, release, or partial) rather than an automated arbitration flow.

Reason Codes

ReasonDescription
WRONG_ITEMReceived the wrong item
DAMAGEDItem arrived damaged
NOT_RECEIVEDOrder not received
NOT_AS_DESCRIBEDProduct does not match description
DEFECTIVEItem is defective
OTHERAnything else - use description for detail

Confirm Receipt Request

POST /link/:linkId/transactions/:transactionId/confirm-receipt (authenticated, or guest via ?token=)

Confirming receipt releases the held funds to the recipient immediately, ahead of the auto-release window.

Response:

json
{
  "success": true,
  "data": {
    "transactionId": "txn_abc123",
    "status": "COMPLETED",
    "amountReleased": 50000,
    "currency": "NGN",
    "message": "Funds have been released to the recipient."
  }
}

Notes

  • Both endpoints require the caller to be the payer on the transaction (or hold a valid guest token) - a 403 is returned otherwise.
  • A 400 is returned if the transaction is not in a protected/held state (e.g. protection was disabled, or funds were already released).
  • For the full auto-release window mechanics, see How You Get Paid.

Did this solve your problem?