Skip to main content

Get strategy – Earn API

Updated on
Jul 31, 2026

Overview

Single-strategy detail: config, live-valued positions, cycle/gauge fields (cycle_state, swap_signals, last_skip, …), closed positions, and the same computed rollups as the list. Poll this endpoint to watch a status transition (e.g. pending_setupactive, closingclosed).

Endpoint

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

Authorization

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

Parameters

ParameterLocationTypeRequiredDescription
idpathstringYesStrategy UUID.

Example request

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

Response

The strategy object includes every field documented by List strategies, plus the detail-only fields below.

FieldTypeRequiredDescription
strategyobjectYes`closed_positions` is OMITTED (not an empty array) when the strategy has no deactivated positions; every other detail-only field is always present. `live_apy` and `strategy_apy` are always present on detail.
strategy.positionsarray<object>YesActive positions with current APY and live USDC values.
strategy.positions[].current_apynumber | nullNoAPY currently attributed to the position at the strategy's smoothing window. Present only on detail responses.
strategy.closed_positionsarray<object>NoDeactivated positions. Omitted when none exist.
strategy.vault_namesobjectYesMap of vault keys to display names.
strategy.last_cycle_atstring | nullYesTimestamp of the most recent strategy cycle.
strategy.cycle_statestring | nullYes`idle`, `pending`, `rebalancing`, `error`, `action_needed`, or `null`.
strategy.last_errorstring | nullYesMost recent cycle error.
strategy.swap_signalsarray<object> | nullYesOpaque internal swap signals; clients should not depend on their shape.
strategy.unmatched_exitsarray<object> | nullYesExit records not matched to a position.
strategy.last_skipobject | nullYesMost recent skipped-cycle details.
strategy.has_agreementbooleanYesWhether the owner recorded the Terms of Service agreement.
strategy.pending_rebalanceobject | nullYesCurrent same-chain rebalance state, or `null`.
strategy.coverobjectNoOpenCover premium summary, present only for covered strategies.

Example response

This abbreviated response uses synthetic strategy data:

{
"strategy": {
"id": "b7c1e2d3-0000-4000-8000-000000000001",
"wallet_address": "0x1234567890abcdef1234567890abcdef12345678",
"name": "My USDC Strategy",
"capital_usdc": 1000,
"delta_pct": 3,
"cross_chain_delta_pct": 5,
"delta_confirmations": 2,
"max_positions": 2,
"chain_ids": "8453,42161",
"status": "active",
"active": true,
"total_value_usdc": 1012.34,
"pending_bridge_value_usdc": 0,
"net_value_usdc": 1012.34,
"realized_apy": 5.87,
"live_apy": 6.42,
"strategy_apy": 6.18,
"cycle_state": "idle",
"has_agreement": true,
"positions": [
{
"vault_name": "Seamless USDC Vault",
"chain_id": 8453,
"usdc_value": 600.25,
"current_apy": 6.48
}
]
}
}

HTTP responses

StatusDescription
200Strategy detail.
404Strategy not found.
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 getStrategy in the Earn OpenAPI 3.1 specification.

Share this doc