# Create transfer configuration

`POST /accounts/{accountID}/transfer-config`

API version: `v2026.07.00`. Send `X-Moov-Version: v2026.07.00` to get the behavior described here.

> AI agents: search and read all Moov docs with the docs MCP server at https://docs.moov.io/mcp (no API key). Setup: https://docs.moov.io/guides/developer-tools/mcp-ai/docs-mcp/index.md

Create a transfer config for an account.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `X-Moov-Version` | header | string |  | Set this header to v2026.07.00 to use the API described in this specification. When omitted, the server defaults to v2024.01.00, the earliest supported version, which may not match the behavior documented here. An unrecognized well-formed version uses the latest supported version that is not newer than the requested version, when one exists. For example, `v2026.08.00` uses `v2026.07.00`. A malformed value, such as `2022`, returns a `404` response. Values: `v2026.07.00`. |
| `accountID` | path | string | Yes | Your Moov account ID. |

## Request body

Content type: `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `tipPresets` | object |  |  |
| `tipPresets.calculationBasis` | string |  | Defines which amount should be used when calculating the final payment total. This calculation applies for percentage tip values. - `pre-tax`: Tip amounts are calculated using the subtotal amount before taxes - `post-tax`: Tip amounts are calculated using the subtotal amount + taxes Values: `pre-tax`, `post-tax`. |
| `tipPresets.percentageOptions` | array of integer |  | Defines the set of suggested tip preset values presented to customers. Percentages must be between 0 and 100 (exclusive) and must be unique. A maximum of 3 values are allowed. |
| `tipPresets.fixedAmountOptions` | array of object |  | Defines the set of suggested tip preset values presented to customers. Fixed amounts must be positive and unique. A maximum of 3 values are allowed. |
| `tipPresets.fixedAmountOptions[].currency` | string | Yes | A 3-letter ISO 4217 currency code. |
| `tipPresets.fixedAmountOptions[].valueDecimal` | string | Yes | A decimal-formatted numerical string that represents up to 9 decimal place precision. For example, $12.987654321 is '12.987654321'. |

## Response 201

The resource was successfully created.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `tipPresets` | object |  | Tip presets when calculating tips for a transfer. |
| `tipPresets.calculationBasis` | string |  | Defines which amount should be used when calculating the final payment total. This calculation applies for percentage tip values. - `pre-tax`: Tip amounts are calculated using the subtotal amount before taxes - `post-tax`: Tip amounts are calculated using the subtotal amount + taxes Values: `pre-tax`, `post-tax`. |
| `tipPresets.percentageOptions` | array of integer |  | Defines the set of suggested tip preset values presented to customers. Percentages must be between 0 and 100 (exclusive) and must be unique. A maximum of 3 values are allowed. |
| `tipPresets.fixedAmountOptions` | array of object |  | Defines the set of suggested tip preset values presented to customers. Fixed amounts must be positive and unique. A maximum of 3 values are allowed. |
| `transferControls` | array of object |  |  |
| `transferControls[].accountID` | string | Yes | ID of the merchant account. |
| `transferControls[].partnerAccountID` | string | Yes | ID of the partner account. |
| `transferControls[].debtRepayment` | boolean | Yes | Indicates if the account is configured for debt repayment. |
| `transferControls[].allowDynamicDescriptor` | boolean | Yes | Indicates if the account is allowed to set dynamic descriptors on transfers. |
| `transferControls[].allowSurcharge` | boolean | Yes | Indicates if the account is allowed to apply surcharges to transfers. |

## Errors

| Status | Meaning |
| --- | --- |
| 400 | The server could not understand the request due to invalid syntax. |
| 401 | The request contained missing or expired authentication. |
| 403 | The user is not authorized to make the request. |
| 404 | The requested resource was not found. |
| 422 | The request was well-formed, but the contents failed validation. Check the request for missing or invalid fields. |
| 429 | Request was refused due to rate limiting. |
| 500 | The request failed due to an unexpected error. |
| 504 | The request failed because a downstream service failed to respond. |

## Examples

### cURL

```bash
curl -X POST "https://api.moov.io/accounts/{accountID}/transfer-config" \
  -H "Authorization: Bearer {token}" \
  -H "X-Moov-Version: v2026.07.00" \
  -d '{
  "tipPresets": {
    "calculationBasis": "pre-tax",
    "percentageOptions": [
      5,
      15,
      25
    ]
  }
}'
```

### Typescript (SDK)

```typescript
import { Moov } from "@moovio/sdk";

const moov = new Moov({
  security: {
    username: "",
    password: "",
  },
});

async function run() {
  const result = await moov.transferConfig.create({
    accountID: "<id>",
    createTransferConfig: {
      tipPresets: {
        fixedAmountOptions: [
          {
            currency: "USD",
            valueDecimal: "12.987654321",
          },
        ],
      },
    },
  });

  console.log(result);
}

run();
```

Full reference with SDK examples in every language: https://docs.moov.io/api/money-movement/transfers/create-transfer-config/
