OpenAPI Specification
openapi: 3.1.0
info:
title: Breeze Admin Funds API
description: A comprehensive API for managing yield farming operations, funds, and user authentication
contact:
name: Breeze Team
email: support@breeze.com
license:
name: Proprietary
url: https://breeze.com/license
version: 1.0.0
servers:
- url: http://localhost:8080
description: Local development server
- url: https://api.breeze.com
description: Production server
tags:
- name: Funds
description: Fund management operations
paths:
/fund/{fund_id}:
get:
tags:
- Funds
operationId: get_fund
parameters:
- name: fund_id
in: path
description: Fund identifier
required: true
schema:
type: string
responses:
'200':
description: Fund retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ApiFund'
'404':
description: Fund not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/fund/{fund_id}/apy:
get:
tags:
- Funds
operationId: get_fund_apy
parameters:
- name: fund_id
in: path
description: Fund identifier
required: true
schema:
type: string
responses:
'200':
description: Fund APY retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/f64'
'404':
description: Fund not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/fund/{fund_id}/fees:
get:
tags:
- Funds
operationId: get_fund_fees
parameters:
- name: fund_id
in: path
description: Fund identifier
required: true
schema:
type: string
responses:
'200':
description: Fund fees retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Option'
'404':
description: Fund not found or no fees configured
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/fund/{fund_id}/metrics:
get:
tags:
- Funds
operationId: get_fund_metrics
parameters:
- name: start_timestamp
in: query
description: Start timestamp for metrics range (ISO 8601 format)
required: true
schema:
type: string
- name: end_timestamp
in: query
description: End timestamp for metrics range (ISO 8601 format)
required: true
schema:
type: string
- name: aggregation_window
in: query
description: Optional aggregation window (e.g., '1h', '1d', '5m') - if not provided, database will choose optimal window
required: false
schema:
type: string
- name: fund_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Fund metrics retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ApiFundMetrics'
'400':
description: Invalid time range
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Fund not found or no data available
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/fund/{fund_id}/rebalance-history:
get:
tags:
- Funds
operationId: get_fund_rebalance_history
parameters:
- name: per_page
in: query
description: Limit of records to return
required: true
schema:
type: integer
format: int64
minimum: 0
- name: page
in: query
description: Offset of records to return
required: true
schema:
type: integer
format: int64
minimum: 0
- name: include_failed
in: query
description: Include failed rebalance history
required: true
schema:
type: boolean
- name: fund_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Fund rebalance history retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse'
'404':
description: Fund not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/organization/fund-requests:
get:
tags:
- Funds
operationId: get_organization_request_funds
responses:
'200':
description: Fund requests retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ApiFundRequestListResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/organization/fund-resolver:
post:
tags:
- Funds
operationId: fund_resolver
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ApiInputForFundResolver'
required: true
responses:
'200':
description: Fund requested successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ApiFundResolverResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
/organization/request-fund:
post:
tags:
- Funds
operationId: request_new_fund
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ApiInputsForRequestingFund'
required: true
responses:
'200':
description: Fund requested successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ApiFundRequest'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- bearer_auth: []
components:
schemas:
f64:
type: number
format: double
ApiProtocolOptions:
type: object
required:
- kamino_reserve
- marginfi_bank
- drift_market
- jup_lend_market
- jup_lend_reserve
properties:
drift_market:
type: string
jup_lend_market:
type: string
jup_lend_reserve:
type: string
kamino_reserve:
type: string
marginfi_bank:
type: string
ApiYieldSourceTarget:
type: object
required:
- yield_source_type
- protocol
properties:
protocol:
type: string
yield_source_type:
type: string
Option:
oneOf:
- type: 'null'
- type: object
required:
- fund_id
- fees
properties:
fees:
type: array
items:
$ref: '#/components/schemas/ApiFundFee'
fund_id:
type: string
ApiFundRequest:
type: object
required:
- id
- organization_id
- yield_target
- risk_aversion
- base_assets
- fund_type
- status
properties:
base_assets:
type: array
items:
type: string
fund_type:
$ref: '#/components/schemas/ApiFundType'
id:
type: string
organization_id:
type: string
risk_aversion:
$ref: '#/components/schemas/ApiRiskAversion'
status:
$ref: '#/components/schemas/ApiRequestStatus'
yield_target:
type: number
format: double
ApiInputsForRequestingFund:
type: object
required:
- base_assets
- fund_type
- yield_target
- risk_aversion
properties:
base_assets:
type: array
items:
type: string
fund_type:
$ref: '#/components/schemas/ApiFundType'
risk_aversion:
$ref: '#/components/schemas/ApiRiskAversion'
yield_target:
type: number
format: double
ApiFundType:
type: string
enum:
- LendBorrow
- LST
- Staking
- Mixed
ApiYieldSource:
type: object
required:
- pubkey
- source
- yield_type
- current_apy
- risk
- updated_at_timestamp
- base_assets
properties:
base_assets:
type: array
items:
type: string
description: List of supported base assets
current_apy:
type: number
format: double
description: Current annual percentage yield
pubkey:
type: string
description: Unique identifier for the yield source
risk:
type: integer
format: int32
description: Risk level (0-255, lower is safer)
minimum: 0
source:
type: string
description: Protocol/source name (e.g., "kamino", "marginfi", "drift")
updated_at_timestamp:
type: integer
format: int64
description: Timestamp when the data was last updated
minimum: 0
yield_type:
type: string
description: Type of yield source (e.g., "Lending", "TokenStaking", etc.)
ApiYieldAllocation:
type: object
required:
- index
- yield_source_type
- protocol
- protocol_id
- position_id
- deposit_amount
- deposit_timestamp
- current_value
- time_weighted_value
properties:
current_value:
type: integer
format: int64
minimum: 0
deposit_amount:
type: integer
format: int64
minimum: 0
deposit_timestamp:
type: integer
format: int64
index:
type: integer
format: int32
minimum: 0
position_id:
type: string
protocol:
type: string
protocol_id:
type: string
time_weighted_value:
type: integer
minimum: 0
yield_source_type:
type: string
ApiRequestStatus:
type: string
enum:
- PENDING
- APPROVED
- REJECTED
ErrorResponse:
type: object
required:
- message
properties:
message:
type: string
description: Error message description
PaginatedResponse:
type: object
description: Paginated response wrapper
required:
- data
- meta
properties:
data:
type: array
items:
$ref: '#/components/schemas/ProtocolYieldSources'
meta:
$ref: '#/components/schemas/PaginationMeta'
description: Pagination metadata
ApiFund:
type: object
required:
- fund_id
- base_asset_token_mint
- base_asset_token_decimals
- base_asset_token_account
- total_deposits
- total_users
- last_value_tracked_at
- total_shares
- share_price
- current_value
- authority
- updated_at_timestamp
- updated_at_slot
- risk_max
- risk_aversion_bps
- allocated_to_yield
- unallocated_amount
- bump
- token_account_bump
- index_number
- lookup_table
- has_fees
- constraints
- allocations
- protocol_options
- last_rebalance_slot
- status
properties:
allocated_to_yield:
type: integer
minimum: 0
allocations:
type: array
items:
$ref: '#/components/schemas/ApiYieldAllocation'
assigned_org:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/ApiFundOrganization'
authority:
type: string
base_asset_token_account:
type: string
base_asset_token_decimals:
type: integer
format: int32
minimum: 0
base_asset_token_mint:
type: string
bump:
type: integer
format: int32
minimum: 0
constraints:
type: array
items:
$ref: '#/components/schemas/ApiFundConstraint'
current_value:
type: integer
minimum: 0
fund_id:
type: string
has_fees:
type: boolean
index_number:
type: integer
format: int64
minimum: 0
last_rebalance_slot:
type: integer
format: int64
minimum: 0
last_value_tracked_at:
type: integer
format: int64
minimum: 0
lookup_table:
type: string
protocol_options:
$ref: '#/components/schemas/ApiProtocolOptions'
risk_aversion_bps:
type: integer
format: int64
minimum: 0
risk_max:
type: integer
format: int64
minimum: 0
share_price:
type: integer
format: int64
minimum: 0
status:
$ref: '#/components/schemas/ApiLendFundStatus'
token_account_bump:
type: integer
format: int32
minimum: 0
total_deposits:
type: integer
minimum: 0
total_shares:
type: integer
minimum: 0
total_users:
type: integer
minimum: 0
unallocated_amount:
type: integer
minimum: 0
updated_at_slot:
type: integer
format: int64
minimum: 0
updated_at_timestamp:
type: integer
format: int64
minimum: 0
withdraw_authority:
type:
- string
- 'null'
ProtocolYieldSources:
type: object
required:
- protocol
- yield_sources
- count
properties:
count:
type: integer
description: Number of yield sources in this protocol
minimum: 0
protocol:
type: string
description: Protocol/source name (e.g., "kamino", "marginfi", "drift")
yield_sources:
type: array
items:
$ref: '#/components/schemas/ApiYieldSource'
description: List of yield sources for this protocol
ApiFundMetrics:
type: object
required:
- start
- end
- aggregation_window
- fund_id
- data
properties:
aggregation_window:
type: string
description: Aggregation window (e.g., "1h", "1d", "5m") representing time between data points
data:
type: array
items:
$ref: '#/components/schemas/ApiFundMetricDataPoint'
description: Array of aggregated metric data points
end:
type: string
description: End timestamp of the data range
fund_id:
type: string
description: Fund ID for the metrics
start:
type: string
description: Start timestamp of the data range
ApiFundResolverResponse:
type: object
required:
- fund_id
properties:
fund_id:
type: string
ApiRiskAversion:
type: string
enum:
- LOW
- MEDIUM
- HIGH
ApiFundRequestListResponse:
type: object
required:
- requests
properties:
requests:
type: array
items:
$ref: '#/components/schemas/ApiFundRequest'
ApiLendFundStatus:
type: string
enum:
- Live
- Paused
- WithdrawOnly
ApiConstraintType:
type: string
enum:
- MaxPercentage
- MaxBaseAssetAmount
PaginationMeta:
type: object
description: Pagination metadata
required:
- page
- per_page
- total
- total_pages
- has_more
properties:
has_more:
type: boolean
description: Whether there are more pages
page:
type: integer
format: int32
description: Current page number
minimum: 0
per_page:
type: integer
format: int32
description: Number of items per page
minimum: 0
total:
type: integer
format: int64
description: Total number of items
minimum: 0
total_pages:
type: integer
format: int32
description: Total number of pages
minimum: 0
ApiFundFee:
type: object
required:
- fee_type
- fee_bps
- recipient
properties:
fee_bps:
type: integer
format: int32
minimum: 0
fee_type:
type: string
recipient:
type: string
ApiInputForFundResolver:
type: object
required:
- strategy_id
- base_asset
properties:
base_asset:
type: string
strategy_id:
type: string
ApiFundConstraint:
type: object
required:
- yield_source_target
- constraint_type
- value
properties:
constraint_type:
$ref: '#/components/schemas/ApiConstraintType'
value:
type: integer
format: int64
minimum: 0
yield_source_target:
$ref: '#/components/schemas/ApiYieldSourceTarget'
ApiFundMetricDataPoint:
type: object
required:
- time
- allocated_to_yield
- current_value
- current_value_usd
- unallocated_amount
- unallocated_amount_usd
- allocation_count
- user_count
- total_deposits
- current_apy
- risk_level
- share_price
- base_asset_price_usd
properties:
allocated_to_yield:
type: integer
minimum: 0
allocation_count:
type: integer
minimum: 0
base_asset_price_usd:
type: number
format: double
current_apy:
type: number
format: double
current_value:
type: integer
minimum: 0
current_value_usd:
type: number
format: double
risk_level:
type: integer
format: int64
minimum: 0
share_price:
type: integer
format: int64
minimum: 0
time:
type: string
total_deposits:
type: integer
minimum: 0
unallocated_amount:
type: integer
minimum: 0
unallocated_amount_usd:
type: number
format: double
user_count:
type: integer
format: int64
minimum: 0
ApiFundOrganization:
type: object
required:
- id
- name
properties:
id:
type: string
name:
type: string
securitySchemes:
api_key:
type: apiKey
in: header
name: x-api-key
bearer_auth:
type: http
scheme: bearer
bearerFormat: JWT