Skip to main content

Get strategy history – Earn API

Updated on
Jul 31, 2026

Overview

Up to 100 events (deposits, rebalances, withdrawals, cross-chain bridge-backs), newest-first. forced marks a liquidity- or hide-driven exit from a higher-APY vault.

?format=entries merges the same events with the strategy's CCTP transfers (limit 50) into one entry per action, each with per-chain phases.

Endpoint

GET https://earn-api.quicknode.dev/functions/v1/api/v1/strategies/{id}/history

Authorization

Include the published apikey header. This read request is public and does not require a SIWE signature.

Parameters

ParameterLocationTypeRequiredDescription
idpathstringYesStrategy UUID.
formatquerystring (events | entries)NoResponse shape. `events` (default) is the flat event log (`HistoryResponse`); `entries` is the aggregated accordion view (`HistoryEntriesResponse`).

Example request

curl --request GET \
--url 'https://earn-api.quicknode.dev/functions/v1/api/v1/strategies/b7c1e2d3-0000-4000-8000-000000000001/history' \
--header 'Accept: application/json' \
--header 'apikey: <EARN_PUBLIC_API_KEY>'

Response

The default events format returns the flat event log. Use format=entries for aggregated actions with per-chain phases.

FieldTypeRequiredDescription
eventsarray<object>YesUp to 100 strategy events, newest first.
events[].idstringYesEvent identifier.
events[].strategy_idstringYesStrategy UUID.
events[].wallet_addressstring | nullYesWallet associated with the event.
events[].event_typestringYesLegacy event label.
events[].kindstringYes`deposit`, `crosschain_deposit`, `rebalance`, `crosschain_rebalance`, `withdrawal`, or `crosschain_withdrawal`.
events[].from_vaultstring | nullYesSource vault address, when applicable.
events[].from_vault_namestring | nullYesSource vault name.
events[].from_apynumber | nullYesSource APY percentage.
events[].to_vaultstring | nullYesDestination vault address, when applicable.
events[].to_vault_namestring | nullYesDestination vault name.
events[].to_apynumber | nullYesDestination APY percentage.
events[].usdc_amountnumber | nullYesEvent amount in decimal US dollars.
events[].fee_usdcnumber | nullYesFee in decimal US dollars.
events[].gas_cost_usdcnumber | nullYesGas cost in decimal US dollars.
events[].tx_hashstring | nullYesPrimary transaction hash.
events[].burn_tx_hashstring | nullYesCCTP burn transaction hash.
events[].timestampstringYesEvent timestamp in ISO 8601 format.
events[].chain_idintegerYesChain where the event occurred.
events[].log_indexinteger | nullYesEvent log index, when available.
events[].forcedbooleanYesWhether the rebalance exited a higher-APY vault because of liquidity or hiding rules.
entriesarray<object>Yes for `format=entries`Aggregated actions returned instead of `events` when `format=entries`.
truncatedbooleanYes for `format=entries`True when internal read limits were reached and older activity may be missing.
entries[].idstringYesStable aggregated-entry identifier.
entries[].categorystringYesAction category such as `strategy_enter`, `strategy_exit`, or a rebalance category.
entries[].timestampstringYesTop-level action timestamp.
entries[].amountUsdcnumberYesTotal action amount in decimal US dollars.
entries[].feeUsdcnumber | nullYesTotal action fee in decimal US dollars.
entries[].phasesarray<object>YesPer-chain steps for the action.
entries[].pendingbooleanNoTrue when at least one phase has not confirmed.

Example response

{
"events": [
{
"id": "8453-0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-131",
"strategy_id": "b7c1e2d3-0000-4000-8000-000000000001",
"wallet_address": "0x1234567890abcdef1234567890abcdef12345678",
"event_type": "rebalance",
"kind": "rebalance",
"from_vault": "0x616a4e1db48e22028f6bbf20444cd3b8e3273738",
"from_vault_name": "Seamless USDC Vault",
"from_apy": 4.85,
"to_vault": "0x1a996cb54bb95462040408c06122d45d6cdb6096",
"to_vault_name": "Gauntlet USDC Core",
"to_apy": 6.42,
"usdc_amount": 500,
"fee_usdc": 0.12,
"gas_cost_usdc": 0.03,
"tx_hash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"burn_tx_hash": null,
"timestamp": "2026-07-07T18:00:00.000Z",
"chain_id": 8453,
"log_index": 131,
"forced": false
}
]
}

HTTP responses

StatusDescription
200The flat event log (default) or the aggregated entries view (`format=entries`). Branch on the `format` you requested.
400Invalid strategy id (a UUID is required) or unknown `format`.
429Rate limit exceeded. `Retry-After` (seconds) tells you when to retry. Reads, feedback, and push writes are keyed per IP; create/update/delete are keyed per wallet+IP; deposit/withdraw/claim calldata is keyed per strategy+IP.
500Internal server error.
OpenAPI source

This page is based on operation getStrategyHistory in the Earn OpenAPI 3.1 specification.

Share this doc