Skip to content
PGSwift Docs
Documentation/Transfer fund

Transfer fund

Use this API to transfer funds using a specified inquiry ID

POST /api/transfer

Request

NameTypeRequiredDescription
inquiry_idstringtrueInquiry identifier to process
{
    "inquiry_id": "01jj1g751vqw68ng5546xnda5c"
}

Response

NameDescription
statusOperation status indicator. true indicates success, false indicates failure.
codeMachine-readable error code, present only on error responses. See Response codes below — match on this field, never on message.
messageHuman-readable description, present where applicable. Wording may change without notice.
dataInquiry/transfer outcome details. Always present: null when there is no inquiry to describe — on INQUIRY_NOT_FOUND (404) and on internal errors (HTTP 200 with status:false and a message).
data.inquiry_idThe inquiry identifier that was submitted.
data.merchant_transaction_idThe merchant-provided identifier tied to the inquiry.
data.statusThe inquiry's current status: processing, pending, success, or fail. See Check Inquiry Status for the full status vocabulary.
data.amountTransfer amount as a string with 2 decimal places (e.g., "100000.00").
data.reasonFailure reason. Present only when data.status is fail.
data.payment_atCompletion timestamp, server time, YYYY-MM-DD HH:MM:SS (e.g., "2026-08-13 09:12:45"). Present only when data.status is success.

Response codes

HTTPcodeWhenRecommended action
200—

Transfer accepted and processing

status: "processing"

Wait for the webhook or poll Check Inquiry Status
200—

Inquiry awaiting approval

status: "pending"

Approve the inquiry — approval is done on your side (support can assist)
409DUPLICATE_TRANSFER

This inquiry was already executed

status: "success" (with payment_at) or "processing"

Do not re-send. data.status is the current state; confirm the final result via webhook or /check/inquiry
409TRANSFER_ALREADY_FAILED

The transfer for this inquiry failed

status: "fail" + reason

Start a new inquiry with a new merchant_transaction_id
409INQUIRY_EXPIRED

The inquiry passed its 30-minute expiry

status: "fail", reason: "Inquiry expired"

Start a new inquiry; reserved funds are returned
404INQUIRY_NOT_FOUND

Unknown inquiry_id for this account

null

Check the id; use Check Inquiry Status to look up by merchant_transaction_id

See the full error-code reference for every error code across both endpoints, plus the code- and field-stability contract.

{
    "status": true,
    "data": {
        "inquiry_id": "01jj1g751vqw68ng5546xnda5c",
        "merchant_transaction_id": "RP123333333",
        "status": "processing",
        "amount": "100000.00"
    }
}

Retrying safely

Match on code, never on message — messages may be reworded without notice. New codes may be added over time; treat an unrecognized code as a generic failure and read data.status.

Never create a new inquiry with a new merchant_transaction_id until the original transfer's final status is known — doing so can pay the same beneficiary twice.


Webhook

© 2026 PGSwift. All rights reserved.