Virtual Assets

Create virtual asset

POSThttps://api.firstleeward.com/v0/virtual-assets

Defines a new virtual asset for the project. Only available when virtual assets are enabled for the project. For FIXED rate source, an initial rate must be provided. For HTTP rate source, an endpoint URL is required.

Authorizations

Authorizationstring · headerrequired

API key as Bearer token, e.g. Bearer YOUR_API_KEY

Headers

Leeward-Versionenum<string>required

API version (YYYY-MM-DD). Available option: 2026-09-18

Body

application/json

symbolstringrequired

Unique symbol within the project (e.g., USDC, BTC, GOLD, POINTS). Uppercase alphanumeric and underscores only.

namestringrequired

Display name for the virtual asset

decimalsintegerrequired

Number of decimal places for amounts

rateSourcestringrequired

How the exchange rate (in the project billing currency) is determined for this virtual asset.

Available options:FIXEDHTTP
ratenumber

Initial rate for 1 unit of this virtual asset, in the project billing currency. Required when rateSource is FIXED. Ignored for HTTP. The rate prices the asset wherever it is valued: a balance of n units counts as n × rate toward available balance, and a SETTLEMENT posting of n units clears n × rate of card debt. Use 1 for a unit pegged to the billing currency (cashback, a credit line), 0.01 for points worth one cent each, or a market price such as 3487.42 for a unit tracking ETH.

httpEndpointstring<uri>

URL of the rate endpoint. Required when rateSource is HTTP. Must be HTTPS and resolve to a public address (no private IPs). The endpoint must respond to GET requests with JSON: { "rate": <number> } where rate is the value of 1 unit of this virtual asset in the project billing currency, for example { "rate": 3487.42 } for a unit tracking ETH in a USD-billed program. Rates are fetched periodically by the platform.

Response

200Virtual asset definition
idstring<uuid>required

Unique virtual asset identifier

symbolstringrequired

Virtual asset symbol

namestringrequired

Display name

decimalsintegerrequired

Number of decimal places for amounts

statusstringrequired

Lifecycle status. Disabled assets are excluded from balance computation.

Available options:ACTIVEDISABLED
rateSourcestringrequired

How the exchange rate (in the project billing currency) is determined for this virtual asset.

Available options:FIXEDHTTP
httpEndpointstring | nullrequired

Rate endpoint URL. Present only for HTTP rate source.

currentRatenumber | nullrequired

Latest known rate per unit, in the project billing currency. This is the rate a SETTLEMENT posting made now would be priced at. Null if no rate snapshot exists yet.

currentRateUpdatedAtstring | nullrequired

ISO 8601 timestamp of the latest rate snapshot. Null when currentRate is null.

allocatedobjectrequired

Total amount of this virtual asset allocated across all accounts in the project.

Show child attributes
amountstringrequired

Total allocated across all users in this project, in the virtual asset's native units. Decimal string padded to the asset's decimals.

valuenumber | nullrequired

Value of amount at the current rate, in the project billing currency. Null when no rate is available (e.g. disabled assets with no recent snapshot).

createdAtstringrequired

ISO 8601 creation timestamp

updatedAtstringrequired

ISO 8601 last update timestamp

400Invalid rate source configuration
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired
409Virtual asset with this symbol already exists in the project
errorobjectrequired
Show child attributes
codestringrequired
messagestringrequired
detailobject | nullrequired