Transfers

Use transfer route discovery before creating Direct Transfers or Auto Convert Routes. The route objects returned by GetTransfersInfoQueryV1 are the supported transfer paths; clients should not hardcode source and destination pairs.

Only create transfers or Auto Convert Routes from routes returned by GetTransfersInfoQueryV1. Unsupported route objects are rejected by the API.

Route selection flow

  1. Call GetTransfersInfoQueryV1 with no selection to get all available sources and destinations.
  2. When the user selects a source, call it again with selectedSource.
  3. When the user selects a destination, call it again with both selected sides.
  4. Pick one returned routes[] item and use its route object in the create command.
  5. Treat provider, route key, and plan fields as opaque routing metadata. Echo them from discovery; do not construct them or show provider names to users.

Discover available routes

QUERY /transfers/info/v1 GetTransfersInfoQueryV1
curl https://api-preview.kunga.eu/transfers/info/v1   --request QUERY   --header 'Content-Type: application/json'   --header 'Authorization: Basic <BASE64(uuid:password)>'   --data '{
    "selectedSource": null,
    "selectedDestination": null
  }'

Example route option:

{
  "routeKey": "auto-eur-sepa-to-usdc-base",
  "flowType": "AutoForwarding",
  "route": {
    "routeKey": "auto-eur-sepa-to-usdc-base",
    "flowType": "AutoForwarding",
    "provider": "<opaque-provider>",
    "source": {
      "currency": "Eur",
      "paymentRail": "Sepa",
      "currencyKind": "Fiat"
    },
    "destination": {
      "currency": "Usdc",
      "paymentRail": "Base",
      "currencyKind": "Crypto"
    }
  },
  "totalPercentageFee": 0.015,
  "minimumSourceAmount": 1
}

The response includes:

  • availableSources: source assets and rails supported for the current selection.
  • availableDestinations: destination assets and rails supported for the current selection.
  • routes: executable route options with flow type, source, destination, fulfillment metadata, and fee estimates.
  • totalPercentageFee, totalSourceBaseFee, and minimumSourceAmount: route cost and minimum amount metadata.

Common route patterns

User goalExpected flow typeTypical next step
Send a specific amount nowDirectCreate or select source and destination saved contacts, then create a Direct Transfer.
Receive future bank funds and auto-settleAutoForwardingCreate an Auto Convert Route.
Change where future funds settleAutoForwardingList Auto Convert Routes and update the existing route destination.
Review historical movementAny transfer kindQuery /transfers/list/v1 or transfer details.

Get route-specific fields

After a route is selected, call the metadata endpoint to determine which fields are required for source and destination instructions.

QUERY /transfers/route-field-metadata/v1 GetTransferRouteFieldMetadataQueryV1
curl https://api-preview.kunga.eu/transfers/route-field-metadata/v1   --request QUERY   --header 'Content-Type: application/json'   --header 'Authorization: Basic <BASE64(uuid:password)>'   --data '{
    "route": {
      "flowType": "Direct",
      "provider": "<route.provider>",
      "source": {
        "currency": "Eur",
        "paymentRail": "Sepa",
        "currencyKind": "Fiat"
      },
      "destination": {
        "currency": "Usdc",
        "paymentRail": "Base",
        "currencyKind": "Crypto"
      }
    }
  }'

Example metadata response:

{
  "sourceFields": [
    {
      "type": "Iban",
      "identifier": "PrimaryIdentifier",
      "required": true,
      "label": "IBAN",
      "placeholder": "Enter IBAN"
    }
  ],
  "destinationFields": [
    {
      "type": "WalletAddress",
      "identifier": "PrimaryIdentifier",
      "required": true,
      "label": "Base wallet address",
      "placeholder": "Enter wallet address"
    }
  ]
}

Use returned labels, placeholders, options, and required flags to build the payment instruction or saved contact form.

Create a Direct Transfer

Create direct transfers with CreateDirectTransferCommandV1 after selecting a Direct route and collecting the required source and destination contacts.

POST /transfers/direct/v1 CreateDirectTransferCommandV1
{
  "sourceAmount": 100,
  "sourceSavedContactId": "123e4567-e89b-12d3-a456-426614174000",
  "destinationSavedContactId": "123e4567-e89b-12d3-a456-426614174001",
  "execute": false,
  "route": {
    "routeKey": "direct-eur-sepa-to-usdc-base",
    "flowType": "Direct",
    "provider": "<route.provider>",
    "source": {
      "currency": "Eur",
      "paymentRail": "Sepa",
      "currencyKind": "Fiat"
    },
    "destination": {
      "currency": "Usdc",
      "paymentRail": "Base",
      "currencyKind": "Crypto"
    }
  }
}

Set execute to false to validate the transfer and preview the review object. Set it to true when the user confirms.

Expected response shape:

{
  "status": {
    "transferWasExecuted": false,
    "isReadyToExecute": true,
    "summary": "Ready to create transfer",
    "blockingValidationMessages": []
  },
  "review": {
    "sourceAmount": 100,
    "route": {}
  },
  "execution": {}
}

List transfers

QUERY /transfers/list/v1 GetTransferListQueryV1
curl https://api-preview.kunga.eu/transfers/list/v1   --request QUERY   --header 'Content-Type: application/json'   --header 'Authorization: Basic <BASE64(uuid:password)>'   --data '{
    "query": {
      "filter": [],
      "sort": [],
      "pagination": {
        "page": 0,
        "pageSize": 20
      },
      "exportFormat": "Json"
    }
  }'

The list can include direct transfers, auto-conversions, refunds, and conversion records. User-facing screens should explain the transfer kind before showing source and destination details.

Transfer kinds

KindMeaning
DirectTransferUser-created transfer for a specific amount.
AutoConversionFunds arrived through an Auto Convert Route and were automatically settled.
RefundFunds were returned or refunded.

Transfer lifecycle

StatusMeaningUser-facing handling
CreatedTransfer was created but has not progressed yet.Show as created or waiting.
ActionRequiredThe user or integrator must complete a required action.Show the required action.
PendingTransfer is being processed.Show as in progress.
InReviewTransfer is under review.Show as in review and avoid duplicate submissions.
CompletedTransfer completed successfully.Show final amounts and receipts when available.
CanceledTransfer was canceled.Show as canceled.
FailedTransfer failed.Show the failure reason when available.
RefundedTransfer was refunded.Show refund details.
ReturningTransfer is being returned.Show as returning.
AmountTooSmallTransfer amount is below the minimum route amount.Ask the user to enter a larger amount.