Overview
Yield snapshots (~55-min cadence) for the trailing hours, oldest-first,
plus period_fee_usdc and net_yield (see YieldSnapshot). USDC values
are decimal dollars; weighted_apy is a percentage. Unknown strategy: 404. Capped at 2000 rows keeping the newest; truncated: true flags a
capped response.
Endpoint
GET https://earn-api.quicknode.dev/functions/v1/api/v1/strategies/{id}/performance
Authorization
Include the published apikey header. This read request is public and does not require a SIWE signature.
Parameters
| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Strategy UUID. |
| hours | query | integer | No | Trailing window in hours. Defaults to 168 (7d); clamped to [1, 2160] (90d). |
Example request
curl --request GET \
--url 'https://earn-api.quicknode.dev/functions/v1/api/v1/strategies/b7c1e2d3-0000-4000-8000-000000000001/performance?hours=168' \
--header 'Accept: application/json' \
--header 'apikey: <EARN_PUBLIC_API_KEY>'
Response
| Field | Type | Required | Description |
|---|---|---|---|
| hours | integer | Yes | The clamped trailing window in hours (1..2160). |
| truncated | boolean | Yes | True when the window held more than 2000 snapshots and the response was capped (see the endpoint description for which end gets dropped). |
| snapshots | array<object> | Yes | Oldest-first yield snapshots within the window. |
| snapshots[].id | string | Yes | Snapshot identifier. |
| snapshots[].total_value_usdc | number | null | Yes | Total strategy value in decimal US dollars. |
| snapshots[].period_yield | number | null | Yes | Gross yield since the preceding snapshot, in decimal US dollars. |
| snapshots[].cumulative_yield | number | null | Yes | Cumulative gross yield since strategy inception, in decimal US dollars. |
| snapshots[].cumulative_fees | number | null | Yes | Cumulative fees since strategy inception, in decimal US dollars. |
| snapshots[].period_fee_usdc | number | Yes | Fees attributed to this snapshot, in decimal US dollars. |
| snapshots[].net_yield | number | Yes | `period_yield - period_fee_usdc`, in decimal US dollars. |
| snapshots[].period_cover_fee_usdc | number | No | OpenCover premium for this snapshot. Present only for covered strategies. |
| snapshots[].weighted_apy | number | null | Yes | Weighted realized APY as a percentage. |
| snapshots[].snapshot_at | string | Yes | Snapshot timestamp in ISO 8601 format. |
Example response
{
"hours": 168,
"truncated": false,
"snapshots": [
{
"id": "d9e4f5a6-0000-4000-8000-000000000101",
"total_value_usdc": 1012.34,
"period_yield": 1.21,
"cumulative_yield": 12.34,
"cumulative_fees": 0.87,
"period_fee_usdc": 0.05,
"net_yield": 1.16,
"weighted_apy": 6.42,
"snapshot_at": "2026-07-07T18:00:00.000Z"
}
]
}
HTTP responses
| Status | Description |
|---|---|
| 200 | The clamped window and the yield snapshot series. |
| 400 | Invalid strategy id (a UUID is required). |
| 404 | Resource not found. |
| 429 | Rate 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. |
| 500 | Internal server error. |
OpenAPI source
This page is based on operation getStrategyPerformance in the Earn OpenAPI 3.1 specification.