Applies to Program-Funded programs. See Overview for the bigger picture.
Anatomy of a definition
| Field | What it is |
|---|---|
symbol | Short uppercase identifier for the asset (e.g. USDC, BTC, GOLD, POINTS). |
name | Human-readable name (e.g. “USD Coin”). |
decimals | Number of decimal places. Match what you use on your side so you never deal with rounding surprises. |
rateSource | FIXED or HTTP. Determines how the USD rate is priced. See below. |
status | ACTIVE or DISABLED. Disabled assets are excluded from balance computation. |
POST /virtual-assets. Update its name or HTTP endpoint via PATCH /virtual-assets/:id.
Rate sources
Every virtual asset has a USD exchange rate. The rate determines how the asset’s raw units translate into USD 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 USD value of one unit of the virtual asset. 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.