August 10, 2026
Portfolio wallet webhooks identify their wallet
Portfolio wallet deposit, withdrawal, payout, strategy, and rebalance webhooks now include a top-levelwalletId. USD amounts in deposit activity and webhooks
are returned with exactly six decimal places. Retrying a workflow no longer
emits a rebalance event solely because its worker claim changed.
August 9, 2026
Allocation responses include accepted instructions
POST /v2/wallets/{id}/allocate now returns the allocation’s requestId,
createdAt, and accepted allocations alongside its rebalanceId and current
status. Allocation create and preview responses return dollar strings with
exactly six decimal places.
July 21, 2026
JAAA USDT available in production
Production now returnsground-jaaa-usdt-vault from
GET /v2/wallets/yield-sources. Put this source under
strategy.allocations.usdt; continue using ground-jaaa-usdc-vault under
strategy.allocations.usdc for the USDC-funded lane.
This availability update does not change the response schema or introduce new
identifiers. The JAAA-USDT metadata now correctly describes its AAA-rated
collateralized loan obligation exposure.
July 20, 2026
Stablecoin-explicit JAAA yield source IDs
Breaking change The existing USDC-funded JAAA source moved fromground-jaaa-vault to
ground-jaaa-usdc-vault. Update stored strategy templates and API clients to
use the stablecoin-explicit USDC ID.
Sandbox also exposes ground-jaaa-usdt-vault for the USDT-funded JAAA lane.
Place it under strategy.allocations.usdt only when it is present in the live
environment-specific response from GET /v2/wallets/yield-sources. Production
clients must not assume the USDT row is available until the production catalog
returns it.
Historical completed JAAA-USDC transactions retain their economics and remain
readable after the identity migration.
July 17, 2026
Canonical list responses and webhook event casing
Breaking change We completed the response-pattern migration introduced on July 9. The following endpoints now return list items only underdata and pagination only through nextCursor:
GET /v2/wallets/yield-sourcesGET /v2/activityGET /v2/webhooksGET /v2/webhooks/eventsGET /v2/webhooks/{id}/events
List envelope migration
All affected list responses now use this shape:
nextCursor is non-null, pass it as the next request’s cursor query parameter. A null value means there are no more pages.
Webhook event field migration
Webhook event feed items and their nestedlatestEmission object now use camelCase exclusively. Update clients to read:
registrationId,eventType,attemptCount,deliveredAt,lastError,createdAt, andupdatedAton each event;eventId,attemptNumber,requestedAt,completedAt,responseStatus,responseMs, anderrorMessagefromlatestEmission.
Required client changes
- Read every affected list from
response.data. - Replace
response.hasMorechecks withresponse.nextCursor !== null. - Replace snake_case webhook event and delivery-attempt field access with the camelCase names above.