1. Create a server-side API key
Create an API key in the Ground Developer Portal and keep it on your backend.2. Select the gtoken source
CallGET /v2/gvaults/yield-sources and select the gtoken yield source. Pass that
row’s id as gVaultId when provisioning the fee wrapper.
3. Provision the fee wrapper
Generate a UUID v4 forrequestId, then submit:
performanceFeeBps is expressed in basis points. 2000 means that 20% of
gains above the wrapper’s high-water mark accrue to feeRecipientAddress.
To also charge an annual management fee, include managementFeeBps in the
request. For example, 10 means 0.10% annually; the supported range is 0 through
100 bps, with a default of zero. Ground sets the permanent management-fee cap
to 100 bps; you cannot supply that cap. Both fees use the same recipient.
See Manage fee wrappers for fee caps
and update rules.
The initial performance-fee rate becomes the wrapper’s permanent maximum. A
wrapper created with performanceFeeBps: 0 cannot enable a performance fee
later.
Use the same requestId when retrying an uncertain request. Reusing it with
different parameters returns 409 request_id_conflict.
4. Wait for onchain readiness
SetFEE_WRAPPER_ID to the id returned by the create response, then poll that
resource:
status: ready. Store id for future API calls and
contractAddress for onchain transactions. Ground provisions the wrapper and
authorizes it to use the selected backing vault before reporting it ready.
You can also recover a wrapper by its provisioning request:
5. Allowlist each customer
Before a customer’s first deposit, call:GET endpoint until it returns allowed: true. This
allowlist belongs to the fee wrapper and is separate from the underlying
vault’s address allowlist.
6. Integrate deposits
Readasset() from contractAddress, approve that token for the wrapper, and
call:
receiver to the allowlisted customer address. The customer receives fee
wrapper shares, while the wrapper holds the underlying gtokens.
Useful read methods include:
7. Integrate withdrawals
For an immediate exit, readmaxWithdraw(owner) or maxRedeem(owner), then
call:
requestId
until the claim confirms.
8. Update revenue sharing
When management fees are disabled, you can change the fee recipient. You can reduce the performance fee or restore it up to the creation-time maximum:maxPerformanceFeeBps is rejected.
To update the annual management-fee
rate, PATCH the fees endpoint with only managementFeeBps, within the original
cap. Zero disables management fees. Performance updates use a separate request;
recipient changes remain unavailable while management fees are enabled.
See Manage fee wrappers for the full fee configuration.
9. Remove customer deposit access
CallDELETE /v2/fee-wrappers/{id}/allowlist/{address}. Removal blocks new deposits but preserves
the customer’s ability to exit an existing position.