---
title: "Create a manual transfer between accounts (admin only)"
method: POST
path: "/api/v1/admin/manual-transfers"
tags: ["Admin", "TransferMate"]
---

# Create a manual transfer between accounts (admin only)

`POST /api/v1/admin/manual-transfers`

Create a manual transfer between accounts (admin only)

## Request body

- AdminPostProcessorLogManualTransferInput — Request body for creating a manual transfer
  - `reference` string, required — Unique payment reference (used as TransferMate client_transaction_id)
  - `source_account_id` string, uuid, required — Source account ID (a merchant bank account or a fee account)
  - `source_account_type` union, required — Type of source account
    - 'MERCHANT_BANK_ACCOUNT'
    - 'FEE_ACCOUNT'
  - `destination_account_id` string, uuid, required — Destination account ID
  - `destination_account_type` union, required — Type of destination account
    - 'MERCHANT_BANK_ACCOUNT'
    - 'FEE_ACCOUNT'
    - 'CUSTOMER_BANK_ACCOUNT'
  - `amount` string, required — Amount to transfer (in source currency)
  - `reason` string, required — Reason for the manual transfer

## Response `201`

Created

- AdminPostProcessorLogManualTransferResponse — Response containing the created manual transfer log entry
  - `success` boolean, required — Indicates if the request was successful
  - `data` object, required — A TransferMate post-processor log entry
    - `id` string, uuid, required — Log entry ID
    - `transaction_id` string, uuid, nullable, required — Associated transaction ID
    - `merchant_id` string, uuid, required — Merchant ID
    - `action` union, required — Type of post-processor action
      - 'FEE_TRANSFER'
      - 'CURRENCY_CONVERSION'
      - 'PAYOUT'
      - 'REFUND_RETENTION'
      - 'MANUAL'
    - `status` union, required — Status of the post-processor log entry
      - 'INITIATED'
      - 'COMPLETED'
      - 'FAILED'
    - `from_currency` string, required — Source currency code
    - `to_currency` string, nullable, required — Destination currency code
    - `amount` string, required — Transfer amount
    - `converted_amount` string, nullable, required — Converted amount after FX
    - `exchange_rate` string, nullable, required — Exchange rate applied
    - `tm_transaction_id` string, nullable, required — TransferMate transaction ID
    - `reference` string, nullable, required — Payment reference
    - `error_message` string, nullable, required — Error message if failed
    - `source_account_id` string, uuid, nullable, required — Source account ID
    - `source_account_type` union, required — Type of source account
      - 'MERCHANT_BANK_ACCOUNT'
      - 'FEE_ACCOUNT'
    - `destination_account_id` string, uuid, nullable, required — Destination account ID
    - `destination_account_type` union, required — Type of destination account
      - 'MERCHANT_BANK_ACCOUNT'
      - 'FEE_ACCOUNT'
      - 'CUSTOMER_BANK_ACCOUNT'
    - `reason` string, nullable, required — Reason for manual transfer
    - `performed_by_user_id` string, uuid, nullable, required — User who performed the manual transfer
    - `created_at` string, date-time, required — When the log entry was created

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found

---

[API](https://skmtc.net/banqzinc/apis/quidkey-api.md) · [All operations](https://skmtc.net/banqzinc/apis/quidkey-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/banqzinc/quidkey-api/versions/f86d2bdbcb08/schema)
