Euler Finance Curator API
Curator-managed metadata such as labels, descriptions, and visibility controls. This is the operator-owned customization surface in v3.
Curator-managed metadata such as labels, descriptions, and visibility controls. This is the operator-owned customization surface in v3.
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-curator-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) Curator API
version: 3.0.0
description: API specification for Euler Data v3.
servers:
- url: /
description: Current environment
security: []
tags:
- name: Curator
description: Curator-managed metadata such as labels, descriptions, and visibility controls. This is the operator-owned customization surface in v3.
paths:
/v3/curator/vaults:
get:
tags:
- Curator
summary: List vaults labeled by the authenticated curator
x-status: implemented
x-cache-ttl: 30
security:
- ApiKeyAuth: []
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/ChainIdParam'
- $ref: '#/components/parameters/OffsetParam'
- $ref: '#/components/parameters/LimitParam'
responses:
'200':
description: Curator-labeled vaults
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/OracleRouterState'
meta:
$ref: '#/components/schemas/PaginationMeta'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'429':
$ref: '#/components/responses/Error429'
'500':
$ref: '#/components/responses/Error500'
operationId: getCuratorVaults
/v3/curator/vaults/{chainId}/{address}/labels:
put:
tags:
- Curator
summary: Submit or update curator label for a vault
x-status: implemented
x-cache-ttl: 0
security:
- ApiKeyAuth: []
- BearerAuth: []
parameters:
- $ref: '#/components/parameters/ChainIdPath'
- $ref: '#/components/parameters/AddressPath'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- displayName
properties:
displayName:
type: string
minLength: 1
maxLength: 120
pattern: ^[^\u0000-\u001F\u007F-\u009F<>]+$
description: Plain text only; clients must render as text, not HTML or Markdown.
description:
type: string
maxLength: 1024
pattern: ^[^\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown. Tabs and line breaks are allowed.
productCategory:
type: string
maxLength: 120
pattern: ^[^\u0000-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown.
riskTier:
type: string
maxLength: 64
pattern: ^[^\u0000-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown.
strategyDescription:
type: string
maxLength: 2048
pattern: ^[^\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown. Tabs and line breaks are allowed.
responses:
'200':
description: Curator label upserted
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/CuratorVaultLabel'
meta:
$ref: '#/components/schemas/PaginationMeta'
'400':
$ref: '#/components/responses/Error400'
'401':
$ref: '#/components/responses/Error401'
'403':
$ref: '#/components/responses/Error403'
'404':
$ref: '#/components/responses/Error404'
'413':
$ref: '#/components/responses/Error413'
'415':
$ref: '#/components/responses/Error415'
'429':
$ref: '#/components/responses/Error429'
'500':
$ref: '#/components/responses/Error500'
operationId: putCuratorVaultsByChainIdByAddressLabels
components:
schemas:
CuratorVaultLabel:
type: object
required:
- chainId
- vaultAddress
- curator
- displayName
- updatedAt
properties:
chainId:
type: integer
vaultAddress:
type: string
curator:
$ref: '#/components/schemas/CuratorInfo'
displayName:
type: string
minLength: 1
maxLength: 120
pattern: ^[^\u0000-\u001F\u007F-\u009F<>]+$
description: Plain text only; clients must render as text, not HTML or Markdown.
description:
type: string
nullable: true
maxLength: 1024
pattern: ^[^\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown. Tabs and line breaks are allowed.
productCategory:
type: string
nullable: true
maxLength: 120
pattern: ^[^\u0000-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown.
riskTier:
type: string
nullable: true
maxLength: 64
pattern: ^[^\u0000-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown.
strategyDescription:
type: string
nullable: true
maxLength: 2048
pattern: ^[^\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F<>]*$
description: Plain text only; clients must render as text, not HTML or Markdown. Tabs and line breaks are allowed.
updatedAt:
type: string
format: date-time
OracleRouterConfig:
type: object
properties:
asset0:
type: string
asset1:
type: string
oracle:
type: string
blockNumber:
type: string
timestamp:
type: string
format: date-time
txHash:
type: string
OracleRouterVault:
type: object
properties:
vault:
type: string
asset:
type: string
blockNumber:
type: string
timestamp:
type: string
format: date-time
txHash:
type: string
OracleRouterState:
type: object
properties:
chainId:
type: integer
router:
type: string
deployer:
type: string
deployedAt:
type: string
format: date-time
configs:
type: array
items:
$ref: '#/components/schemas/OracleRouterConfig'
vaults:
type: array
items:
$ref: '#/components/schemas/OracleRouterVault'
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.
CuratorInfo:
type: object
required:
- apiKeyId
- name
- keyPrefix
properties:
apiKeyId:
type: string
name:
type: string
keyPrefix:
type: 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:
OffsetParam:
name: offset
in: query
required: false
schema:
type: integer
default: 0
ChainIdPath:
name: chainId
in: path
required: true
schema:
type: integer
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
AddressPath:
name: address
in: path
required: true
schema:
type: string
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:
Error500:
description: Internal server error
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error403:
description: Forbidden
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error400:
description: Bad request
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'
Error413:
description: Request body too large
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error415:
description: Unsupported media type
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Error401:
description: Unauthorized
headers:
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.