lomi.
Payments

Refunds

Process full or partial refunds for transactions.

The Refunds API allows you to refund completed transactions. Refunds are processed asynchronously by the original payment provider.

Refunds are initiated immediately but processed asynchronously. Use webhooks to track final status (refund.completed or refund.failed).

Initiate a refund

Issue a full or partial refund for a completed transaction.

Request Body

FieldTypeRequiredDescription
transaction_idstringYesID of the transaction to refund
amountnumberNoRefund amount (full refund if omitted)
reasonstringNoReason for the refund
metadataobjectNoCustom key-value pairs
import { LomiSDK } from '@lomi./sdk';

const lomi = new LomiSDK({
  apiKey: process.env.LOMI_API_KEY!,
  environment: 'live',
});

// Full refund
const fullRefund = await lomi.refunds.create({
  transaction_id: 'tx_abc123...',
  reason: 'Customer requested refund',
});

// Partial refund
const partialRefund = await lomi.refunds.create({
  transaction_id: 'tx_abc123...',
  amount: 5000,
  reason: 'Partial product return',
  metadata: {
    ticket_id: 'TICKET-456',
  },
});

console.log(`Refund initiated: ${partialRefund.id}, Status: ${partialRefund.status}`);
from lomi import LomiClient
import os

client = LomiClient(
    api_key=os.environ["LOMI_API_KEY"],
    environment="test"
)

refund = client.refunds.create({
    "transaction_id": "tx_abc123...",
    "amount": 5000,
    "reason": "Customer requested refund",
    "metadata": {"ticket_id": "TICKET-456"}
})

print(f"Refund initiated: {refund['id']}, Status: {refund['status']}")
curl -X POST "https://api.lomi.africa/refunds" \
  -H "X-API-KEY: $LOMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "tx_abc123...",
    "amount": 5000,
    "reason": "Customer requested refund",
    "metadata": {"ticket_id": "TICKET-456"}
  }'

List refunds

Retrieve all refunds with optional filtering.

Query Parameters

ParameterTypeDescription
statusstringFilter by status: pending, completed, failed, cancelled
startDatestringFilter from this date (ISO 8601)
endDatestringFilter up to this date (ISO 8601)
limitnumberResults per page (default: 50)
offsetnumberPagination offset (default: 0)
const refunds = await lomi.refunds.list({
  status: 'completed',
  startDate: '2024-01-01T00:00:00Z',
  limit: 20,
});
refunds = client.refunds.list(
    status="completed",
    startDate="2024-01-01T00:00:00Z",
    limit=20
)
curl -X GET "https://api.lomi.africa/refunds?status=completed&startDate=2024-01-01T00:00:00Z&limit=20" \
  -H "X-API-KEY: $LOMI_API_KEY"

Get a refund

Retrieve details of a specific refund.

const refund = await lomi.refunds.get('ref_abc123...');
console.log(`Status: ${refund.status}`);
refund = client.refunds.get('ref_abc123...')
curl -X GET "https://api.lomi.africa/refunds/ref_abc123..." \
  -H "X-API-KEY: $LOMI_API_KEY"

Refund Object

FieldTypeDescription
idstringUnique refund identifier
transaction_idstringOriginal transaction ID
amountnumberRefund amount
currency_codestringCurrency code
statusstringpending, completed, failed, cancelled
reasonstringRefund reason
failure_reasonstringReason for failure (if failed)
provider_codestringPayment provider
metadataobjectCustom metadata
created_atstringCreation timestamp

Webhooks

Subscribe to these events for refund status updates:

EventDescription
refund.pendingRefund initiated, awaiting provider
refund.completedRefund successfully processed
refund.failedRefund failed (check failure_reason)

Error Responses

StatusDescription
400Invalid input or amount exceeds transaction
401Invalid or missing API key
404Transaction or refund not found

On this page