The Gemba Open Banking API allows secure and easy integration with banking services. It provides endpoints for managing accounts, payments, messaging, and webhooks. This API supports operations like account retrieval, transaction processing, and sending messages securely.
All requests to the Gemba Open Banking API require an Authorization header containing a valid bearer access token. Example:
Authorization: Bearer ${access_token}
The access token is valid for 10 minutes. Once expired, a new token must be generated to continue using the API.
This endpoint allows clients to request an access token.
Pass the x-api-key header with a valid API key.
| x-api-key required | string Example: gm_prod_PAB2scRXgll7tS6lW7BzLRHqchlj8N35 A valid API key self-issued via the API Keys page |
| access_token | string The access token to be used for authenticated requests. |
| expires_in | integer The number of seconds until the token expires. |
| token_type | string The type of token issued, typically "Bearer" for OAuth 2.0. |
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
- "expires_in": 3600,
- "token_type": "Bearer"
}MCP is opt-in and is not available to API clients by default. Request this feature via Gemba developer support at [email protected].
The Gemba MCP server exposes this API to MCP-compatible AI clients over streamable HTTP.
| Environment | Endpoint |
|---|---|
| Production | https://api.ge.mba/mcp |
| Sandbox | https://sandbox.api.ge.mba/mcp |
The examples below use production. For sandbox, swap the host (and, for the JWT backup, use a sandbox API key).
OAuth is the default. Point the client at the MCP endpoint with no
Authorization header. On first connect the client opens a browser; sign in with
your Gemba account. A present bearer token skips OAuth discovery.
A short-lived JWT from an API key is a backup for non-interactive clients (below).
CLI, desktop app, or VS Code extension:
claude mcp add --transport http gemba https://api.ge.mba/mcp
Or configure .mcp.json in the project root, or ~/.claude.json for user scope:
{
"mcpServers": {
"gemba": {
"type": "http",
"url": "https://api.ge.mba/mcp"
}
}
}
"type": "http" pins streamable HTTP. Do not add an Authorization header unless
you are using the JWT backup.
{
"mcpServers": {
"gemba": {
"url": "https://api.ge.mba/mcp"
}
}
}
claude_desktop_config.json launches stdio servers only, so a remote HTTP server is
reached through mcp-remote:
{
"mcpServers": {
"gemba": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.ge.mba/mcp",
"--transport",
"http-only"
]
}
}
}
--transport http-only prevents fallback to SSE. On first connection the client
opens a browser to sign in.
If the client cannot complete browser OAuth (CI or other non-interactive setups), exchange an API key for the same short-lived bearer token used for REST calls — see Authentication. The token is valid for 10 minutes; there is no refresh. After it expires, issue a new token and update the client.
GEMBA_MCP_TOKEN=$(curl -fsS -X POST https://api.ge.mba/0.1/auth/access-token \
-H "x-api-key: gm_prod_xxx" | jq -er .access_token) &&
claude mcp add --transport http gemba https://api.ge.mba/mcp \
--header "Authorization: Bearer $GEMBA_MCP_TOKEN"
Claude Code .mcp.json expands ${GEMBA_MCP_TOKEN} from the environment of
the process that launches claude. Export it from the access-token endpoint
in the same shell before starting Claude Code. The token expires after 10
minutes with no refresh — issue a new one and restart Claude when it does.
${env:VAR} is VS Code mcp.json syntax and is passed through literally:
GEMBA_MCP_TOKEN=$(curl -fsS -X POST https://api.ge.mba/0.1/auth/access-token \
-H "x-api-key: gm_prod_xxx" | jq -er .access_token) &&
[ -n "$GEMBA_MCP_TOKEN" ] &&
export GEMBA_MCP_TOKEN &&
claude
{
"mcpServers": {
"gemba": {
"type": "http",
"url": "https://api.ge.mba/mcp",
"headers": {
"Authorization": "Bearer ${GEMBA_MCP_TOKEN}"
}
}
}
}
Claude Desktop via mcp-remote with a token. Do not put a space after
Authorization: — mcp-remote splits --header on the first space, so the token
value is supplied through the environment variable:
{
"mcpServers": {
"gemba": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.ge.mba/mcp",
"--transport",
"http-only",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer eyJhbGciOiJSUzI1NiIs..."
}
}
}
}
Returns the banking clients linked to the authenticated user.
Use these endpoints when a user can belong to more than one client (for example a person with access to several companies). Call GET /clients to list those clients, then use a returned clientId on subsequent account, payment, and FX requests.
This is not an API for creating or managing white-label / partner clients.
Returns the banking clients the authenticated user belongs to.
A single user may be linked to multiple clients (for example several companies). Use this
endpoint to discover those clients and pick the correct clientId for later calls
(accounts, transfers, FX, and so on).
This endpoint does not create, update, or manage white-label / partner clients.
| id required | string <uuid> |
| name required | string [ 1 .. 255 ] characters Client name |
| isActive required | boolean |
| createdAt required | string <date-time> Timestamp of opening |
| updatedAt required | string <date-time> Last update timestamp |
| deletedAt | string <date-time> |
[- {
- "id": "123f4567-d89b-12d3-a456-436614174000",
- "name": "Sample Client",
- "isActive": true,
- "createdAt": "2022-01-01T00:00:00Z",
- "updatedAt": "2023-01-01T00:00:00Z",
- "deletedAt": null
}
]Returns details for one banking client linked to the authenticated user.
Use a clientId from GET /clients. This is not for managing white-label / partner clients.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| id required | string <uuid> |
| name required | string [ 1 .. 255 ] characters Client name |
| isActive required | boolean |
| createdAt required | string <date-time> Timestamp of opening |
| updatedAt required | string <date-time> Last update timestamp |
| deletedAt | string <date-time> |
{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "name": "Sample Client",
- "isActive": true,
- "createdAt": "2022-01-01T10:00:00Z",
- "updatedAt": "2023-06-15T14:30:00Z",
- "deletedAt": null
}Endpoints related to managing user accounts, such as retrieving account details, balances, and performing account-based operations.
This endpoint retrieves a list of user accounts. It returns an array of account objects, each containing details such as account ID, client ID, name, status, associated IBANs, and available currencies.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| id required | string <uuid> |
| clientId required | string <uuid> |
| name required | string [ 1 .. 255 ] characters Account name |
| isActive required | boolean |
| status required | string (AccountStatusEnum) Enum: "active" "blockedCredit" "blockedDebit" "blockedAll" |
| endDate | string <date-time> Planned date of closure |
| createdAt required | string <date-time> Timestamp of opening |
| updatedAt | string <date-time> Last update timestamp |
| closedAt | string <date-time> Date of closure |
| deletedAt | string <date-time> |
required | Array of objects (IBANResponse) Account numbers |
required | Array of objects (CurrencyResponse) Available currencies |
[- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "clientId": "123e4567-e89b-12d3-a456-426614174000",
- "name": "Sample Account",
- "isActive": true,
- "status": "active",
- "endDate": "2025-12-31T00:00:00Z",
- "createdAt": "2022-01-01T00:00:00Z",
- "updatedAt": "2023-01-01T00:00:00Z",
- "closedAt": null,
- "deletedAt": null,
- "numbers": [
- {
- "sortCode": "123456",
- "accountNumber": "12345678",
- "IBAN": "GB29NWBK60161331926819"
}, - {
- "sortCode": "654321",
- "accountNumber": "87654321",
- "IBAN": "GB29NWBK60161331926820"
}
], - "currencies": [
- {
- "name": "United States Dollar",
- "code": "USD"
}, - {
- "name": "Euro",
- "code": "EUR"
}
]
}
]Retrieves detailed information for a specific account. This endpoint returns a single account object containing comprehensive data such as account ID, client ID, name, status, associated IBANs, and available currencies.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account to retrieve |
| id required | string <uuid> |
| clientId required | string <uuid> |
| name required | string [ 1 .. 255 ] characters Account name |
| isActive required | boolean |
| status required | string (AccountStatusEnum) Enum: "active" "blockedCredit" "blockedDebit" "blockedAll" |
| endDate | string <date-time> Planned date of closure |
| createdAt required | string <date-time> Timestamp of opening |
| updatedAt | string <date-time> Last update timestamp |
| closedAt | string <date-time> Date of closure |
| deletedAt | string <date-time> |
required | Array of objects (IBANResponse) Account numbers |
required | Array of objects (CurrencyResponse) Available currencies |
{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "clientId": "98765432-e89b-12d3-a456-426614174000",
- "name": "Premium Savings Account",
- "isActive": true,
- "status": "active",
- "endDate": "2025-12-31T23:59:59Z",
- "createdAt": "2022-01-01T10:00:00Z",
- "updatedAt": "2023-06-15T14:30:00Z",
- "closedAt": null,
- "deletedAt": null,
- "numbers": [
- {
- "sortCode": "123456",
- "accountNumber": "12345678",
- "IBAN": "GB29NWBK60161331926819"
}
], - "currencies": [
- {
- "name": "British Pound Sterling",
- "code": "GBP"
}
]
}This endpoint retrieves an account statement for a specific account, providing transaction history and balance information for a given time period. The response can be filtered by date range and currency.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> The unique identifier for the account. This is a GUID that represents the account for which the statement is being requested. |
| from | string <date> The start date for the statement period (inclusive). Only transactions from this date onward will be included in the statement. Format: YYYY-MM-DD. |
| to | string <date> The end date for the statement period (inclusive). Only transactions up to this date will be included in the statement. Format: YYYY-MM-DD. |
| currencyCode | string The currency code (ISO 4217) to filter the statement by a specific currency. Example: USD, EUR, GBP. If not provided, the default currency of the account will be used. |
required | object (BalanceResponse) |
required | Array of objects (StatementRecord) |
{- "balance": {
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "currencyCode": "str",
- "issuedAt": "2019-08-24T14:15:22Z",
- "opening": 0,
- "closing": 0,
- "openingDate": "2019-08-24T14:15:22Z",
- "closingDate": "2019-08-24T14:15:22Z"
}, - "records": [
- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "documentRef": "DOC-2023-09-15-001",
- "transactionRef": "TRANS-20230915-001",
- "date": "2023-09-15T14:30:00Z",
- "type": "SEPA Transfer",
- "amount": 100000,
- "currencyCode": "EUR",
- "details": "Monthly salary payment",
- "recipientBIC": "DEUTDEFFXXX",
- "recipientAccount": "DE89370400440532013000",
- "recipientName": "John Doe",
- "senderBIC": "BOFAUS3NXXX",
- "senderAccount": "US29NWBK60161331926819",
- "senderName": "Alice Smith"
}
]
}This endpoint allows you to retrieve the balance of a specific account. You must specify the account ID and currency code, and optionally, you can provide a date range using the opening and closing date query parameters.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier for the account. This is a GUID that represents the account for which the balance is being requested. |
| currencyCode required | string <= 3 characters Example: USD The 3-letter currency code (ISO 4217) for which the balance is requested. Example: USD, EUR, GBP. |
| openingDate | string <date> Example: openingDate=2023-09-01 The starting date for the balance inquiry. This date marks the opening of the period for which you want to retrieve the account balance. |
| closingDate | string <date> Example: closingDate=2023-09-15 The ending date for the balance inquiry. This date marks the closure of the period for which you want to retrieve the account balance. |
| accountId required | string <uuid> |
| currencyCode required | string <= 3 characters Currency in ISO 4217 alpha-3 format |
| issuedAt required | string <date-time> |
| opening required | integer <int64> Amount specified in minor units of currency |
| closing required | integer <int64> Amount specified in minor units of currency |
| openingDate required | string <date-time> |
| closingDate required | string <date-time> |
{- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "currency": "USD",
- "balance": 1000000,
- "availableBalance": 950000,
- "pendingTransactions": 50000,
- "reservedBalance": 0,
- "asOf": "2023-09-15T14:30:00Z"
}This tag covers endpoints for processing various types of payments, including internal, international, UK-based transfers, and bulk batches.
Single-transfer resources expose a status field. Terminal outcomes rejected and canceled include reason (enum) and message (string). Status onhold means the payment is temporarily awaiting further processing and does not include reason or message.
Bulk endpoints use different payloads: create returns { bulkPaymentId }, status returns { status, count } (no per-row transfer objects). There is no bulk webhook; child transfers use standard transfer.outgoing.changed events.
This endpoint initiates an internal transfer between accounts. The transfer requires specifying the recipient's account details, the amount, and the currency code.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which the internal transfer will be initiated. |
| x-gemba-request-id required | string <uuid> <= 64 characters Request id. Will act as an idempotency key |
| amount required | integer <int64> The amount to be transferred. Must be a positive integer. |
| currencyCode required | string <= 3 characters The 3-letter ISO 4217 currency code for the transfer. Example: USD, EUR, GBP. |
| description | string A brief description or reference for the transfer. This field is optional. |
| recipientName | string The name of the recipient for this transfer. |
| recipientAccountNumber required | string The recipient's account number (IBAN) to which the funds will be transferred. |
| status required | string Enum: "rejected" "canceled" Terminal failure or client cancellation. | ||||||||||||
| reason required | string (TransferFailureReasonEnum) Enum: "insufficient_funds" "wrong_payment_details" "rejected_by_bank" "canceled_by_client" "other" Machine-readable reason when a transfer or incoming payment ends in Present together with
Use | ||||||||||||
| message required | string Human-readable explanation. Safe for partner display. Never includes AML, sanctions, or investigation details. | ||||||||||||
| id required | string <uuid> Unique identifier for the transfer. | ||||||||||||
| accountId required | string <uuid> Unique identifier of the account from which the transfer is made. | ||||||||||||
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). | ||||||||||||
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. | ||||||||||||
| total required | integer <int64> The total amount debited, including the transfer amount and fee. | ||||||||||||
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. | ||||||||||||
| description | string A description or reference for the transfer. | ||||||||||||
| recipientName | string The name of the transfer recipient. | ||||||||||||
| recipientAccountNumber required | string The account number or IBAN of the recipient's account. | ||||||||||||
| createdAt | string <date-time> Timestamp when the transfer was created. |
{- "amount": 100000,
- "currencyCode": "USD",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "DE89370400440532013000"
}{- "id": "234e5678-e89b-12d3-a456-426614174000",
- "status": "completed",
- "amount": 100000,
- "fee": 500,
- "total": 100500,
- "currencyCode": "USD",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "DE89370400440532013000",
- "createdAt": "2023-09-15T14:30:00Z"
}This endpoint retrieves a list of internal transfers for a specific account. The result can be paginated using offset and limit query parameters.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which internal transfers will be fetched. |
| from | string <date> The start date for the period (inclusive). Format: YYYY-MM-DD. |
| to | string <date> The end date for the statement period (inclusive). Format: YYYY-MM-DD. |
| offset | integer Default: 0 The number of records to skip from the beginning of the result set. Default is 0. |
| limit | integer Default: 10 Example: limit=10 The maximum number of records to return. Default is 10. |
| status required | string Enum: "rejected" "canceled" Terminal failure or client cancellation. | ||||||||||||
| reason required | string (TransferFailureReasonEnum) Enum: "insufficient_funds" "wrong_payment_details" "rejected_by_bank" "canceled_by_client" "other" Machine-readable reason when a transfer or incoming payment ends in Present together with
Use | ||||||||||||
| message required | string Human-readable explanation. Safe for partner display. Never includes AML, sanctions, or investigation details. | ||||||||||||
| id required | string <uuid> Unique identifier for the transfer. | ||||||||||||
| accountId required | string <uuid> Unique identifier of the account from which the transfer is made. | ||||||||||||
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). | ||||||||||||
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. | ||||||||||||
| total required | integer <int64> The total amount debited, including the transfer amount and fee. | ||||||||||||
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. | ||||||||||||
| description | string A description or reference for the transfer. | ||||||||||||
| recipientName | string The name of the transfer recipient. | ||||||||||||
| recipientAccountNumber required | string The account number or IBAN of the recipient's account. | ||||||||||||
| createdAt | string <date-time> Timestamp when the transfer was created. |
[- {
- "id": "234e5678-e89b-12d3-a456-426614174000",
- "status": "completed",
- "amount": 100000,
- "currencyCode": "USD",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "DE89370400440532013000",
- "createdAt": "2023-09-15T14:30:00Z"
}, - {
- "id": "345e6789-e89b-12d3-a456-426614174000",
- "status": "pending",
- "amount": 50000,
- "currencyCode": "EUR",
- "description": "Invoice payment",
- "recipientName": "Jane Smith",
- "recipientAccountNumber": "FR1420041010050500013M02606",
- "createdAt": "2023-09-15T14:30:00Z"
}
]This endpoint retrieves fees for internal transfers for a specific account.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which internal transfers will be fetched. |
| amount required | integer <int64> Example: amount=100000 Amount of the internal transfer |
| currencyCode required | string <= 3 characters Example: currencyCode=USD Currency code of the internal transfer. ISO 4217 3-letter currency code. |
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). |
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. |
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. |
{- "fee": 500,
- "amount": 100000,
- "currencyCode": "USD"
}This endpoint retrieves allowed countries for SEPA transfer country fields.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account for which SEPA transfer countries will be fetched. |
required | Array of objects (SepaTransferCountriesByField) Allowed countries grouped by requested SEPA transfer country field. |
{- "items": [
- {
- "field": "beneficiaryCountry",
- "countries": [
- {
- "code": "DE",
- "name": "Germany"
}
]
}
]
}This endpoint send the OTP for a specific transfer.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which transfers will be fetched. |
| transferType required | string Enum: "internal" "international" "uk" Example: international The type of transfer to be confirmed. |
| transferId required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 The unique identifier (GUID) for the transfer to be confirmed. |
| x-gemba-request-id required | string <uuid> <= 64 characters Request id. Will act as an idempotency key |
| id required | string <uuid> The unique identifier for the transfer/bulk of transfers confirmation. |
| type required | string Default: "sms" Enum: "sms" "email" The type of transfer confirmation. |
| code | string or null The confirmation code. Sandbox only |
| status required | string Enum: "confirmed" "sent" "expired" The status of the internal transfer confirmation |
| expiresAt required | string <date-time> The timestamp when the transfer was confirmed. |
{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "type": "sms",
- "status": "sent",
- "expiresAt": "2024-09-16T14:32:00Z"
}This endpoint initiates an transfer between accounts. The transfer requires specifying the recipient's account details, the amount, and the currency code.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which the transfer will be initiated. |
| transferType required | string Enum: "internal" "international" "uk" Example: international The type of transfer to be confirmed. |
| transferId required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 The unique identifier (GUID) for the transfer to be confirmed. |
| x-gemba-request-id required | string <uuid> <= 64 characters Request id. Will act as an idempotency key |
| code required | string The OTP to confirm the transfer. |
| id required | string <uuid> The unique identifier for the transfer/bulk of transfers confirmation. |
| type required | string Default: "sms" Enum: "sms" "email" The type of transfer confirmation. |
| code | string or null The confirmation code. Sandbox only |
| status required | string Enum: "confirmed" "sent" "expired" The status of the internal transfer confirmation |
| expiresAt required | string <date-time> The timestamp when the transfer was confirmed. |
{- "code": "123456"
}{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "type": "sms",
- "status": "confirmed",
- "expiresAt": "2024-09-16T14:32:00Z"
}This endpoint creates an international transfer. The transfer requires specifying details about the recipient, bank, and intermediary (if applicable), along with the amount and currency code.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> The unique identifier (GUID) for the account from which the international transfer will be initiated. |
| x-gemba-request-id required | string <uuid> <= 64 characters Request id. Will act as an idempotency key |
| amount required | integer <int64> The amount to be transferred. Must be a positive integer. |
| currencyCode required | string <= 3 characters The 3-letter ISO 4217 currency code for the transfer. Example: USD, EUR, GBP. |
| description | string A brief description or reference for the transfer. |
| recipientName | string The name of the recipient for this transfer. |
| recipientAccountNumber required | string The recipient's account number (IBAN or another account format depending on the country). |
| recipientAccountType required | string (RecipientAccountTypeEnum) Enum: "individual" "company" |
| recipientAddress required | string <= 255 characters The address of the recipient. |
| recipientCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code for the recipient's country. |
| recipientRegistrationNumber | string The recipient’s registration number (e.g., national ID or tax ID). |
| chargesType required | string (InternationalTransferChargesTypeEnum) Enum: "our" "sha" Specifies who will bear the transfer charges. |
| bankName required | string The name of the recipient's bank. |
| bankAddress required | string The address of the recipient's bank. |
| bankCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code for the bank's location. |
| bankBIC required | string The Bank Identifier Code (BIC) or SWIFT code of the recipient's bank. |
| intermediaryBIC | string The Bank Identifier Code (BIC) or SWIFT code of the intermediary bank, if applicable. |
| intermediaryName | string The name of the intermediary bank, if applicable. |
| intermediaryAddress | string The address of the intermediary bank, if applicable. |
| intermediaryAccountNumber | string The account number at the intermediary bank, if applicable. |
| intermediaryCountry | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code for the intermediary bank's location. |
| status required | string Enum: "rejected" "canceled" Terminal failure or client cancellation. | ||||||||||||
| reason required | string (TransferFailureReasonEnum) Enum: "insufficient_funds" "wrong_payment_details" "rejected_by_bank" "canceled_by_client" "other" Machine-readable reason when a transfer or incoming payment ends in Present together with
Use | ||||||||||||
| message required | string Human-readable explanation. Safe for partner display. Never includes AML, sanctions, or investigation details. | ||||||||||||
| id required | string <uuid> Unique identifier for the transfer. | ||||||||||||
| accountId required | string <uuid> Unique identifier of the account from which the transfer is made. | ||||||||||||
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). | ||||||||||||
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. | ||||||||||||
| total required | integer <int64> The total amount debited, including the transfer amount and fee. | ||||||||||||
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. | ||||||||||||
| description | string A description or reference for the transfer. | ||||||||||||
| recipientName | string The name of the transfer recipient. | ||||||||||||
| recipientAccountNumber required | string The account number or IBAN of the recipient's account. | ||||||||||||
| recipientAccountType required | string (RecipientAccountTypeEnum) Enum: "individual" "company" | ||||||||||||
| recipientAddress required | string <= 255 characters The address of the recipient. | ||||||||||||
| recipientCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the recipient. | ||||||||||||
| recipientRegistrationNumber | string The registration number of the recipient (e.g., tax ID, company registration number). | ||||||||||||
| chargesType required | string (InternationalTransferChargesTypeEnum) Enum: "our" "sha" Specifies who will bear the transfer charges. | ||||||||||||
| bankName required | string The name of the recipient's bank. | ||||||||||||
| bankAddress required | string The address of the recipient's bank. | ||||||||||||
| bankCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the recipient's bank. | ||||||||||||
| bankBIC required | string The Bank Identifier Code (BIC) or SWIFT code of the recipient's bank. | ||||||||||||
| intermediaryBIC | string The BIC of the intermediary bank, if applicable. | ||||||||||||
| intermediaryName | string The name of the intermediary bank, if applicable. | ||||||||||||
| intermediaryAddress | string The address of the intermediary bank, if applicable. | ||||||||||||
| intermediaryAccountNumber | string The account number at the intermediary bank, if applicable. | ||||||||||||
| intermediaryCountry | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the intermediary bank, if applicable. | ||||||||||||
| createdAt | string <date-time> Timestamp when the transfer was created. |
{- "amount": 0,
- "currencyCode": "str",
- "description": "string",
- "recipientName": "string",
- "recipientAccountNumber": "string",
- "recipientAccountType": "individual",
- "recipientAddress": "7th Floor, The Bower Warehouse, 211 Old Street, London EC1V 9NR",
- "recipientCountry": "st",
- "recipientRegistrationNumber": "string",
- "chargesType": "sha",
- "bankName": "string",
- "bankAddress": "string",
- "bankCountry": "st",
- "bankBIC": "string",
- "intermediaryBIC": "string",
- "intermediaryName": "string",
- "intermediaryAddress": "string",
- "intermediaryAccountNumber": "string",
- "intermediaryCountry": "st"
}{- "status": "rejected",
- "reason": "insufficient_funds",
- "message": "Account has insufficient funds",
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "accountId": "234e5678-e89b-12d3-a456-426614174000",
- "amount": 100000,
- "fee": 500,
- "total": 100500,
- "currencyCode": "EUR",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "DE89370400440532013000",
- "recipientAccountType": "individual",
- "recipientAddress": "7th Floor, The Bower Warehouse, 211 Old Street, London EC1V 9NR",
- "recipientCountry": "GB",
- "recipientRegistrationNumber": "DE123456789",
- "chargesType": "sha",
- "bankName": "Deutsche Bank",
- "bankAddress": "Taunusanlage 12, 60325 Frankfurt am Main, Germany",
- "bankCountry": "DE",
- "bankBIC": "DEUTDEFFXXX",
- "intermediaryBIC": "BOFAUS3NXXX",
- "intermediaryName": "Bank of America",
- "intermediaryAddress": "100 West 33rd Street, New York, NY 10001, USA",
- "intermediaryAccountNumber": 6550123456,
- "intermediaryCountry": "US",
- "createdAt": "2024-09-16T14:32:00Z"
}This endpoint retrieves a list of international transfers for a specific account. The result can be paginated using offset and limit query parameters.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> The unique identifier (GUID) for the account from which international transfers will be fetched. |
| from | string <date> The start date for the period (inclusive). Format: YYYY-MM-DD. |
| to | string <date> The end date for the statement period (inclusive). Format: YYYY-MM-DD. |
| offset | integer Default: 0 The number of records to skip from the beginning of the result set. Default is 0. |
| limit | integer Default: 10 The maximum number of records to return. Default is 10. |
| status required | string Enum: "rejected" "canceled" Terminal failure or client cancellation. | ||||||||||||
| reason required | string (TransferFailureReasonEnum) Enum: "insufficient_funds" "wrong_payment_details" "rejected_by_bank" "canceled_by_client" "other" Machine-readable reason when a transfer or incoming payment ends in Present together with
Use | ||||||||||||
| message required | string Human-readable explanation. Safe for partner display. Never includes AML, sanctions, or investigation details. | ||||||||||||
| id required | string <uuid> Unique identifier for the transfer. | ||||||||||||
| accountId required | string <uuid> Unique identifier of the account from which the transfer is made. | ||||||||||||
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). | ||||||||||||
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. | ||||||||||||
| total required | integer <int64> The total amount debited, including the transfer amount and fee. | ||||||||||||
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. | ||||||||||||
| description | string A description or reference for the transfer. | ||||||||||||
| recipientName | string The name of the transfer recipient. | ||||||||||||
| recipientAccountNumber required | string The account number or IBAN of the recipient's account. | ||||||||||||
| recipientAccountType required | string (RecipientAccountTypeEnum) Enum: "individual" "company" | ||||||||||||
| recipientAddress required | string <= 255 characters The address of the recipient. | ||||||||||||
| recipientCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the recipient. | ||||||||||||
| recipientRegistrationNumber | string The registration number of the recipient (e.g., tax ID, company registration number). | ||||||||||||
| chargesType required | string (InternationalTransferChargesTypeEnum) Enum: "our" "sha" Specifies who will bear the transfer charges. | ||||||||||||
| bankName required | string The name of the recipient's bank. | ||||||||||||
| bankAddress required | string The address of the recipient's bank. | ||||||||||||
| bankCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the recipient's bank. | ||||||||||||
| bankBIC required | string The Bank Identifier Code (BIC) or SWIFT code of the recipient's bank. | ||||||||||||
| intermediaryBIC | string The BIC of the intermediary bank, if applicable. | ||||||||||||
| intermediaryName | string The name of the intermediary bank, if applicable. | ||||||||||||
| intermediaryAddress | string The address of the intermediary bank, if applicable. | ||||||||||||
| intermediaryAccountNumber | string The account number at the intermediary bank, if applicable. | ||||||||||||
| intermediaryCountry | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the intermediary bank, if applicable. | ||||||||||||
| createdAt | string <date-time> Timestamp when the transfer was created. |
[- {
- "status": "rejected",
- "reason": "insufficient_funds",
- "message": "Account has insufficient funds",
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "accountId": "234e5678-e89b-12d3-a456-426614174000",
- "amount": 100000,
- "fee": 500,
- "total": 100500,
- "currencyCode": "EUR",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "DE89370400440532013000",
- "recipientAccountType": "individual",
- "recipientAddress": "7th Floor, The Bower Warehouse, 211 Old Street, London EC1V 9NR",
- "recipientCountry": "GB",
- "recipientRegistrationNumber": "DE123456789",
- "chargesType": "sha",
- "bankName": "Deutsche Bank",
- "bankAddress": "Taunusanlage 12, 60325 Frankfurt am Main, Germany",
- "bankCountry": "DE",
- "bankBIC": "DEUTDEFFXXX",
- "intermediaryBIC": "BOFAUS3NXXX",
- "intermediaryName": "Bank of America",
- "intermediaryAddress": "100 West 33rd Street, New York, NY 10001, USA",
- "intermediaryAccountNumber": 6550123456,
- "intermediaryCountry": "US",
- "createdAt": "2024-09-16T14:32:00Z"
}
]This endpoint retrieves a list of international transfer fees for a specific account.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which international transfers will be fetched. |
| amount required | integer <int64> Example: amount=100000 The amount of the international transfer. |
| currencyCode required | string <= 3 characters Example: currencyCode=EUR The currency code of the international transfer. ISO 4217. |
| recipientAccountNumber required | string Example: recipientAccountNumber=DE89370400440532013000 The account number or IBAN of the recipient's account ( |
| recipientCountry required | string = 2 characters ^[A-Z]{2}$ Example: recipientCountry=DE The country of the recipient's account. ISO 3166-1 alpha-2. |
| chargesType required | string (InternationalTransferChargesTypeEnum) Enum: "our" "sha" Example: chargesType=sha Specifies who pays the transfer fees. 'our' means the sender pays all fees, 'sha' means fees are shared. |
| bankCountry required | string = 2 characters ^[A-Z]{2}$ Example: bankCountry=DE The country of the recipient's bank. ISO 3166-1 alpha-2. |
| intermediaryAccountNumber | string Example: intermediaryAccountNumber=6550123456 The account number at the intermediary bank, if applicable. |
| intermediaryCountry | string = 2 characters ^[A-Z]{2}$ Example: intermediaryCountry=US The country of the intermediary bank, if applicable. ISO 3166-1 alpha-2. |
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). |
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. |
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. |
| recipientAccountNumber required | string The account number or IBAN of the recipient's account. |
| recipientCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the recipient. |
| chargesType required | string (InternationalTransferChargesTypeEnum) Enum: "our" "sha" Specifies who will bear the transfer charges. |
| bankCountry required | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the recipient's bank. |
| intermediaryAccountNumber | string The account number at the intermediary bank, if applicable. |
| intermediaryCountry | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 country code of the intermediary bank, if applicable. |
{- "amount": 100000,
- "fee": 500,
- "currencyCode": "EUR",
- "recipientAccountNumber": "DE89370400440532013000",
- "recipientCountry": "DE",
- "chargesType": "sha",
- "bankCountry": "DE",
- "intermediaryAccountNumber": 6550123456,
- "intermediaryCountry": "US"
}This endpoint retrieves allowed countries for international transfer country fields.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account for which international transfer countries will be fetched. |
required | Array of objects (InternationalTransferCountriesByField) Allowed countries grouped by requested international transfer country field. |
{- "items": [
- {
- "field": "beneficiaryCountry",
- "countries": [
- {
- "code": "DE",
- "name": "Germany"
}
]
}
]
}Initiates a new UK transfer from the specified account. This endpoint supports both Faster Payments Service (FPS) and Clearing House Automated Payment System (CHAPS) transfers.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the source account |
| x-gemba-request-id required | string <uuid> <= 64 characters Request id. Will act as an idempotency key |
| amount required | integer <int64> The transfer amount in minor currency units (e.g., pence for GBP) |
| currencyCode required | string <= 3 characters The ISO 4217 currency code |
| description | string A description or reference for the transfer |
| recipientName | string The name of the transfer recipient |
| recipientAccountNumber required | string The recipient's account number |
| recipientAccountType required | string (RecipientAccountTypeEnum) Enum: "individual" "company" |
| type required | string (UKTransferTypeEnum) Enum: "fps" "chaps" The type of transfer, either 'fps' for Faster Payments Service or 'chaps' for CHAPS. |
| chapsPurpose | string Payment purpose for CHAPS payment type |
| chapsCategoryPurpose | string Payment category purpose for CHAPS payment type |
| sortCode required | string The sort code of the recipient's bank |
| bankName required | string The name of the recipient's bank |
| bankAddress required | string The address of the recipient's bank |
| status required | string Enum: "rejected" "canceled" Terminal failure or client cancellation. | ||||||||||||
| reason required | string (TransferFailureReasonEnum) Enum: "insufficient_funds" "wrong_payment_details" "rejected_by_bank" "canceled_by_client" "other" Machine-readable reason when a transfer or incoming payment ends in Present together with
Use | ||||||||||||
| message required | string Human-readable explanation. Safe for partner display. Never includes AML, sanctions, or investigation details. | ||||||||||||
| id required | string <uuid> Unique identifier for the transfer. | ||||||||||||
| accountId required | string <uuid> Unique identifier of the account from which the transfer is made. | ||||||||||||
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., pence for GBP). | ||||||||||||
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. | ||||||||||||
| total required | integer <int64> The total amount debited, including the transfer amount and fee. | ||||||||||||
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. | ||||||||||||
| description | string A description or reference for the transfer. | ||||||||||||
| recipientName | string The name of the transfer recipient. | ||||||||||||
| recipientAccountNumber required | string The account number of the recipient. | ||||||||||||
| recipientAccountType required | string (RecipientAccountTypeEnum) Enum: "individual" "company" | ||||||||||||
| type required | string (UKTransferTypeEnum) Enum: "fps" "chaps" The type of transfer, either 'fps' for Faster Payments Service or 'chaps' for CHAPS. | ||||||||||||
| chapsPurpose | string Payment purpose for CHAPS payment type | ||||||||||||
| chapsCategoryPurpose | string Payment category purpose for CHAPS payment type | ||||||||||||
| sortCode required | string The sort code of the recipient's bank. | ||||||||||||
| bankName required | string The name of the recipient's bank. | ||||||||||||
| bankAddress required | string The address of the recipient's bank. | ||||||||||||
| createdAt | string <date-time> Timestamp when the transfer was created. |
{- "amount": 10000,
- "currencyCode": "GBP",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "12345678",
- "recipientAccountType": "individual",
- "type": "fps",
- "chapsPurpose": "BKFE",
- "chapsCategoryPurpose": "BONU",
- "sortCode": "123456",
- "bankName": "Example Bank Ltd",
- "bankAddress": "1 Bank Street, London, UK"
}{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "status": "inprogress",
- "accountId": "987654321-e89b-12d3-a456-426614174000",
- "amount": 10000,
- "fee": 100,
- "total": 10100,
- "currencyCode": "GBP",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "12345678",
- "recipientAccountType": "individual",
- "type": "fps",
- "sortCode": "123456",
- "bankName": "Example Bank Ltd",
- "bankAddress": "1 Bank Street, London, UK",
- "createdAt": "2023-09-15T14:30:00Z"
}Retrieves a list of UK transfers for the specified account. This endpoint supports pagination.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account |
| from | string <date> The start date for the period (inclusive). Format: YYYY-MM-DD. |
| to | string <date> The end date for the statement period (inclusive). Format: YYYY-MM-DD. |
| offset | integer >= 0 Default: 0 Example: offset=0 The number of items to skip before starting to collect the result set |
| limit | integer [ 1 .. 100 ] Default: 10 Example: limit=10 The maximum number of items to return |
| status required | string Enum: "rejected" "canceled" Terminal failure or client cancellation. | ||||||||||||
| reason required | string (TransferFailureReasonEnum) Enum: "insufficient_funds" "wrong_payment_details" "rejected_by_bank" "canceled_by_client" "other" Machine-readable reason when a transfer or incoming payment ends in Present together with
Use | ||||||||||||
| message required | string Human-readable explanation. Safe for partner display. Never includes AML, sanctions, or investigation details. | ||||||||||||
| id required | string <uuid> Unique identifier for the transfer. | ||||||||||||
| accountId required | string <uuid> Unique identifier of the account from which the transfer is made. | ||||||||||||
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., pence for GBP). | ||||||||||||
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. | ||||||||||||
| total required | integer <int64> The total amount debited, including the transfer amount and fee. | ||||||||||||
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. | ||||||||||||
| description | string A description or reference for the transfer. | ||||||||||||
| recipientName | string The name of the transfer recipient. | ||||||||||||
| recipientAccountNumber required | string The account number of the recipient. | ||||||||||||
| recipientAccountType required | string (RecipientAccountTypeEnum) Enum: "individual" "company" | ||||||||||||
| type required | string (UKTransferTypeEnum) Enum: "fps" "chaps" The type of transfer, either 'fps' for Faster Payments Service or 'chaps' for CHAPS. | ||||||||||||
| chapsPurpose | string Payment purpose for CHAPS payment type | ||||||||||||
| chapsCategoryPurpose | string Payment category purpose for CHAPS payment type | ||||||||||||
| sortCode required | string The sort code of the recipient's bank. | ||||||||||||
| bankName required | string The name of the recipient's bank. | ||||||||||||
| bankAddress required | string The address of the recipient's bank. | ||||||||||||
| createdAt | string <date-time> Timestamp when the transfer was created. |
[- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "status": "done",
- "accountId": "987654321-e89b-12d3-a456-426614174000",
- "amount": 10000,
- "fee": 100,
- "total": 10100,
- "currencyCode": "GBP",
- "description": "Monthly rent payment",
- "recipientName": "John Doe",
- "recipientAccountNumber": "12345678",
- "recipientAccountType": "individual",
- "type": "fps",
- "sortCode": "123456",
- "bankName": "Example Bank Ltd",
- "bankAddress": "1 Bank Street, London, UK",
- "createdAt": "2023-09-15T14:30:00Z"
}, - {
- "id": "234567890-e89b-12d3-a456-426614174000",
- "status": "inprogress",
- "accountId": "987654321-e89b-12d3-a456-426614174000",
- "amount": 50000,
- "fee": 500,
- "total": 50500,
- "currencyCode": "GBP",
- "description": "Business invoice payment",
- "recipientName": "ABC Company Ltd",
- "recipientAccountNumber": "87654321",
- "recipientAccountType": "company",
- "type": "chaps",
- "sortCode": "654321",
- "bankName": "Business Bank PLC",
- "bankAddress": "10 Corporate Avenue, Manchester, UK",
- "createdAt": "2023-09-15T14:30:00Z"
}
]Retrieves a list of UK transfers fees for the specified account.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account |
| amount required | integer <int64> Example: amount=100000 Amount of the internal transfer |
| currencyCode required | string <= 3 characters Example: currencyCode=USD Currency code of the internal transfer. ISO 4217 3-letter currency code. |
| recipientAccountNumber required | string Recipient's account number |
| recipientCountry required | string = 2 characters ^[A-Z]{2}$ Example: recipientCountry=DE The country of the recipient's account. ISO 3166-1 alpha-2. |
| type required | string (UKTransferTypeEnum) Enum: "fps" "chaps" Example: type=fps Type of the transfer |
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., pence for GBP). |
| fee required | integer <int64> The fee charged for the transfer, in the smallest unit of the currency. |
| currencyCode required | string <= 3 characters The ISO 4217 currency code for the transfer. |
| recipientAccountNumber required | string The account number of the recipient. |
| type required | string (UKTransferTypeEnum) Enum: "fps" "chaps" The type of transfer, either 'fps' for Faster Payments Service or 'chaps' for CHAPS. |
| sortCode required | string The sort code of the recipient's bank. |
[- {
- "amount": 10000,
- "fee": 100,
- "currencyCode": "GBP",
- "recipientAccountNumber": "12345678",
- "type": "fps"
}
]Initiates a number of transfers from the specified account in one bulk batch.
Single transfer (/transfers/uk, /transfers/international, /transfers/internal) |
Bulk (/transfers/bulk) |
|
|---|---|---|
| Request body | One transfer object (UKTransfer / InternationalTransfer / InternalTransfer field set) |
{ "payments": [ BulkPayment, ... ] } — row schema uses different field names |
| Success response | Full transfer resource (id, status, amounts, beneficiary fields, …) | { "bulkPaymentId": "<uuid>" } only |
| Status polling | GET list/filter on transfer endpoints, or webhooks | GET .../transfers/bulk/{bulkId} returns { status, count } |
| Webhooks | transfer.outgoing.changed with the single-transfer payload |
No bulk-aggregate webhook. Each spawned child transfer emits transfer.outgoing.changed with the same UK/international transfer payload as a single payment (including onhold and reason/message) |
OTP confirm the bulk via /transfers/bulk/{bulkId}/otp/* before processing starts.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the source account |
required | Array of IbanRouting (object) or UkRouting (object) (BulkPayment) non-empty Payment rows to include in the bulk. Each item is a BulkPayment, not a UKTransfer/InternationalTransfer. |
| bulkPaymentId required | string <uuid> Identifier of the created bulk batch. Use as |
{- "payments": [
- {
- "line": 1,
- "sortCode": "090127",
- "accountNumber": "80687896",
- "beneficiary": "Karl Frost",
- "amount": 77076,
- "currency": "GBP",
- "info": "GREEN GRP WAGES"
}, - {
- "line": 2,
- "IBAN": "DE89370400440532013000",
- "beneficiary": "Acme GmbH",
- "amount": 250000,
- "currency": "EUR",
- "country": "DE",
- "bic": "DEUTDEFFXXX",
- "bank": "Deutsche Bank",
- "bankCountry": "DE",
- "charges": "sha",
- "info": "Invoice 1042"
}
]
}{- "bulkPaymentId": "666e4567-e89b-13d3-a456-426614174000"
}Retrieves the aggregate status of a bulk payment batch.
Returns { status, count } only. It does not return an array of individual transfer
objects, and it does not include per-payment reason / message fields used on
single-transfer resources.
For per-payment outcomes after the bulk has spawned child transfers, use the standard
transfer GET endpoints and/or transfer.outgoing.changed webhooks (same payload shapes as
single UK/international transfers).
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account |
| bulkId required | string <uuid> Example: 666e4567-e89b-13d3-a456-426614174000 The unique identifier of the bulk ( |
| status required | string (BulkStatusEnum) Enum: "inprogress" "done" "error" "sign_required" Aggregate status of a bulk payment batch (container document), not an individual transfer.
By design this is a subset of single-transfer | ||||||||||
| count required | integer Number of payment rows in the bulk. |
{- "status": "sign_required",
- "count": 5
}This endpoint send the OTP for a bulk of transfers.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which transfers will be fetched. |
| bulkId required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 The unique identifier (GUID) for the bulk to be confirmed. |
| id required | string <uuid> The unique identifier for the transfer/bulk of transfers confirmation. |
| type required | string Default: "sms" Enum: "sms" "email" The type of transfer confirmation. |
| code | string or null The confirmation code. Sandbox only |
| status required | string Enum: "confirmed" "sent" "expired" The status of the internal transfer confirmation |
| expiresAt required | string <date-time> The timestamp when the transfer was confirmed. |
{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "type": "sms",
- "status": "sent",
- "expiresAt": "2024-09-16T14:32:00Z"
}This endpoint initiates a processing of the bulk. This require specifying the recipient's account details, the amount, and the currency code.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) for the account from which the bulk of transfers will be initiated. |
| bulkId required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 The unique identifier (GUID) for the bulk to be confirmed. |
| code required | string The OTP to confirm the bulk. |
| id required | string <uuid> The unique identifier for the transfer/bulk of transfers confirmation. |
| type required | string Default: "sms" Enum: "sms" "email" The type of transfer confirmation. |
| code | string or null The confirmation code. Sandbox only |
| status required | string Enum: "confirmed" "sent" "expired" The status of the internal transfer confirmation |
| expiresAt required | string <date-time> The timestamp when the transfer was confirmed. |
{- "code": "123456"
}{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "type": "sms",
- "status": "confirmed",
- "expiresAt": "2024-09-16T14:32:00Z"
}Uploads a file for the request for a payment.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account |
| transferId required | string <uuid> Example: 666e4567-e89b-13d3-a456-426614174000 The unique identifier (GUID) of the transaction |
| file required | string <binary> The file to upload |
| uploadedFileId | string <uuid> |
"666e4567-e89b-13d3-a456-426614174000"Retrieves a file attached for the transaction.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account |
| transferId required | string <uuid> Example: 666e4567-e89b-13d3-a456-426614174000 The unique identifier (GUID) of the transaction |
| data required | string <byte> Base64 encoded file data |
| type required | string |
| name required | string Name of the file |
| size required | integer <int64> Size of the file in bytes |
{- "data": "string",
- "type": "filetype/type",
- "name": "filename.pdf",
- "size": 2000
}Send a payout to a debit card or a credit card. A client account funds the payout.
All card-payout endpoints live under the /card-payouts path prefix.
A payout batch holds payout items. One item pays one card.
tokenizeCards is the only endpoint
that accepts card data.Cancel a batch before you sign it. After you sign it, you cannot cancel it.
listPayouts returns every payout batch for the client. This includes batches that
this API did not create. Reconcile against the list response, not against your own
record of the batches you created. A batch can also change state without your
action: another user of your client may sign or cancel it, and an unsigned batch
expires at the end of its London day.
The same bearer access token as the rest of this API — see Authentication.
The access token carries the caller's identity. This API takes the identity from the
token only, and it ignores every identity header in the request. clientId in the
path must match the client claim in the token. The API rejects a mismatch with 403.
Requests are rate limited per API key. Each operation documents the 429 response.
Every operation needs one permission. The API rejects a token without it, and it
answers 403. Each operation names its permission in its description.
card-payouts:read — every read operation, including getCardToken.card-payouts:tokenize — tokenizeCards only. This is the permission that lets a
key submit card numbers.card-payouts:write — createPayout, signPayout and cancelPayout.Reading a card token back needs card-payouts:read, not card-payouts:tokenize.
These permissions reach cardholder data, so a key that holds one expires within 90 days. Plan to rotate the key.
tokenizeCards is the only endpoint that accepts a card number. The response
contains card tokens and no card data.
A card token is opaque. Create every payout from a token. You never send the card number a second time.
Store the token. No endpoint lists the tokens you hold, and getCardToken returns a
card's details only for a token you pass to it, so a token you lose cannot be
recovered. Tokenize the card again if you lose it.
A token works only for the client that created it. A token expires when the card expires.
tokenizeCards validates the card and answers in the same request.
You post raw card numbers to this endpoint, so your own systems are in PCI DSS SAQ D scope.
Creating a payout batch does not execute it. createPayout returns the batch in
awaitingSignature: every item validated, fees and FX quoted, and no funds moved.
Executing it is a separate, explicit call: signPayout. Its authorisation is an
HTTP Message Signature (RFC 9421) made
with a signing key registered for the API key. The bearer token proves who is
calling. The signature proves that the holder of the registered private key
authorised this specific batch. See "Rollout" below for what applies today. There is
no one-time-code flow on this API.
The covered components, parameters and algorithms are specified on signPayout, next
to the Signature-Input and Signature header parameters that carry them.
Sign a batch on the London calendar day it was created. Cancel an unsigned batch with
cancelPayout. An unsigned batch expires on its own at the end of that day. Signing
is also refused on the 1st of each month from 00:00 to 01:30, London time, and in the
last 60 minutes before midnight, London time. These windows apply at signing, not at
creation, so a batch created in the last 60 minutes of the London day can never be
signed: it expires at midnight. signPayout lists the codes and what to do for each.
Signature verification is not enabled on the sign endpoint today. Until it is, the
Signature-Input and Signature fields are optional. If sent, they are accepted
without being verified, and a sign request is authorised by the bearer token's
card-payouts:write permission alone. Sign requests from the start so that the
switch needs no change on your side.
Enabling verification is a breaking change for unsigned callers. It will be announced
in advance to every client holding a card-payouts:write key, together with the
key-registration process. From the announced date the two fields are required and an
unsigned request is rejected with 403 SIGNATURE_MISSING. To register a signing key
today, contact Gemba developer support.
Error bodies carry an optional machine-readable code alongside the message. The
ApiError schema lists every code in use with its status and meaning. Each operation
lists the codes it can return.
This API uses camelCase, matching the rest of the public Gemba API.
ISO 4217 currency codes a payout item can be paid in.
Requires card-payouts:read.
Error codes: PRODUCT_NOT_AVAILABLE.
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| count required | integer >= 0 Number of entries in |
| results required | Array of strings (CurrencyCode) [ items^[A-Z]{3}$ ] |
{- "count": 3,
- "results": [
- "GBP",
- "EUR",
- "USD"
]
}Accounts belonging to the client that can fund a payout batch, with their available balances.
Requires card-payouts:read.
Error codes: PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| count required | integer >= 0 |
required | Array of objects (CardPayoutAccount) |
{- "count": 2,
- "results": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "name": "Operating account",
- "balance": {
- "value": "156.50",
- "currency": "GBP"
}
}
]
}Exchange one or more card numbers for opaque card tokens. This is the only endpoint that accepts card data. Results are per card: a failure on one card does not fail the request, because tokenization moves no money.
Each card first passes a check-digit and expiry check. You can run the same check before you send the request. A card that passes it can still be rejected, and its result is TOKENIZATION_FAILED. The endpoint answers in the same request.
Do not send a card security code. A payout does not need one, and this API does not accept one.
The submitted card value is never echoed back, in a result or in an error.
Requires card-payouts:tokenize.
Error codes: TOO_MANY_ITEMS, PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
required | Array of objects (CardToTokenize) [ 1 .. 500 ] items Cards to tokenize. Every entry receives its own result — and its own token — keyed by |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| count required | integer >= 1 Cards submitted. Always equals the length of |
| succeeded required | integer >= 0 |
| failed required | integer >= 0 |
required | Array of any (CardTokenResult) One entry per submitted card, in submission order. |
{- "cards": [
- {
- "reference": "row-1",
- "card": "4111111111111111",
- "cardHolderName": "Jane Doe",
- "expirationMonth": "12",
- "expirationYear": "2028"
}
]
}{- "count": 3,
- "succeeded": 2,
- "failed": 1,
- "results": [
- {
- "reference": "row-1",
- "status": "tokenized",
- "cardTokenId": "string"
}
]
}Card metadata for a token. Use this when the card needs to be identified to a user. The tokenization response deliberately returns no card data.
Requires card-payouts:read.
Error codes: PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| cardTokenId required | string (CardToken) [ 1 .. 2048 ] characters ^[A-Za-z0-9_-]+$ Example: pDW3swQ0uQk Card token returned by |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| cardTokenId required | string [ 1 .. 2048 ] characters ^[A-Za-z0-9_-]+$ The token exactly as supplied in the path. |
| cardLast4 required | string (CardLast4) ^[0-9]{4}$ Last 4 digits of card number |
| cardHolderName required | string <= 70 characters |
| cardBrand | string or null Enum: "VISA" "MASTERCARD" "AMEX" "DINERS" null Null until the first payout to this card is processed. The brand is not known at tokenization. |
| status required | string Enum: "active" "expired"
|
| expiresAt required | string <date-time> When this token stops being usable for new payouts. |
| createdAt required | string <date-time> (Timestamp) |
{- "cardTokenId": "string",
- "cardLast4": "1234",
- "cardHolderName": "Jane Doe",
- "cardBrand": "VISA",
- "status": "active",
- "expiresAt": "2025-01-04T12:00:00Z",
- "createdAt": "2025-01-04T12:00:00Z"
}Creates a payout batch from card tokens. The service validates every item and quotes fees and FX. Creating a batch moves no funds. The batch is returned in awaitingSignature and executes only once you sign it with signPayout. You can cancel an unsigned batch. An unsigned batch expires at the end of the London day it was created on, and then reads cancelled.
Do not create a batch in the last 60 minutes of the London day. You cannot sign it, and it expires at midnight.
Batch creation is all-or-nothing: if any item is invalid the whole request fails. Per-item outcomes appear later, once processing completes, on listPayoutItems.
The requestId in the request body is the idempotency key. Replaying a requestId that already created a batch returns 201 with that batch's current state rather than creating a second one, so a lost response can be recovered safely. A retry after a 503 is safe for the same reason. A requestId whose creation failed is burnt: it answers 409 with code REQUEST_PREVIOUSLY_FAILED, and a corrected request needs a new requestId.
Requires card-payouts:write.
Error codes: TOO_MANY_ITEMS, UNSUPPORTED_CURRENCY, INVALID_MONEY_SCALE, CARD_TOKEN_EXPIRED, TOKEN_INVALID, REQUEST_PREVIOUSLY_FAILED, DUPLICATE_PAYOUT_REQUEST, PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| accountId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 123e4567-e89b-12d3-a456-426614174000 The account funding the payout batch. Must belong to |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| requestId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Idempotency key you generate. This is not the |
required | Array of objects (PayoutRequestItem) [ 1 .. 500 ] items |
{- "requestId": "550e8400-e29b-41d4-a716-446655440000",
- "items": [
- {
- "reference": "row-1",
- "cardTokenId": "string",
- "amount": {
- "value": "100.00",
- "currency": "GBP"
}
}
]
}{- "payoutBatchId": "550e8400-e29b-41d4-a716-446655440000",
- "status": "awaitingSignature",
- "count": 2,
- "totalAmount": {
- "value": "200.00",
- "currency": "GBP"
}, - "totalFee": {
- "value": "5.00",
- "currency": "GBP"
}, - "totalCharged": {
- "value": "205.00",
- "currency": "GBP"
}, - "results": [
- {
- "reference": "row-1",
- "payoutItemId": "550e8400-e29b-41d4-a716-446655440000",
- "status": "completed",
- "amount": {
- "value": "102.50",
- "currency": "GBP"
}, - "charged": {
- "value": "102.50",
- "currency": "GBP"
}, - "fee": {
- "value": "2.50",
- "currency": "GBP"
}
}
]
}Every payout batch belonging to the client, newest first. The list includes batches this API did not create, whichever user or key created them. Reconcile against this list, not against your own record of the batches you created.
Paginated: at most limit batches per page. Follow nextCursor until it is null.
Requires card-payouts:read.
Error codes: PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| limit | integer [ 1 .. 200 ] Default: 50 Maximum batches to return in one page. |
| cursor | string <= 128 characters Opaque cursor from a previous response's |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| count required | integer >= 0 Number of entries in this page's |
required | Array of objects (PayoutBatchSummary) |
| nextCursor required | string or null Cursor for the next page — pass as |
{- "count": 12,
- "results": [
- {
- "payoutBatchId": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "550e8400-e29b-41d4-a716-446655440000",
- "status": "processing",
- "count": 2,
- "totalAmount": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalFee": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalCharged": {
- "value": "102.50",
- "currency": "GBP"
}, - "signedAt": "2025-01-04T12:05:00Z",
- "createdAt": "2025-01-04T12:00:00Z",
- "updatedAt": "2025-01-04T12:00:00Z"
}
], - "nextCursor": "string"
}One payout batch, with its status and totals.
Requires card-payouts:read.
Error codes: PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 789e0123-e89b-12d3-a456-426614174000 Payout batch id (UUID). |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| accountId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... The account that funds the payout batch. |
| status required | string (PayoutStatus) Enum: "awaitingSignature" "processing" "completed" "partiallyCompleted" "failed" "cancelled" Status of a payout batch:
|
| count required | integer >= 1 |
object or null Sum of item amounts, settled in GBP. Null until every item is priced. | |
object or null Sum of all fees. Settled in GBP, so | |
object or null Total debited from the funding account. Settled in GBP, so | |
| signedAt required | string or null <date-time> When the batch was signed. Null while it is |
| createdAt required | string <date-time> (Timestamp) |
| updatedAt required | string <date-time> (Timestamp) |
{- "payoutBatchId": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "550e8400-e29b-41d4-a716-446655440000",
- "status": "processing",
- "count": 2,
- "totalAmount": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalFee": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalCharged": {
- "value": "102.50",
- "currency": "GBP"
}, - "signedAt": "2025-01-04T12:05:00Z",
- "createdAt": "2025-01-04T12:00:00Z",
- "updatedAt": "2025-01-04T12:00:00Z"
}Per-item outcomes for a payout batch. One item pays one card. This is where processing failures surface: a batch can complete with some items paid and others declined.
Requires card-payouts:read.
Error codes: PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 789e0123-e89b-12d3-a456-426614174000 Payout batch id (UUID). |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| count required | integer >= 0 |
required | Array of objects (PayoutItem) |
{- "count": 2,
- "results": [
- {
- "payoutItemId": "550e8400-e29b-41d4-a716-446655440000",
- "reference": "row-1",
- "cardLast4": "1234",
- "cardHolderName": "Jane Doe",
- "amount": {
- "value": "102.50",
- "currency": "GBP"
}, - "charged": {
- "value": "102.50",
- "currency": "GBP"
}, - "fee": {
- "value": "102.50",
- "currency": "GBP"
}, - "status": "completed",
- "failureReason": "cardDeclined",
- "createdAt": "2025-01-04T12:00:00Z",
- "updatedAt": "2025-01-04T12:00:00Z"
}
]
}Authorises the batch and starts processing in one call. The authorisation is an HTTP Message Signature (RFC 9421) in the Signature-Input and Signature fields, made with a signing key registered for the API key. Exactly one signature, under any label. There is no request body, so no Content-Digest is involved.
@method, @authority, @path and authorization. Covering authorization binds the signature to the access token it was made with. Further components may be covered.created and expires as Unix seconds, with expires at most 300 seconds after created and created no more than 60 seconds in the future. nonce, unique per request, at least 16 random bytes encoded, rejected if reused while its signature could still be valid. keyid, the identifier issued when the key was registered. tag="card-payouts-sign". alg is optional and, when present, must match the registered key's algorithm.ecdsa-p256-sha256, ed25519 or rsa-pss-sha512, fixed per key at registration.Rollout — signatures are not verified yet. Until signature verification is enabled on this endpoint, the two fields are optional. If sent, they are accepted without being verified. The request is authorised by the bearer token's card-payouts:write permission alone. Enabling verification will be announced in advance. From that date the fields are required and an unsigned request is rejected with 403 SIGNATURE_MISSING. Sign requests from the start so the switch needs no change on your side.
On success the batch moves to processing and funds are reserved on the funding account. 202 means accepted, not paid. Poll getPayout and listPayoutItems for the outcome.
Signing is refused in three cases.
| Condition | When | Code | What to do |
|---|---|---|---|
| Monthly reconciliation | The 1st of each month, 00:00 to 01:30, Europe/London | PAYOUT_MONTHLY_CUTOFF |
Call this endpoint again after the window. |
| The batch is from an earlier London day | After the London day of creation | PAYOUT_EXPIRED |
Create a new batch. FX rates are re-quoted daily. |
| End-of-day buffer | The last 60 minutes before midnight, Europe/London | PAYOUT_EOD_CUTOFF |
Create a new batch on the next London day. A batch created inside the buffer can never be signed. |
The service checks the conditions in the order of the table: the monthly window first, then expiry, then the end-of-day buffer. So on the 1st before 01:30, a batch from an earlier day answers PAYOUT_MONTHLY_CUTOFF, not PAYOUT_EXPIRED. Call again after the window to learn that it has expired. The two times are configuration, and the error message carries the live value.
The batch is unchanged after a refusal. Call this endpoint again with a fresh signature once the window has passed. A successful call leaves no intermediate state: the 202 body already reads processing. A batch that another user of your client signed but whose processing a window refused also reads processing, with signedAt set. Calling this endpoint on it does not sign it a second time. The service retries the processing.
Once verification is enabled, a signature that is missing, does not verify, is outside its validity window, reuses a nonce or names an unregistered key answers 403 with a SIGNATURE_* or SIGNING_KEY_UNKNOWN code and an Accept-Signature field. Nothing is signed or processed.
Rate limited more tightly than the read endpoints.
Requires card-payouts:write.
Error codes: PAYOUT_EXPIRED, PAYOUT_MONTHLY_CUTOFF, PAYOUT_EOD_CUTOFF, BATCH_NOT_SIGNABLE, SIGNATURE_MISSING, SIGNATURE_INVALID, SIGNATURE_EXPIRED, SIGNATURE_REPLAYED, SIGNING_KEY_UNKNOWN, PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 789e0123-e89b-12d3-a456-426614174000 Payout batch id (UUID). |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| signature-input | string Example: sig1=("@method" "@authority" "@path" "authorization");created=1735992000;expires=1735992300;nonce="hzs3xM8k1dPq2wR9fT0bVA";keyid="key_01JGX6Q5Z9V7";tag="card-payouts-sign" RFC 9421 Optional while signature verification is not enabled. See the rollout note on |
| signature | string Example: sig1=:MEUCIQDf3xO0eSAo2Qb1vW5hZ2lJ9c4dVq7K8rS6tU3pY1mNwAIgL2kV8jH5fG7dC9bA1eZ3xR6tQ4wS0uP2oN7mK5jI8hG=: RFC 9421 Optional while signature verification is not enabled. See the rollout note on |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| accountId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... The account that funds the payout batch. |
| status required | string (PayoutStatus) Enum: "awaitingSignature" "processing" "completed" "partiallyCompleted" "failed" "cancelled" Status of a payout batch:
|
| count required | integer >= 1 |
object or null Sum of item amounts, settled in GBP. Null until every item is priced. | |
object or null Sum of all fees. Settled in GBP, so | |
object or null Total debited from the funding account. Settled in GBP, so | |
| signedAt required | string or null <date-time> When the batch was signed. Null while it is |
| createdAt required | string <date-time> (Timestamp) |
| updatedAt required | string <date-time> (Timestamp) |
{- "payoutBatchId": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "550e8400-e29b-41d4-a716-446655440000",
- "status": "processing",
- "count": 2,
- "totalAmount": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalFee": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalCharged": {
- "value": "102.50",
- "currency": "GBP"
}, - "signedAt": "2025-01-04T12:05:00Z",
- "createdAt": "2025-01-04T12:00:00Z",
- "updatedAt": "2025-01-04T12:00:00Z"
}Cancels a batch that has not been signed. Every item becomes failed with failureReason cancelled. No funds moved. A signed batch cannot be cancelled through this API. Once signed, a batch executes.
Requires card-payouts:write.
Error codes: BATCH_NOT_CANCELLABLE, FUNDS_ALREADY_MOVED, PRODUCT_NOT_AVAILABLE.
| clientId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 550e8400-e29b-41d4-a716-446655440000 The client the request acts for. Must match the client claim in the access token. |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: 789e0123-e89b-12d3-a456-426614174000 Payout batch id (UUID). |
| x-gemba-request-id | string Example: a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7 Correlation id for this request. Send a UUID. The API generates one when you omit the header. The API rejects a value that is not a UUID and generates a fresh id instead. It returns no error, so send a UUID or read the id from the response. The API returns the id it used in the This is not the |
| x-gemba-request-id | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Example: "550e8400-e29b-41d4-a716-446655440000" The correlation id the API used for this request: the |
| payoutBatchId required | string <uuid> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| accountId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... The account that funds the payout batch. |
| status required | string (PayoutStatus) Enum: "awaitingSignature" "processing" "completed" "partiallyCompleted" "failed" "cancelled" Status of a payout batch:
|
| count required | integer >= 1 |
object or null Sum of item amounts, settled in GBP. Null until every item is priced. | |
object or null Sum of all fees. Settled in GBP, so | |
object or null Total debited from the funding account. Settled in GBP, so | |
| signedAt required | string or null <date-time> When the batch was signed. Null while it is |
| createdAt required | string <date-time> (Timestamp) |
| updatedAt required | string <date-time> (Timestamp) |
{- "payoutBatchId": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "550e8400-e29b-41d4-a716-446655440000",
- "status": "processing",
- "count": 2,
- "totalAmount": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalFee": {
- "value": "102.50",
- "currency": "GBP"
}, - "totalCharged": {
- "value": "102.50",
- "currency": "GBP"
}, - "signedAt": "2025-01-04T12:05:00Z",
- "createdAt": "2025-01-04T12:00:00Z",
- "updatedAt": "2025-01-04T12:00:00Z"
}Endpoints related to foreign exchange (FX) trades, including getting quotes, placing orders, and retrieving currency pairs.
Create a quote for a foreign exchange transaction.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the source account |
| amount required | integer <int64> The transfer amount in the smallest unit of the currency (e.g., cents for USD). |
| fixedSide required | string (FxFixedSideEnum) Enum: "sell" "buy" The side of the trade to be fixed. This can either be buy or sell. |
| sellCurrency required | string The currency code of the currency being sold. |
| buyCurrency required | string The currency code of the currency being bought. |
| id required | string <uuid> The unique identifier for the foreign exchange quote. |
| amount required | integer <int64> The amount of the foreign exchange transaction. |
| fixedSide required | string (FxFixedSideEnum) Enum: "sell" "buy" The side of the trade to be fixed. This can either be buy or sell. |
| sellCurrency required | string The currency code of the currency being sold. |
| sellAmount required | integer <int64> The sell amount of the foreign exchange transaction. |
| buyCurrency required | string The currency code of the currency being bought. |
| buyAmount required | integer <int64> The buy amount of the foreign exchange transaction. |
| exchangeRate required | integer <int64> The exchange rate encoded as an integer. Divide by 10^exchangeRateExponent to get the actual rate. |
| exchangeRateExponent required | integer Default: 4 The number of decimal places in the exchangeRate property |
| expiresAt required | string <date-time> The date and time at which the quote expires. |
{- "amount": 100000,
- "fixedSide": "sell",
- "sellCurrency": "EUR",
- "buyCurrency": "USD"
}{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "amount": 100000,
- "fixedSide": "sell",
- "sellCurrency": "EUR",
- "sellAmount": 100000,
- "buyCurrency": "USD",
- "buyAmount": 100000,
- "exchangeRate": 12000,
- "exchangeRateExponent": 4,
- "expiresAt": "2024-09-16T14:32:00Z"
}Execute a foreign exchange transaction quote.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the source account |
| quoteId required | string <uuid> The unique identifier for the quote. |
| action required | string Value: "execute" |
| id required | string <uuid> The unique identifier for the foreign exchange order. | ||||||||||||
| status required | string (FxStatusEnum) Enum: "pending" "executing" "settled" "expired" "cancelled" The status of the foreign exchange order.
| ||||||||||||
| accountId required | string <uuid> The foreign exchange Account | ||||||||||||
| fixedSide required | string (FxFixedSideEnum) Enum: "sell" "buy" The side of the trade to be fixed. This can either be buy or sell. | ||||||||||||
| sellCurrency required | string The currency code of the currency being sold. | ||||||||||||
| sellAmount required | integer <int64> The sell amount of the foreign exchange transaction. | ||||||||||||
| buyCurrency required | string The currency code of the currency being bought. | ||||||||||||
| buyAmount required | integer <int64> The buy amount of the foreign exchange transaction. | ||||||||||||
| exchangeRate required | integer <int64> The exchange rate encoded as an integer. Divide by 10^exchangeRateExponent to get the actual rate. | ||||||||||||
| exchangeRateExponent required | integer Default: 4 The number of decimal places in the exchangeRate property | ||||||||||||
| createdAt required | string <date-time> Timestamp when the order was created. |
{- "quoteId": "826e5192-f8c6-4e24-aab3-3910e46c52b7",
- "action": "execute"
}{- "id": "9545b658-6eca-1804-d325-79fbd54802c9",
- "status": "executing",
- "accountId": "702c2905-bd91-67e4-2fa8-c3d6917bac8f",
- "fixedSide": "sell",
- "sellCurrency": "USD",
- "sellAmount": 2500,
- "buyCurrency": "EUR",
- "buyAmount": 2268,
- "exchangeRate": 9070,
- "exchangeRateExponent": 4,
- "createdAt": "2026-01-29T17:00:52.92Z"
}This endpoint retrieves a list of foreign exchange orders for a specific account. The
result can be paginated using offset and limit query parameters.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the source account |
| from | string <date> The start date for the period (inclusive). Format: YYYY-MM-DD. |
| to | string <date> The end date for the order list period (inclusive). Format: YYYY-MM-DD. |
| offset | integer >= 0 Default: 0 The number of records to skip from the beginning of the result set. Default is 0. |
| limit | integer [ 1 .. 100 ] Default: 10 Example: limit=10 The maximum number of records to return. Default is 10. |
| id required | string <uuid> The unique identifier for the foreign exchange order. | ||||||||||||
| status required | string (FxStatusEnum) Enum: "pending" "executing" "settled" "expired" "cancelled" The status of the foreign exchange order.
| ||||||||||||
| accountId required | string <uuid> The foreign exchange Account | ||||||||||||
| fixedSide required | string (FxFixedSideEnum) Enum: "sell" "buy" The side of the trade to be fixed. This can either be buy or sell. | ||||||||||||
| sellCurrency required | string The currency code of the currency being sold. | ||||||||||||
| sellAmount required | integer <int64> The sell amount of the foreign exchange transaction. | ||||||||||||
| buyCurrency required | string The currency code of the currency being bought. | ||||||||||||
| buyAmount required | integer <int64> The buy amount of the foreign exchange transaction. | ||||||||||||
| exchangeRate required | integer <int64> The exchange rate encoded as an integer. Divide by 10^exchangeRateExponent to get the actual rate. | ||||||||||||
| exchangeRateExponent required | integer Default: 4 The number of decimal places in the exchangeRate property | ||||||||||||
| createdAt required | string <date-time> Timestamp when the order was created. |
[- {
- "id": "81d1f136-b548-d327-160f-e9ac387db4e2",
- "status": "executing",
- "accountId": "702c2905-bd91-67e4-2fa8-c3d6917bac8f",
- "fixedSide": "sell",
- "sellCurrency": "USD",
- "sellAmount": 2500,
- "buyCurrency": "EUR",
- "buyAmount": 2268,
- "exchangeRate": 9070,
- "exchangeRateExponent": 4,
- "createdAt": "2026-01-30T07:08:38.387Z"
}, - {
- "id": "52f262f1-d4c0-eab5-7819-63f283d1045f",
- "status": "executing",
- "accountId": "702c2905-bd91-67e4-2fa8-c3d6917bac8f",
- "fixedSide": "sell",
- "sellCurrency": "EUR",
- "sellAmount": 2500,
- "buyCurrency": "USD",
- "buyAmount": 2664,
- "exchangeRate": 10653,
- "exchangeRateExponent": 4,
- "createdAt": "2026-01-30T07:11:14.597Z"
}
]Retrieves a list of available foreign exchange currency pairs for the specified account, including minimum and maximum transaction amounts, exchange rates, and cut-off times for same-day execution.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| accountId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier (GUID) of the account |
required | Array of objects (FxCurrencyPair) List of available currency pairs for FX trading |
{- "pairs": [
- {
- "sellCurrency": "EUR",
- "buyCurrency": "USD",
- "minAmount": 2500,
- "maxAmount": 10000000,
- "cutOffTime": "15:00:00",
- "isAvailable": true
}, - {
- "sellCurrency": "USD",
- "buyCurrency": "EUR",
- "minAmount": 2500,
- "maxAmount": 10000000,
- "cutOffTime": "15:00:00",
- "isAvailable": true
}, - {
- "sellCurrency": "GBP",
- "buyCurrency": "EUR",
- "minAmount": 2500,
- "maxAmount": 10000000,
- "cutOffTime": "15:00:00",
- "isAvailable": true
}, - {
- "sellCurrency": "EUR",
- "buyCurrency": "GBP",
- "minAmount": 2500,
- "maxAmount": 10000000,
- "cutOffTime": "15:00:00",
- "isAvailable": true
}
]
}Webhook events related to foreign exchange (FX) orders, including fx.order.changed notifications.
Manage secure communication via messages in threads, which allows users to exchange information within the API.
Retrieves a list of all message threads. This endpoint supports pagination.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| offset | integer >= 0 Default: 0 Example: offset=0 The number of items to skip before starting to collect the result set |
| limit | integer [ 1 .. 100 ] Default: 10 Example: limit=10 The maximum number of items to return |
| id required | string <uuid> Unique identifier for the thread. |
| clientId required | string <uuid> Unique identifier for the client associated with the thread. |
| subject | string [ 1 .. 255 ] characters Subject of the thread. |
| createdAt | string <date-time> Timestamp when the thread was created. |
| updatedAt | string <date-time> Timestamp when the thread was last updated. |
| deletedAt | string or null <date-time> Timestamp when the thread was deleted. Null if not deleted. |
[- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "clientId": "123e4567-e89b-12d3-a456-426614174001",
- "subject": "Meeting Request: Project Kickoff",
- "createdAt": "2024-09-16T14:32:00Z",
- "updatedAt": "2024-09-17T09:21:00Z",
- "deletedAt": null
}, - {
- "id": "234e5678-e89b-12d3-a456-426614174000",
- "clientId": "345e6789-e89b-12d3-a456-426614174001",
- "subject": "Follow-up on Contract Terms",
- "createdAt": "2024-09-18T10:15:00Z",
- "updatedAt": "2024-09-18T10:15:00Z",
- "deletedAt": null
}
]Creates a new message thread with an initial message. This endpoint allows clients to start a new conversation thread.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| subject required | string [ 1 .. 255 ] characters Subject of the new thread |
| text required | string [ 1 .. 255 ] characters Text of the first message in the thread |
| id required | string <uuid> Unique identifier for the thread. |
| clientId required | string <uuid> Unique identifier for the client associated with the thread. |
| subject | string [ 1 .. 255 ] characters Subject of the thread. |
| createdAt | string <date-time> Timestamp when the thread was created. |
| updatedAt | string <date-time> Timestamp when the thread was last updated. |
| deletedAt | string or null <date-time> Timestamp when the thread was deleted. Null if not deleted. |
{- "subject": "Request for Product Information",
- "text": "Hello, I would like to inquire about your latest product line. Can you provide more details?"
}{- "id": "345e6789-e89b-12d3-a456-426614174000",
- "clientId": "456e7890-e89b-12d3-a456-426614174001",
- "subject": "Request for Product Information",
- "createdAt": "2024-09-19T11:30:00Z",
- "updatedAt": "2024-09-19T11:30:00Z",
- "deletedAt": null
}Fetches the details of a specific message thread. This endpoint returns comprehensive information about the thread.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| threadId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 Unique identifier of the thread to retrieve. |
| id required | string <uuid> Unique identifier for the thread. |
| clientId required | string <uuid> Unique identifier for the client associated with the thread. |
| subject | string [ 1 .. 255 ] characters Subject of the thread. |
| createdAt | string <date-time> Timestamp when the thread was created. |
| updatedAt | string <date-time> Timestamp when the thread was last updated. |
| deletedAt | string or null <date-time> Timestamp when the thread was deleted. Null if not deleted. |
{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "clientId": "123e4567-e89b-12d3-a456-426614174001",
- "subject": "Meeting Request: Project Kickoff",
- "createdAt": "2024-09-16T14:32:00Z",
- "updatedAt": "2024-09-17T09:21:00Z",
- "deletedAt": null
}Retrieves messages from a specific thread. This endpoint supports pagination.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| threadId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier of the thread |
| offset | integer >= 0 Default: 0 Example: offset=0 The number of items to skip before starting to collect the result set |
| limit | integer [ 1 .. 100 ] Default: 10 Example: limit=10 The maximum number of items to return |
| id required | string <uuid> Unique identifier for the message. |
| threadId required | string <uuid> Unique identifier of the thread this message belongs to. |
| clientId | string <uuid> Unique identifier of the client associated with this message, if applicable. |
| employeeId | string <uuid> Unique identifier of the employee associated with this message, if applicable. |
| text required | string [ 1 .. 255 ] characters The content of the message. Must be between 1 and 255 characters. |
| createdAt required | string <date-time> Timestamp of when the message was created. |
| updatedAt | string <date-time> Timestamp of the last update to the message, if any. |
| deletedAt | string <date-time> Timestamp of when the message was deleted, if applicable. |
[- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "threadId": "234e5678-e89b-12d3-a456-426614174000",
- "clientId": null,
- "employeeId": "456e7890-e89b-12d3-a456-426614174000",
- "text": "Hello, how can I assist you today?",
- "createdAt": "2023-09-16T10:30:00Z",
- "updatedAt": "2023-09-16T10:30:00Z",
- "deletedAt": null
}, - {
- "id": "567e8901-e89b-12d3-a456-426614174000",
- "threadId": "234e5678-e89b-12d3-a456-426614174000",
- "clientId": "345e6789-e89b-12d3-a456-426614174000",
- "employeeId": null,
- "text": "I have a question about my account balance.",
- "createdAt": "2023-09-16T10:35:00Z",
- "updatedAt": "2023-09-16T10:35:00Z",
- "deletedAt": null
}
]Adds a new message to a specific thread. This endpoint allows clients or employees to post messages in an ongoing conversation.
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| threadId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier of the thread to post the message to |
| text required | string [ 1 .. 255 ] characters The content of the message |
| id required | string <uuid> Unique identifier for the message. |
| threadId required | string <uuid> Unique identifier of the thread this message belongs to. |
| clientId | string <uuid> Unique identifier of the client associated with this message, if applicable. |
| employeeId | string <uuid> Unique identifier of the employee associated with this message, if applicable. |
| text required | string [ 1 .. 255 ] characters The content of the message. Must be between 1 and 255 characters. |
| createdAt required | string <date-time> Timestamp of when the message was created. |
| updatedAt | string <date-time> Timestamp of the last update to the message, if any. |
| deletedAt | string <date-time> Timestamp of when the message was deleted, if applicable. |
{- "text": "Thank you for your assistance."
}{- "id": "678e9012-e89b-12d3-a456-426614174000",
- "threadId": "234e5678-e89b-12d3-a456-426614174000",
- "clientId": "345e6789-e89b-12d3-a456-426614174000",
- "employeeId": null,
- "text": "Thank you for your assistance.",
- "createdAt": "2023-09-16T11:00:00Z",
- "updatedAt": "2023-09-16T11:00:00Z",
- "deletedAt": null
}Webhooks deliver real-time notifications to your callbackURL for transfer events (status changes and transfer.incoming.created) and FX order status changes. Register a webhook, then receive POST deliveries with event type transfer.outgoing.changed, transfer.incoming.created, transfer.incoming.changed, or fx.order.changed. See the Webhook event delivery callback for payload shapes, transfer statuses (including onhold, and reason/message on rejected/canceled), and FX order statuses.
Webhook callbacks are delivered from a static egress IP address that can be allowlisted on your side. Production and sandbox callbacks both originate from 34.13.6.63. This address does not rotate; if it ever changes or an additional address is added, partners are notified in advance.
Gemba delivers events to your registered callbackURL via HTTP POST for transfer events
(status changes and transfer.incoming.created) and FX order status changes.
All active webhooks receive every event type.
| Event type | When it fires | data shape |
|---|---|---|
transfer.outgoing.changed |
Outgoing transfer status changed (internal, international, or UK) | InternalTransfer, InternationalTransfer, or UKTransfer |
transfer.incoming.created |
Incoming side of an internal transfer (recipient perspective) | InternalTransfer |
transfer.incoming.changed |
External incoming payment changed | IncomingPayment |
fx.order.changed |
FX order status changed | FxOrder |
For internal transfers between two Gemba accounts, the sender receives transfer.outgoing.changed
and the recipient receives transfer.incoming.created.
Bulk batches use a different REST shape than single transfers (create → { bulkPaymentId };
status → { status, count }). There is no bulk-aggregate webhook event.
Per-row outcomes are delivered the same way as single payments: after the bulk is processed,
each spawned UK or international transfer emits transfer.outgoing.changed with the standard
UKTransfer / InternationalTransfer payload, including onhold and reason/message on
rejected/canceled.
Transfer-related events use these data.status values:
inprogress — transfer is being processedonhold — transfer is temporarily on hold and awaiting further processing (no reason / message)done — transfer completed successfullyerror — processing errorrejected — transfer rejected; includes reason (insufficient_funds, wrong_payment_details, rejected_by_bank, canceled_by_client, or other) and message (partner-safe human-readable explanation)sign_required — OTP/signature required before processingcanceled — transfer canceled; includes reason (insufficient_funds, wrong_payment_details, rejected_by_bank, canceled_by_client, or other) and message (partner-safe human-readable explanation)fx.order.changed events use these data.status values:
pending — order created, awaiting executionexecuting — order is being executedsettled — order completed and funds exchangedexpired — quote/order expired before settlementcancelled — order canceledCompare the X-Signature-SHA256 header to HMAC-SHA256(rawBody, HMACKey) encoded as base64.
Use the raw request body bytes; do not re-serialize JSON before verifying.
id for deduplication2xx promptly| X-Signature-SHA256 required | string HMAC-SHA256 of the raw request body, keyed with your webhook |
| id required | string Unique message ID for this delivery. |
| type required | string Value: "transfer.outgoing.changed" Outgoing transfer status changed (internal, international, or UK). |
| publishedAt required | string <date-time> Timestamp when the event was published. |
| webhookId required | string <uuid> ID of the webhook that received this delivery. |
required | (InternalTransfer (RejectedOrCanceled (object) or OnHold (object) or OtherStatus (object))) or (InternationalTransfer (RejectedOrCanceled (object) or OnHold (object) or OtherStatus (object))) or (UKTransfer (RejectedOrCanceled (object) or OnHold (object) or OtherStatus (object))) Outgoing transfer payload plus delivery metadata. |
{- "id": "msg-001",
- "type": "transfer.outgoing.changed",
- "publishedAt": "2024-09-16T14:32:00.000Z",
- "webhookId": "345e6789-e89b-12d3-a456-426614174000",
- "data": {
- "id": "456a7890-e89b-12d3-a456-426614174000",
- "status": "inprogress",
- "accountId": "456a7890-e89b-12d3-a456-426614174000",
- "amount": 500000,
- "fee": 2500,
- "total": 502500,
- "currencyCode": "USD",
- "description": "Invoice payment",
- "recipientName": "Acme Corp",
- "recipientAccountNumber": "US1234567890",
- "recipientAccountType": "company",
- "recipientAddress": "123 Main St, New York",
- "recipientCountry": "US",
- "recipientRegistrationNumber": "US123456789",
- "chargesType": "sha",
- "bankName": "Bank of America",
- "bankAddress": "100 N Tryon St",
- "bankCountry": "US",
- "bankBIC": "BOFAUS2N",
- "createdAt": "2024-09-16T14:32:00Z",
- "createAt": "2024-09-16T14:32:05.000Z",
- "updateAt": "2024-09-16T14:32:05.000Z",
- "createBy": "123e4567-e89b-12d3-a456-426614174000",
- "updateBy": "123e4567-e89b-12d3-a456-426614174000"
}
}Retrieves a list of all registered webhooks. This endpoint returns comprehensive information about each webhook, including its configuration, status, and last call details.
Delivered events use the WebhookEvent schema. See Webhook event delivery for event
types, transfer statuses, FX order statuses, and payload examples.
| id | string <uuid> |
| name required | string Webhook name |
| callbackURL required | string <uri> |
| HMACKey | string HMAC hash secret key |
| isActive | boolean Default: true status |
| lastCallAt | string or null <date-time> Last call date |
| lastCallStatus | string or null Last call status |
| createdAt | string <date-time> |
| updatedAt | string or null <date-time> |
| deletedAt | string or null <date-time> |
[- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "name": "Account Updates Webhook",
- "HMACKey": "secretkey123",
- "isActive": true,
- "lastCallAt": "2024-09-19T10:15:00Z",
- "lastCallStatus": "success",
- "createdAt": "2024-09-16T14:32:00Z",
- "updatedAt": "2024-09-19T10:15:00Z",
- "deletedAt": null
}, - {
- "id": "234e5678-e89b-12d3-a456-426614174000",
- "name": "Payment Notifications",
- "HMACKey": "secretkey456",
- "isActive": false,
- "lastCallAt": "2024-09-18T09:30:00Z",
- "lastCallStatus": "failed",
- "createdAt": "2024-09-17T11:00:00Z",
- "updatedAt": "2024-09-18T09:30:00Z",
- "deletedAt": null
}
]Creates a new webhook registration. Registration subscribes the webhook to all supported events (there is no per-event selection). The webhook will be created in an active state and will start receiving event notifications immediately.
Registered webhooks receive all event types:
transfer.outgoing.changed — outgoing transfer status changed (internal, international, or UK)transfer.incoming.created — incoming side of an internal transfertransfer.incoming.changed — external incoming payment changedfx.order.changed — FX order status changedSee Webhook event delivery for payload examples, transfer statuses, and FX order statuses.
Webhook will be deactivated if 10 consecutive calls fail.
| name required | string A descriptive name for the webhook |
| callbackURL required | string <uri> The URL where webhook notifications will be sent |
| id | string <uuid> |
| name required | string Webhook name |
| callbackURL required | string <uri> |
| HMACKey | string HMAC hash secret key |
| isActive | boolean Default: true status |
| lastCallAt | string or null <date-time> Last call date |
| lastCallStatus | string or null Last call status |
| createdAt | string <date-time> |
| updatedAt | string or null <date-time> |
| deletedAt | string or null <date-time> |
{- "name": "Gemba Webhook",
}{- "id": "345e6789-e89b-12d3-a456-426614174000",
- "name": "Gemba Webhook",
- "HMACKey": "newlygeneratedsecretkey789",
- "isActive": true,
- "lastCallAt": null,
- "lastCallStatus": null,
- "createdAt": "2024-09-20T15:30:00Z",
- "updatedAt": "2024-09-20T15:30:00Z",
- "deletedAt": null
}This endpoint allows you to activate or deactivate a previously registered webhook. Activating a webhook enables it to receive event notifications, while deactivating it suspends notifications without deleting the webhook configuration.
| webhookId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier of the webhook to update. |
| isActive required | boolean Set to true to activate the webhook, false to deactivate it. |
| id | string <uuid> |
| name required | string Webhook name |
| callbackURL required | string <uri> |
| HMACKey | string HMAC hash secret key |
| isActive | boolean Default: true status |
| lastCallAt | string or null <date-time> Last call date |
| lastCallStatus | string or null Last call status |
| createdAt | string <date-time> |
| updatedAt | string or null <date-time> |
| deletedAt | string or null <date-time> |
{- "isActive": true
}{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "name": "Account Updates Webhook",
- "HMACKey": "secretkey123",
- "isActive": true,
- "lastCallAt": "2024-09-19T10:15:00Z",
- "lastCallStatus": "success",
- "createdAt": "2024-09-16T14:32:00Z",
- "updatedAt": "2024-09-19T10:15:00Z",
- "deletedAt": null
}This endpoint allows you to permanently delete a registered webhook. Once deleted, the webhook will no longer receive any event notifications. This action cannot be undone.
| webhookId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The unique identifier of the webhook to delete. |
{ }Retrieves the list of prohibited industries
| industryCode | integer The code representing the industry |
| industryName | string The name of the industry |
[- {
- "industryCode": 7143746,
- "industryName": "Arms Trade and defense"
}
]Retrieves the list of restricted industries that require additional due diligence
| industryCode | integer The code representing the industry |
| industryName | string The name of the industry |
[- {
- "industryCode": 7143722,
- "industryName": "Gambling/gaming/betting activities"
}
]The business has determined the following economic or other activities to be of elevated risk
| industryCode | integer The code representing the industry |
| industryName | string The name of the industry |
[- {
- "industryCode": 7143767,
- "industryName": "Consultancy services"
}
]Retrieves the list of high risk transaction fee countries. High risk transaction fee may be applied to payments to/from the following countries
| CountryISO | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 code of the country |
| countryFullName | string The full name of the country |
[- {
- "CountryISO": "AL",
- "countryFullName": "Albania"
}
]Retrieves the list of high risk countries.
| CountryISO | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 code of the country |
| countryFullName | string The full name of the country |
[- {
- "CountryISO": "AL",
- "countryFullName": "Albania"
}
]Retrieves the list of prohibited countries.
| CountryISO | string = 2 characters ^[A-Z]{2}$ The ISO 3166-1 alpha-2 code of the country |
| countryFullName | string The full name of the country |
[- {
- "CountryISO": "BY",
- "countryFullName": "Belarus"
}
]| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| objectType | string (OTPObjectTypeEnum) Value: "transfer" Type of object for OTP validation |
| objectId | string <uuid> |
| id required | string <uuid> The unique identifier for the transfer/bulk of transfers confirmation. |
| type required | string Default: "sms" Enum: "sms" "email" The type of transfer confirmation. |
| code | string or null The confirmation code. Sandbox only |
| status required | string Enum: "confirmed" "sent" "expired" The status of the internal transfer confirmation |
| expiresAt required | string <date-time> The timestamp when the transfer was confirmed. |
{- "objectType": "transfer",
- "objectId": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "type": "sms",
- "status": "sent",
- "expiresAt": "2024-09-16T14:32:00Z"
}Validate OTP code
| clientId required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The unique identifier for the client. This is a GUID that represents the client. |
| objectType | string (OTPObjectTypeEnum) Value: "transfer" Type of object for OTP validation |
| objectId | string <uuid> |
| code required | string The OTP to confirm the transfer. |
| id required | string <uuid> The unique identifier for the transfer/bulk of transfers confirmation. |
| type required | string Default: "sms" Enum: "sms" "email" The type of transfer confirmation. |
| code | string or null The confirmation code. Sandbox only |
| status required | string Enum: "confirmed" "sent" "expired" The status of the internal transfer confirmation |
| expiresAt required | string <date-time> The timestamp when the transfer was confirmed. |
{- "code": "123456"
}{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "type": "sms",
- "status": "confirmed",
- "expiresAt": "2024-09-16T14:32:00Z"
}