Payments

Manual reconciliation

Verify a payment by transaction ID when auto-match missed it.

Use this when a customer claims to have paid but their payment didn’t auto-verify — usually because they didn’t include the HPN code, or paid from an unexpected number. Ask them for the transaction ID from their MoMo confirmation, then submit it here.

Bash
POST /v1/transactions/{reference}/reconcile

Scope: transactions:write

Request

FieldTypeRequiredDescription
transaction_idstringYesTransaction ID from the customer’s MoMo confirmation (MTN: 73012849466, Telecel: 0000011528209461, AT: PP260203.1254.C00772)
amountdecimalNoStrict-check opt-in. If supplied, mismatch returns AMOUNT_MISMATCH. Omit to accept whatever was paid.
notesstringNoFree-text context for the audit log
Bash
curl -X POST https://api.harpoonsms.com/v1/transactions/hpn_trx_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6/reconcile 
  -H "Authorization: Bearer hpn_live_sk_xxxxxxxxxxxxx" 
  -H "Content-Type: application/json" 
  -d '{ "transaction_id": "73012849466" }'

Response

JSON
{
  "success": true,
  "data": {
    "reconciliation_id": "rec_b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7",
    "status": "VERIFIED",
    "transaction_id": "73012849466",
    "transaction_updated": true,
    "new_transaction_status": "SUCCESS",
    "matched_amount": "150.00",
    "expected_amount": "150.00",
    "difference": "0.00",
    "difference_type": "exact",
    "message": "Payment verified successfully"
  }
}

Statuses

statusMeaning
VERIFIEDPayment matched. new_transaction_status is SUCCESS, PARTIAL, or OVERPAID.
ALREADY_CONFIRMEDThe transaction was already verified, or the transaction ID has already been used.
NOT_FOUNDNo matching payment found on your account. Check the ID.
AMOUNT_MISMATCHOnly when you supplied amount and it didn’t equal the actual amount.

Response fields

FieldDescription
new_transaction_statusNew state of the payment
matched_amountActual amount received
expected_amountAmount on the original payment request
differenceSigned: matched - expected. Negative = underpaid.
difference_typeexact, underpaid, or overpaid

A successful reconcile fires a transaction.completed webhook.