Virtual Assets
Create virtual asset
https://api.firstleeward.com/v0/virtual-assetsDefines 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 · headerrequiredAPI key as Bearer token, e.g. Bearer YOUR_API_KEY
Headers
Leeward-Versionenum<string>requiredAPI version (YYYY-MM-DD). Available option: 2026-09-18
Body
application/json
symbolstringrequiredUnique symbol within the project (e.g., USDC, BTC, GOLD, POINTS). Uppercase alphanumeric and underscores only.
namestringrequiredDisplay name for the virtual asset
decimalsintegerrequiredNumber of decimal places for amounts
rateSourcestringrequiredHow the exchange rate (in the project billing currency) is determined for this virtual asset.
FIXEDHTTPratenumberInitial 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>requiredUnique virtual asset identifier
symbolstringrequiredVirtual asset symbol
namestringrequiredDisplay name
decimalsintegerrequiredNumber of decimal places for amounts
statusstringrequiredLifecycle status. Disabled assets are excluded from balance computation.
ACTIVEDISABLEDrateSourcestringrequiredHow the exchange rate (in the project billing currency) is determined for this virtual asset.
FIXEDHTTPhttpEndpointstring | nullrequiredRate endpoint URL. Present only for HTTP rate source.
currentRatenumber | nullrequiredLatest 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 | nullrequiredISO 8601 timestamp of the latest rate snapshot. Null when currentRate is null.
allocatedobjectrequiredTotal amount of this virtual asset allocated across all accounts in the project.
Show child attributes
amountstringrequiredTotal allocated across all users in this project, in the virtual asset's native units. Decimal string padded to the asset's decimals.
valuenumber | nullrequiredValue 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).
createdAtstringrequiredISO 8601 creation timestamp
updatedAtstringrequiredISO 8601 last update timestamp
400Invalid rate source configuration
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired409Virtual asset with this symbol already exists in the project
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired