Euler Finance Rewards API
Reward campaign APRs and per-account reward breakdowns. Rewards APY is intentionally separate from base vault APY in v3; combine them client-side when you need a legacy-style total supply APY.
Reward campaign APRs and per-account reward breakdowns. Rewards APY is intentionally separate from base vault APY in v3; combine them client-side when you need a legacy-style total supply APY.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/euler-rewards-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Euler Data API (V3) Rewards API
version: 3.0.0
description: API specification for Euler Data v3.
servers:
- url: /
description: Current environment
security: []
tags:
- name: Rewards
description: Reward campaign APRs and per-account reward breakdowns. Rewards APY is intentionally separate from base vault APY in v3; combine them client-side when you need a legacy-style total supply APY.
paths:
/v3/apys/rewards:
get:
tags:
- Rewards
summary: Rewards APYs
x-status: implemented
x-cache-ttl: 900
parameters:
- $ref: '#/components/parameters/ChainIdParam'
- name: vault
in: query
required: false
schema:
type: string
responses:
'200':
description: Rewards APYs
headers:
Cache-Control:
$ref: '#/components/headers/Cache-Control'
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/RewardsApy'
meta:
$ref: '#/components/schemas/PaginationMeta'
operationId: getApysRewards
/v3/apys/rewards/history:
get:
tags:
- Rewards
summary: Rewards APY history
description: 'Rewards APY history for a required time range.
Required query params: `chainId`, `from`, `to`.
Optional filters: `vault`, `resolution`, `offset`, `limit`.
Maximum allowed window is 30 days per request.'
x-status: implemented
x-cache-ttl: 300
parameters:
- name: chainId
in: query
required: true
schema:
type: integer
- name: from
in: query
required: true
schema:
type: integer
- name: to
in: query
required: true
schema:
type: integer
- name: resolution
in: query
required: false
schema:
type: string
enum:
- 1h
- 1d
default: 1d
- name: vault
in: query
required: false
schema:
type: string
- $ref: '#/components/parameters/OffsetParam'
- $ref: '#/components/parameters/LimitParam'
responses:
'200':
description: Rewards APY history
headers:
Cache-Control:
$ref: '#/components/headers/Cache-Control'
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/RewardsApyHistoryPoint'
meta:
$ref: '#/components/schemas/PaginationMeta'
'400':
$ref: '#/components/responses/Error400'
'404':
$ref: '#/components/responses/Error404'
'429':
$ref: '#/components/responses/Error429'
'500':
$ref: '#/components/responses/Error500'
operationId: getApysRewardsHistory
/v3/rewards/breakdown:
get:
tags:
- Rewards
summary: Per-user reward breakdowns
x-status: implemented
x-cache-ttl: 60
parameters:
- $ref: '#/components/parameters/ChainIdParam'
- name: account
in: query
required: true
schema:
type: string
- name: vault
in: query
required: false
schema:
type: string
responses:
'200':
description: Reward breakdowns
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
meta:
$ref: '#/components/schemas/PaginationMeta'
operationId: getRewardsBreakdown
components:
schemas:
AssetRef:
type: object
properties:
address:
type: string
symbol:
type: string
decimals:
type: integer
name:
type: string
nullable: true
ErrorResponse:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
- requestId
properties:
code:
type: string
description: 'Domain error code. Examples:
- INVALID_ADDRESS
- CHAIN_NOT_SUPPORTED
- VAULT_NOT_FOUND
- TOKEN_NOT_FOUND
- ACCOUNT_NOT_FOUND
- VALIDATION_ERROR
- RATE_LIMIT_EXCEEDED
- UNSUPPORTED_MEDIA_TYPE
- UNAUTHORIZED
- FORBIDDEN
- INTERNAL_ERROR
'
message:
type: string
requestId:
type: string
details:
type: object
additionalProperties: true
PaginationMeta:
type: object
required:
- timestamp
properties:
total:
type: integer
description: Exact total count when the endpoint provides one.
hasMore:
type: boolean
description: Indicates whether another page exists beyond the current page.
offset:
type: integer
limit:
type: integer
description: Echoed page size after endpoint-side clamping.
timestamp:
type: string
format: date-time
chainId:
type: string
description: Comma-separated chain IDs for multi-chain responses.
RewardsApy:
type: object
properties:
chainId:
type: integer
vault:
type: string
campaigns:
type: array
items:
type: object
properties:
id:
type: string
provider:
type: string
apr:
type: number
description: Reward APR contribution as a public percent number.
rewardToken:
$ref: '#/components/schemas/AssetRef'
source:
type: string
enum:
- merkl
- turtle
- direct
startTimestamp:
type: string
format: date-time
endTimestamp:
type: string
format: date-time
status:
type: string
enum:
- active
- upcoming
- ended
description: Campaign status. 'active' = ongoing, 'upcoming' = not yet started, 'ended' = past.
campaignType:
type: string
collateralAsset:
type: string
requiresCb1Verification:
type: boolean
merklCampaignId:
type: string
description: Original Merkl campaign id when the public campaign is fanned out into vault-level instances.
opportunityType:
type: string
description: Merkl opportunity type that produced this campaign.
distributionType:
type: string
description: Merkl distribution type for the campaign.
whitelist:
type: array
description: Lowercase recipient addresses eligible for whitelist-gated campaigns.
items:
type: string
blacklist:
type: array
description: Lowercase recipient addresses excluded from blacklist-gated campaigns.
items:
type: string
totalApr:
type: number
description: Sum of currently active reward APR contributions as a public percent number.
RewardsApyHistoryPoint:
type: object
properties:
chainId:
type: integer
vault:
type: string
rewardsApy:
type: number
description: Rewards APY as a public percent number.
timestamp:
type: string
format: date-time
description: Bucket timestamp as an ISO-8601 UTC string.
headers:
Cache-Control:
description: Cache policy for this response.
schema:
type: string
X-Request-Id:
description: Request identifier for tracing.
schema:
type: string
parameters:
LimitParam:
name: limit
in: query
required: false
description: Requested page size. Values above the endpoint cap are clamped; the default shared cap is 100.
schema:
type: integer
default: 20
maximum: 100
OffsetParam:
name: offset
in: query
required: false
schema:
type: integer
default: 0
ChainIdParam:
name: chainId
in: query
required: false
schema:
type: string
description: Comma-separated list of chain IDs (single value allowed).
example: 1,10,8453
responses:
Error400:
description: Bad request
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error500:
description: Internal server error
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error429:
description: Rate limited
headers:
Retry-After:
description: Seconds until next request is allowed.
schema:
type: integer
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error404:
description: Not found
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: API key authentication (optional; higher rate limits).
BearerAuth:
type: http
scheme: bearer
bearerFormat: API key
description: 'Alternative to X-API-Key using Authorization: Bearer <key>'
AdminSecret:
type: apiKey
in: header
name: X-Admin-Secret
description: Admin secret (server-to-server) for API key management.
PlatformSession:
type: apiKey
in: cookie
name: euler_platform_session
description: Signed, httpOnly platform-operator browser session cookie.
PlatformCsrf:
type: apiKey
in: header
name: X-CSRF-Token
description: Double-submit CSRF token required for unsafe cookie-authenticated methods.