Quick Start

This guide shows the shortest server-to-server path: verify credentials, create and onboard an account, discover a supported route, then preview and execute a transfer or Auto Convert Route.

Do not hardcode transfer paths. Always use a route object returned by GetTransfersInfoQueryV1.

1. Verify authentication

QUERY /identity/detail/v1 GetIdentityDetailQueryV1
curl -u "uuid:password"   https://api-preview.bridflow.com/identity/detail/v1   --request QUERY   --header 'Content-Type: application/json'   --data '{}'

2. Create an account

POST /accounts CreateAccountCommandV1
curl https://api-preview.bridflow.com/accounts   --request POST   --header 'Content-Type: application/json'   --header 'Authorization: Basic <BASE64(uuid:password)>'   --data '{
    "accountType": "Personal",
    "email": "[email protected]"
  }'

Keep the returned accountId and send it as the AccountId header on the remaining account-scoped requests.

3. Complete onboarding

Save the physical person’s information with UpdatePersonPersonalInformationCommandV1, then poll account status.

QUERY /accounts/status/v1 GetAccountStatusQueryV1
curl https://api-preview.bridflow.com/accounts/status/v1   --request QUERY   --header 'Content-Type: application/json'   --header 'Authorization: Basic <BASE64(uuid:password)>'   --header 'AccountId: 123e4567-e89b-12d3-a456-426614174000'   --data '{}'

Follow accountCreationStatus after every action until it is Complete. Business accounts use the staged business onboarding flow.

4. Discover routes

QUERY /transfers/info/v1 GetTransfersInfoQueryV1
curl https://api-preview.bridflow.com/transfers/info/v1   --request QUERY   --header 'Content-Type: application/json'   --header 'Authorization: Basic <BASE64(uuid:password)>'   --header 'AccountId: 123e4567-e89b-12d3-a456-426614174000'   --data '{
    "selectedSource": null,
    "selectedDestination": null,
    "includeExistingAutoConvertRouteTargets": false
  }'

The response returns availableSources, availableDestinations, and routes. Use the whole route object from one returned route option in later calls.

Choose the flow

  • Direct: send a known amount now.
  • AutoConvert: create an open route that converts and forwards future incoming funds.

5. Get the required fields

QUERY /transfers/route-field-metadata/v1 GetTransferRouteFieldMetadataQueryV1

Send a JSON object with one route property. Its value must be the complete route object returned by the selected routes[] item from discovery.

Build the form from sourceFields and destinationFields. Honor required flags, options, conditional visibility, and warnings. Do not add fields that are absent. For example, most blockchain routes do not support a memo.

6. Save a reusable instruction

POST /saved-contacts/v1 UpsertSavedContactCommandV1
{
	"isSavedByUser": true,
	"alias": "Treasury USDC wallet",
	"instruction": {
		"kind": "SavedContact",
		"currency": "Usdc",
		"paymentRail": "Base",
		"displayFields": [
			{
				"identifier": "PrimaryIdentifier",
				"label": "Wallet address",
				"value": "0x123456789abcdef0123456789abcdef01234567",
				"canCopy": true
			}
		]
	}
}

7. Preview, then execute

Direct Transfer

Call POST /transfers/direct/v1 with a returned Direct route, the source amount, compatible saved contact ids, and execute: false. Show the quote and validation result. Repeat with execute: true only after user confirmation.

Auto Convert Route

Call POST /transfers/auto/v1 with a returned AutoConvert route, a compatible destination saved contact id, and execute: false. Repeat with execute: true only after user confirmation.

Never infer fees from currency or payment rail. Show totalPercentageFee, totalSourceBaseFee, and the preview quote returned for the selected route.