Applies to Program-Funded programs. See Overview for the bigger picture.
Anatomy of a definition
Create a virtual asset via
POST /virtual-assets. Update its name or HTTP endpoint via PATCH /virtual-assets/:id.
Rate sources
Every virtual asset has an exchange rate in your program’s billing currency. The rate determines how the asset’s raw units translate into that currency for balance computation and authorization. Reap supports two rate sources:FIXED
You set the rate, Reap stores it. The rate stays constant until you explicitly update it. Best for stable or client-priced units (USD-denominated credits, loyalty points, internal reference prices).
HTTP
Reap polls an endpoint you host. The rate updates whenever your endpoint returns a new value. Best for assets priced against a moving market you already have data for (volatile crypto, FX rates, NAV).
FIXED
Set the initial rate when you create the asset. Update it any time viaPUT /virtual-assets/:id/rate. The update takes effect immediately for balance computation.
Typical values:
1.00for a USD-denominated credit like cashback, sign-up bonus, or credit line.0.01for a point system (one hundred points per USD).- Any other ratio you want to peg, like a fixed internal conversion for a stablecoin you custody.
HTTP
Provide an endpoint URL when you create the asset. Reap polls it every 5 minutes and stores each new value as a rate snapshot. Card authorizations use the most recent snapshot, not a live fetch. Your endpoint must respond to aGET request with this JSON:
rate is the value of one unit of the virtual asset in your program’s billing currency. On creation, Reap fetches your endpoint synchronously to validate it. If the endpoint is unreachable or returns an invalid response, the asset is not created.
You can point the endpoint at anything: your market data service, a cached feed from a pricing provider, a simple proxy to an upstream API. Reap does not prescribe the source.
Update the endpoint URL any time via PATCH /virtual-assets/:id.
When to choose which
Use FIXED when...
Use FIXED when...
- The unit is priced in USD already (credits, cashback, allowances).
- The rate is pegged by program design, not by market movement.
- You want deterministic rate changes tied to explicit business decisions.
Use HTTP when...
Use HTTP when...
- The asset tracks a volatile underlying (BTC, ETH, other tokens).
- The asset is a yield-bearing share token whose USD value drifts continuously (vault shares, LST/LRT tokens, money-market deposit receipts). Point the endpoint at whatever source you trust for the live share price.
- You already have a pricing pipeline and do not want to push updates every time a price ticks.
- The rate should reflect your platform’s live price, not a manual snapshot.
Lifecycle
- Create. Defines the asset, validates the rate source (fetches once for HTTP, stores the initial rate for FIXED), activates it. The asset can now receive allocations.
- Update. You can edit
nameand, for HTTP assets,httpEndpoint. Thesymbol,decimals, andrateSourceare immutable. - Set rate. Available only for FIXED assets. Inserts a new rate snapshot.
- Disable. One-way. Disabled assets cannot receive new allocations, and their existing balances are excluded from available balance. Historical entries remain on the ledger for audit.