---
title: "Make Internal Transfer"
method: POST
path: "/internal-transfer/"
tags: ["Internal Transfers"]
---

# Make Internal Transfer

`POST /internal-transfer/`

## Request

- Base URL: `https://app2test.infiniaweb.com/infinia_api/v1/accounts`
- URL: `https://app2test.infiniaweb.com/infinia_api/v1/accounts/internal-transfer/`
- Auth: HTTP basic

Make an internal transfer between accounts of the same family of companies. An internal transfer can have the following statuses:

* PENDING: The transfer has been created.
* PROCESSING: The transfer has started to be processed and funds have been debited.
* SETTLING: The transfer is being settled.
* COMPLETED: The funds have been sent to the destination account (but not necessarily received yet).
* FAILED: The transfer failed.

### Testing in sandbox

In the sandbox, transfer the magic amount `302` to get a transfer that is accepted, debits the source
account and then fails, refunding it and notifying the `callback_url`, or `303` to get one that fails in
this endpoint's response. Any other amount follows the normal (successful) flow.

## Headers

- `x-company-id` integer: ID of a child company for authentication. If not provided, the parent company will be authenticated.

## Request body

- InternalTransferRequest
  - `idempotency_key` string: A unique key that ensures a request is processed only once. If the same key is sent with multiple requests, the server returns the original response instead of performing the action again.
  - `source_account_id` string, required: Source account ID
  - `target_account_id` string, required: Target account ID
  - `source_amount` number: Amount to transfer from source to target account (in source account currency). If not provided, the target_amount must be provided
  - `target_amount` number: Amount to receive in the target account currency (in target account currency). If not provided, the source_amount must be provided
  - `quote_id` string: Quote request ID to use a previously obtained quote. If not provided, the current rate will be used and accepted
  - `callback_url` string: URL to send a POST request with the result of the transfer. The schema of the POST request is the same as the response of this endpoint

## Response `200`

Successful Response

- InternalTransferResponse
  - `status` 'success'
  - `data` InternalTransferResult, required
    - `id` string, required: Transfer ID
    - `idempotency_key` string: A unique key that ensures a request is processed only once. If the same key is sent with multiple requests, the server returns the original response instead of performing the action again.
    - `company_id` string, required: Company ID
    - `created_at` string, date-time, required: Creation date of the transfer
    - `updated_at` string, date-time, required: Last update date of the transfer
    - `quote_id` string: Quote request ID used in the transfer, if applicable
    - `rate` number: FX rate used in the transfer, if applicable
    - `source_amount` number: Amount of the transfer
    - `destination_amount` number: Amount received in the target account currency
    - `source_account_id` string, required: Source account ID
    - `target_account_id` string, required: Target account ID
    - `status` 'PENDING' | 'PROCESSING' | 'SETTLING' | 'COMPLETED' | 'FAILED', required
    - `failure_reason` string: Reason of the failure, if the transfer failed
    - `compliance_hold` boolean: True while the transfer is temporarily held for a compliance review. The transfer resumes automatically once the review is completed.
    - `callback_url` string: URL to send a POST request with the result of the transfer, if applicable
    - `voucher_ids` string[]: Voucher IDs associated with the transfer of funds to the final destination.
    - `source_account` AccountToIncludeInResponses, required
      - `id` string, required
      - `account_number` string, required
      - `currency` string, required
      - `country` string, required
      - `company` CompanyToIncludeInResponses, required
        - `id` string, required
        - `name` string, required
    - `target_account` AccountToIncludeInResponses
      - `id` string, required
      - `account_number` string, required
      - `currency` string, required
      - `country` string, required
      - `company` CompanyToIncludeInResponses, required
        - `id` string, required
        - `name` string, required
    - `company` CompanyToIncludeInResponses, required
      - `id` string, required
      - `name` string, required

## Other responses

- `403`: Forbidden
- `422`: Validation Error
- `500`: Internal Server Error

---

[API](https://skmtc.dev/infiniaweb/apis/accounts.md) - [All operations](https://skmtc.dev/infiniaweb/apis/accounts/llms.txt) - [OpenAPI document](https://skmtc.dev/infiniaweb/apis/accounts/revisions/2faae77050e4?raw)
