Transfers

Move money from your balance to recipients.

Transfers API

The Transfers API allows you to move money from your merchant balance to a pre-created recipient. Transfers are queued for processing via the payment provider.

The Transfer Object

{
  "id": "tr_abc123def456",
  "object": "transfer",
  "amount": 100,
  "currency": "GHS",
  "fee": 1.50,
  "status": "pending",
  "recipient": {
    "id": "rcp_xyz789",
    "name": "John Doe",
    "account": {
      "type": "mobile_money",
      "number": "024****567",
      "provider": "mtn"
    }
  },
  "description": "Monthly payout",
  "statement_descriptor": null,
  "source_payment": null,
  "metadata": {},
  "failure_reason": null,
  "created_at": "2024-01-15T10:00:00Z",
  "completed_at": null
}

Attributes

AttributeTypeDescription
idstringUnique identifier
objectstringAlways "transfer"
amountnumberAmount in GHS
currencystringCurrency code (GHS)
feenumberTransaction fee in GHS
statusstringcreated, pending, processing, completed, failed, reversed
recipientobjectRecipient details
descriptionstringTransfer description
statement_descriptorstringStatement description
source_paymentstringLinked payment ID
metadataobjectCustom metadata
failure_reasonstringError message if failed
created_atstringCreation timestamp
completed_atstringCompletion timestamp

Create a Transfer

POST /v1/transfers

Request Body

ParameterTypeRequiredDescription
amountnumberYesAmount in GHS
currencystringNoCurrency (default: GHS)
recipientstringYesRecipient ID
descriptionstringNoTransfer description
statement_descriptorstringNoStatement description
source_paymentstringNoPayment ID to link this transfer to
metadataobjectNoCustom metadata

Use the X-Idempotency-Key header to prevent duplicate transfers.

curl -X POST https://api.shikacreators.com/v1/transfers \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 100,
    "recipient": "rcp_xyz789",
    "description": "Monthly payout"
  }'
const transfer = await shikacreators.transfers.create({
  amount: 100,
  recipient: 'rcp_xyz789',
  description: 'Monthly payout'
})
transfer = client.transfers.create(
    amount=100,
    recipient='rcp_xyz789',
    description='Monthly payout'
)

Retrieve a Transfer

GET /v1/transfers/:id

List Transfers

GET /v1/transfers

Query Parameters

ParameterTypeDescription
limitintegerNumber of results (1-100, default 10)
starting_afterstringCursor for pagination
statusstringFilter by status
recipientstringFilter by recipient ID

Reverse a Transfer

Reverses a completed transfer, refunding the amount to your merchant balance.

POST /v1/transfers/:id/reverse

Only transfers with status completed can be reversed.

curl -X POST https://api.shikacreators.com/v1/transfers/tr_abc123def456/reverse \
  -H "Authorization: Bearer sk_test_..."
const transfer = await shikacreators.transfers.reverse('tr_abc123def456')
transfer = client.transfers.reverse('tr_abc123def456')

Transfer Statuses

StatusDescription
createdTransfer has been created
pendingTransfer is queued for processing
processingTransfer is being processed by the provider
completedTransfer was successful
failedTransfer failed
reversedTransfer was reversed