---
title: "Create Counterparty Transfer"
method: POST
path: "/api/v1/counterparty-transfers"
tags: ["CounterpartyTransfers"]
---

# Create Counterparty Transfer

`POST /api/v1/counterparty-transfers`

## Request

- Base URL: `https://merchant-api.accruesavings.com`
- URL: `https://merchant-api.accruesavings.com/api/v1/counterparty-transfers`
- Auth: none declared. Required headers: `Client-ID`, `Authorization`
- TypeScript: <https://skmtc.dev/byaccrue/apis/accrue-merchant-api/docs/api/v1/counterparty-transfers/post.ts> (a function with typed inputs; its response is checked against the schema)

Initiate a transfer of funds between two counterparties owned by the authenticated partner.

## Headers

- `Client-ID` string, uuid, required: The unique identifier of the client making the request. This header is required to retrieve the client-specific configuration and ensure that the response is tailored to the client's settings and permissions.
- `Authorization` string, uuid, required: Secure secret to access privileged endpoints.

## Request body

- object
  - `data` object, required
    - `type` 'CounterpartyTransfer', required
    - `attributes` object, required
      - `fromCounterpartyId` string, uuid, required: ID of the source counterparty.
      - `toCounterpartyId` string, uuid, required: ID of the destination counterparty.
      - `amount` integer, required: Amount in cents
      - `idempotencyKey` string, required: Idempotency key to prevent duplicate transfers.
      - `metadata` object: Optional string-keyed metadata associated with the transfer. Values must be strings; serialize numbers, booleans, or structured data as strings before sending (e.g. JSON.stringify).

## Response `201`

Counterparty transfer created successfully

- CreateCounterpartyTransferResponse
  - `data` CounterpartyTransfer, required: A counterparty transfer represents a movement of funds between two counterparties.
    - `id` string, uuid, required: Unique identifier for the object.
    - `type` 'CounterpartyTransfer', required
    - `attributes` object, required
      - `updatedAt` string, date-time, required
      - `createdAt` string, date-time, required
      - `fromCounterpartyId` string, uuid: ID of the source counterparty.
      - `toCounterpartyId` string, uuid: ID of the destination counterparty.
      - `amount` integer: Amount in cents
      - `status` 'Pending' | 'Completed' | 'Failed': Current status of the counterparty transfer.
      - `idempotencyKey` string: Idempotency key to prevent duplicate transfers.
      - `externalLedgerTransactionId` string, nullable: The external ledger transaction ID from the payment provider, if available.
      - `failureReason` string, nullable: Reason for transfer failure, if applicable.
      - `metadata` object, nullable: Optional string-keyed metadata associated with the transfer. Values must be strings; serialize numbers, booleans, or structured data as strings before sending (e.g. JSON.stringify).

## Other responses

- `400`: Validation error
- `403`: Forbidden — counterparty belongs to a different partner
- `404`: Source or destination counterparty does not exist in the authenticated partner scope.

---

[API](https://skmtc.dev/byaccrue/apis/accrue-merchant-api.md) - [All operations](https://skmtc.dev/byaccrue/apis/accrue-merchant-api/llms.txt) - [OpenAPI document](https://skmtc.dev/byaccrue/apis/accrue-merchant-api/revisions/3e2d97ef2e6e?raw)
