Sandbox API
Sandbox data models
Field definitions for requests and responses. Nullable fields can contain null; optional fields may be absent.
Advisor
| Field |
Type |
Required |
Description |
object |
"advisor" |
No |
|
as_of |
string |
No |
format: date-time |
headline |
string |
No |
|
regime |
string |
No |
|
bullets |
string[] |
No |
|
top_opportunities |
object[] |
No |
|
portfolio |
object |
No |
|
disclaimer |
string |
No |
|
ApiKey
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"api_key" |
Yes |
|
label |
string |
Yes |
|
secret |
string |
No |
Full secret only on create; masked (tsk_test_...a1b2) on list |
prefix |
string |
No |
First 12 chars of the secret |
environment |
"test", "live" |
Yes |
|
created_at |
string |
Yes |
format: date-time |
last_used_at |
['string', 'null'] |
No |
format: date-time |
revoked |
boolean |
Yes |
|
scopes |
string[] |
Yes |
|
Balance
| Field |
Type |
Required |
Description |
object |
"balance" |
No |
|
user_id |
['string', 'null'] |
No |
|
asset |
"USDC", "USDT" |
No |
|
principal |
number |
No |
|
current_value |
number |
No |
|
accrued_yield |
number |
No |
|
positions |
integer |
No |
|
BalanceSnapshot
| Field |
Type |
Required |
Description |
object |
"balance_snapshot" |
No |
|
date |
string |
No |
|
t |
integer |
No |
Epoch ms |
principal |
number |
No |
|
value |
number |
No |
|
accrued |
number |
No |
|
positions |
integer |
No |
|
users |
integer |
No |
|
by_asset |
object[] |
No |
|
CreateKeyRequest
| Field |
Type |
Required |
Description |
label |
string |
No |
Human label for the key |
environment |
"test", "live" |
No |
default: test |
CreatePositionRequest
| Field |
Type |
Required |
Description |
wallet |
string |
Yes |
|
asset |
"USDC", "USDT" |
Yes |
|
amount |
number |
Yes |
|
strategy |
string |
No |
"auto" or a target vault id default: auto |
user |
string |
No |
Optional user id (usr_...) or external_id to associate |
CreateUserRequest
| Field |
Type |
Required |
Description |
external_id |
string |
Yes |
Your customer id (unique) |
label |
['string', 'null'] |
No |
|
email |
['string', 'null'] |
No |
format: email |
metadata |
object |
No |
|
wallets |
string[] |
No |
|
CreateWebhookRequest
| Field |
Type |
Required |
Description |
url |
string |
Yes |
format: uri |
events |
"*", "position.opened", "position.active", "position.rebalanced", "position.withdrawn", "position.closed", "yield.threshold", "system.status"[] |
No |
Defaults to ["*"] |
active |
boolean |
No |
default: True |
Decision
| Field |
Type |
Required |
Description |
object |
"decision" |
No |
|
id |
string |
No |
|
at |
string |
No |
format: date-time |
position_id |
string |
No |
|
user_id |
['string', 'null'] |
No |
|
asset |
string |
No |
|
type |
"initial_routing", "rebalance" |
No |
|
from_vault |
['string', 'null'] |
No |
|
to_vault |
string |
No |
|
apy_before |
['number', 'null'] |
No |
|
apy_after |
number |
No |
|
expected_uplift_bps |
['number', 'null'] |
No |
|
reason |
string |
No |
|
alternatives |
object[] |
No |
|
rationale |
string |
No |
|
status |
string |
No |
|
DeletedWebhook
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
string |
Yes |
|
deleted |
boolean |
Yes |
|
Delivery
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"delivery" |
Yes |
|
webhook_id |
string |
No |
|
url |
string |
No |
Target endpoint URL |
event |
"position.opened", "position.active", "position.rebalanced", "position.withdrawn", "position.closed", "yield.threshold", "system.status" |
Yes |
|
payload |
object |
No |
The signed event payload { id, type, created_at, data } |
signature |
string |
No |
t=,v1=<hmac_sha256(secret, t + "." + body)> |
status |
"delivered", "failed" |
Yes |
|
attempts |
integer |
No |
|
at |
string |
Yes |
format: date-time |
latency_ms |
integer |
No |
|
ErrorEnvelope
| Field |
Type |
Required |
Description |
error |
object |
Yes |
|
LedgerEntry
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"ledger_entry" |
Yes |
|
at |
string |
Yes |
format: date-time |
user_id |
['string', 'null'] |
No |
|
position_id |
string |
Yes |
|
wallet |
string |
No |
|
asset |
"USDC", "USDT" |
Yes |
|
type |
"deposit", "withdraw", "close", "accrual" |
Yes |
|
amount |
number |
Yes |
Signed delta |
balance_after |
number |
Yes |
Running balance for the position |
vault_id |
string |
No |
|
settled |
boolean |
Yes |
|
ref |
string |
No |
|
| Field |
Type |
Required |
Description |
total |
integer |
Yes |
Total items matching the filter |
limit |
integer |
No |
Page size applied |
next_cursor |
['string', 'null'] |
No |
Opaque cursor for the next page, or null when exhausted |
Position
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"position" |
Yes |
|
user_id |
['string', 'null'] |
No |
Owning end-user, if associated |
wallet |
string |
Yes |
|
asset |
"USDC", "USDT" |
Yes |
|
chain |
"base", "arbitrum" |
Yes |
|
vault_id |
string |
Yes |
|
strategy |
string |
No |
|
principal |
number |
Yes |
|
current_value |
number |
Yes |
principal * (1 + apy * elapsedYears) |
accrued_yield |
number |
Yes |
|
apy |
number |
Yes |
|
status |
"active", "closed" |
Yes |
|
opened_at |
string |
No |
format: date-time |
updated_at |
string |
No |
format: date-time |
last_rebalance_at |
['string', 'null'] |
No |
format: date-time |
tx_hash |
string |
No |
|
PositionEvent
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"position_event" |
No |
|
position_id |
string |
No |
|
type |
"deposit", "rebalance", "accrual", "withdraw", "close" |
Yes |
|
at |
string |
Yes |
format: date-time |
amount |
number |
No |
|
apy |
number |
No |
|
vault_id |
string |
No |
|
note |
string |
No |
|
Rebalance
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"rebalance" |
Yes |
|
position_id |
string |
Yes |
|
from_vault |
string |
Yes |
|
to_vault |
string |
Yes |
|
amount |
number |
No |
|
reason |
"yield_optimization", "risk_adjustment", "capacity_rebalance" |
No |
|
apy_before |
number |
No |
|
apy_after |
number |
No |
|
at |
string |
Yes |
format: date-time |
tx_hash |
string |
No |
|
Reconciliation
| Field |
Type |
Required |
Description |
object |
"reconciliation" |
Yes |
|
as_of |
string |
Yes |
format: date-time |
scope |
string |
Yes |
|
recorded_total |
number |
Yes |
|
onchain_total |
number |
Yes |
|
discrepancy |
number |
Yes |
|
unsettled_yield |
number |
No |
|
tolerance |
number |
No |
|
status |
"reconciled", "mismatch" |
Yes |
|
positions |
integer |
No |
|
breakdown |
object[] |
No |
|
Regime
| Field |
Type |
Required |
Description |
object |
"regime" |
No |
|
as_of |
string |
No |
format: date-time |
regime |
"rising", "falling", "stable", "volatile" |
No |
|
description |
string |
No |
|
per_asset |
object[] |
No |
|
RevokedKey
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
string |
Yes |
|
revoked |
boolean |
Yes |
|
Signal
Per-vault risk-adjusted signal. APY fields are decimal fractions.
| Field |
Type |
Required |
Description |
object |
"signal" |
No |
|
vault_id |
string |
No |
|
name |
string |
No |
|
provider |
string |
No |
|
asset |
"USDC", "USDT" |
No |
|
chain |
string |
No |
|
risk_tier |
"bluechip", "core", "opportunistic" |
No |
|
apy |
number |
No |
|
volatility |
number |
No |
|
trend_slope_bps_day |
number |
No |
|
forecast_apy |
number |
No |
Naive 7-day trend forecast (decimal fraction) |
risk_factor |
number |
No |
|
risk_adjusted_apy |
number |
No |
|
rank |
integer |
No |
|
recommendation |
"overweight", "neutral", "underweight" |
No |
|
Status
| Field |
Type |
Required |
Description |
object |
"status" |
Yes |
|
overall |
"operational", "degraded", "outage" |
Yes |
|
components |
StatusComponent[] |
Yes |
|
incidents |
object[] |
Yes |
|
uptime_s |
integer |
No |
|
updated_at |
string |
Yes |
format: date-time |
StatusComponent
| Field |
Type |
Required |
Description |
id |
string |
No |
|
name |
string |
No |
|
status |
"operational", "degraded", "outage" |
No |
|
uptime_90d |
number |
No |
|
latency_ms |
integer |
No |
|
UpdateUserRequest
| Field |
Type |
Required |
Description |
label |
['string', 'null'] |
No |
|
email |
['string', 'null'] |
No |
format: email |
metadata |
object |
No |
|
wallets |
string[] |
No |
|
status |
"active", "disabled" |
No |
|
UpliftReport
| Field |
Type |
Required |
Description |
object |
"uplift" |
No |
|
as_of |
string |
No |
format: date-time |
scope |
string |
No |
|
totals |
object |
No |
|
positions |
UpliftRow[] |
No |
|
UpliftRow
| Field |
Type |
Required |
Description |
object |
"uplift_row" |
No |
|
position_id |
string |
No |
|
user_id |
['string', 'null'] |
No |
|
asset |
string |
No |
|
vault_id |
string |
No |
|
principal |
number |
No |
|
current_value |
number |
No |
|
apy |
number |
No |
|
aave_baseline |
number |
No |
|
baseline_apy |
number |
No |
|
hold_baseline |
number |
No |
|
uplift_vs_aave |
number |
No |
|
uplift_vs_hold |
number |
No |
|
Usage
| Field |
Type |
Required |
Description |
object |
"usage" |
Yes |
|
range |
"24h", "7d", "30d" |
Yes |
|
totals |
UsageTotals |
Yes |
|
series |
UsagePoint[] |
Yes |
|
UsagePoint
| Field |
Type |
Required |
Description |
t |
integer |
No |
Epoch ms bucket start |
requests |
integer |
No |
|
errors |
integer |
No |
|
p50_ms |
integer |
No |
|
p99_ms |
integer |
No |
|
UsageTotals
| Field |
Type |
Required |
Description |
requests |
integer |
No |
|
errors |
integer |
No |
|
p50_ms |
integer |
No |
|
p99_ms |
integer |
No |
|
unique_keys |
integer |
No |
|
User
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"user" |
Yes |
|
external_id |
string |
Yes |
|
label |
['string', 'null'] |
No |
|
email |
['string', 'null'] |
No |
|
metadata |
object |
No |
|
wallets |
string[] |
Yes |
|
status |
"active", "disabled" |
Yes |
|
created_at |
string |
Yes |
format: date-time |
updated_at |
string |
No |
format: date-time |
Vault
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"vault" |
Yes |
|
name |
string |
Yes |
|
provider |
"aave", "morpho", "compound", "dolomite", "treasury" |
Yes |
|
asset |
"USDC", "USDT" |
Yes |
|
chain |
"base", "arbitrum" |
Yes |
|
apy |
number |
Yes |
Decimal fraction (0.052 = 5.2%) |
apy_7d_avg |
number |
No |
|
apy_30d_avg |
number |
No |
|
tvl_usd |
number |
No |
|
capacity_usd |
number |
No |
|
risk_tier |
"bluechip", "core", "opportunistic" |
Yes |
|
status |
"active", "paused" |
Yes |
|
inception_date |
string |
No |
format: date |
description |
string |
No |
|
allocation_pct |
number |
No |
|
Webhook
| Field |
Type |
Required |
Description |
id |
string |
Yes |
|
object |
"webhook" |
Yes |
|
url |
string |
Yes |
format: uri |
events |
string[] |
Yes |
|
secret |
string |
Yes |
whsec_... used to compute Webhook-Signature |
active |
boolean |
Yes |
|
created_at |
string |
Yes |
format: date-time |
WithdrawRequest
Provide a positive amount for a partial withdrawal, or { "all": true } to close.
| Field |
Type |
Required |
Description |
amount |
number |
No |
|
all |
boolean |
No |
|
Yield
| Field |
Type |
Required |
Description |
object |
"yield" |
Yes |
|
asset |
string |
Yes |
|
best_apy |
number |
Yes |
|
blend_apy |
number |
Yes |
Allocation-weighted blended APY |
blended_30d |
number |
No |
|
breakdown |
YieldBreakdown[] |
No |
|
history |
YieldHistoryPoint[] |
No |
|
YieldBreakdown
| Field |
Type |
Required |
Description |
vault_id |
string |
No |
|
name |
string |
No |
|
provider |
string |
No |
|
apy |
number |
No |
|
allocation |
number |
No |
|
YieldHistoryPoint
| Field |
Type |
Required |
Description |
t |
integer |
No |
Epoch ms |
apy |
number |
No |
|

Build with us.
Bring your product flow. We'll map the integration together.
Discuss your integration