moex-vibe/docs/openapi/openapi.yaml

1061 lines
24 KiB
YAML

openapi: 3.0.0
paths:
/api/v1/health:
get:
operationId: HealthController_check
summary: Проверка состояния сервиса
parameters: []
responses:
'200':
description: ''
tags:
- Health
/api/v1/auth/register:
post:
operationId: AuthController_register
summary: Register new user
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterDto'
responses:
'201':
description: ''
tags:
- Auth
/api/v1/auth/login:
post:
operationId: AuthController_login
summary: Login with email and password
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LoginDto'
responses:
'201':
description: ''
tags:
- Auth
/api/v1/auth/refresh:
post:
operationId: AuthController_refresh
summary: Refresh access token
parameters: []
responses:
'200':
description: ''
tags:
- Auth
/api/v1/auth/logout:
post:
operationId: AuthController_logout
summary: Logout user
parameters: []
responses:
'200':
description: ''
tags:
- Auth
security:
- bearer: []
/api/v1/auth/me:
get:
operationId: AuthController_getProfile
summary: Get current user profile
parameters: []
responses:
'200':
description: ''
tags:
- Auth
security:
- bearer: []
patch:
operationId: AuthController_updateProfile
summary: Update current user profile
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProfileDto'
responses:
'200':
description: ''
tags:
- Auth
security:
- bearer: []
/api/v1/securities/search:
get:
operationId: SecuritiesController_search
summary: Поиск по инструментам
parameters:
- name: q
required: true
in: query
description: Поисковый запрос (тикер, название, ISIN)
schema:
type: string
- name: type
required: false
in: query
schema:
default: all
enum:
- all
- share
- bond
type: string
- name: limit
required: false
in: query
schema:
default: 20
type: number
responses:
'200':
description: ''
tags:
- Securities
/api/v1/securities/screener:
get:
operationId: SecuritiesController_screener
summary: Фильтр ценных бумаг по параметрам
parameters:
- name: type
required: true
in: query
schema:
enum:
- share
- bond
type: string
- name: priceMin
required: false
in: query
schema:
type: number
- name: priceMax
required: false
in: query
schema:
type: number
- name: volumeMin
required: false
in: query
schema:
type: number
- name: listLevel
required: false
in: query
schema:
type: number
- name: changePercentMin
required: false
in: query
schema:
type: number
- name: changePercentMax
required: false
in: query
schema:
type: number
- name: capitalizationMin
required: false
in: query
schema:
type: number
- name: yieldMin
required: false
in: query
schema:
type: number
- name: yieldMax
required: false
in: query
schema:
type: number
- name: durationMin
required: false
in: query
schema:
type: number
- name: durationMax
required: false
in: query
schema:
type: number
- name: couponMin
required: false
in: query
schema:
type: number
- name: couponMax
required: false
in: query
schema:
type: number
- name: couponPercentMin
required: false
in: query
schema:
type: number
- name: couponPercentMax
required: false
in: query
schema:
type: number
- name: maturityBefore
required: false
in: query
schema:
type: string
- name: maturityAfter
required: false
in: query
schema:
type: string
- name: bondType
required: false
in: query
schema:
type: string
- name: sortBy
required: false
in: query
schema:
default: price
type: string
- name: sortOrder
required: false
in: query
schema:
default: asc
type: string
- name: page
required: false
in: query
schema:
default: 1
type: number
- name: pageSize
required: false
in: query
schema:
default: 20
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ScreenerResultDto'
tags:
- Securities
/api/v1/securities/shares/{secid}:
get:
operationId: SharesController_getShare
summary: Получить спецификацию акции
parameters:
- name: secid
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
tags:
- Shares
/api/v1/securities/shares/{secid}/marketdata:
get:
operationId: SharesController_getMarketData
summary: Получить рыночные данные акции
parameters:
- name: secid
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
tags:
- Shares
/api/v1/securities/shares/{secid}/dividends:
get:
operationId: SharesController_getDividends
summary: Получить дивиденды
parameters:
- name: secid
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
tags:
- Shares
/api/v1/securities/shares/{secid}/history:
get:
operationId: SharesController_getHistory
summary: Получить дневную историю торгов акции
parameters:
- name: secid
required: true
in: path
schema:
type: string
- name: from
required: true
in: query
schema:
type: string
- name: till
required: true
in: query
schema:
type: string
responses:
'200':
description: ''
tags:
- Shares
/api/v1/securities/bonds/{secid}:
get:
operationId: BondsController_getBond
summary: Получить спецификацию облигации
parameters:
- name: secid
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
tags:
- Bonds
/api/v1/securities/bonds/{secid}/marketdata:
get:
operationId: BondsController_getMarketData
summary: Получить рыночные данные облигации
parameters:
- name: secid
required: true
in: path
schema:
type: string
responses:
'200':
description: ''
tags:
- Bonds
/api/v1/securities/bonds/{secid}/history:
get:
operationId: BondsController_getHistory
summary: Получить дневную историю торгов облигации
parameters:
- name: secid
required: true
in: path
schema:
type: string
- name: from
required: true
in: query
schema:
type: string
- name: till
required: true
in: query
schema:
type: string
responses:
'200':
description: ''
tags:
- Bonds
/api/v1/securities/shares/{secid}/candles:
get:
operationId: CandlesController_getShareCandles
summary: Получить свечи акции
parameters:
- name: secid
required: true
in: path
schema:
type: string
- name: interval
required: true
in: query
schema:
enum:
- 1h
- 24h
type: string
- name: from
required: true
in: query
schema:
format: date
example: '2025-06-13'
type: string
- name: till
required: true
in: query
schema:
format: date
example: '2026-06-13'
type: string
responses:
'200':
description: ''
tags:
- Candles
/api/v1/securities/bonds/{secid}/candles:
get:
operationId: CandlesController_getBondCandles
summary: Получить свечи облигации
parameters:
- name: secid
required: true
in: path
schema:
type: string
- name: interval
required: true
in: query
schema:
enum:
- 1h
- 24h
type: string
- name: from
required: true
in: query
schema:
format: date
example: '2025-06-13'
type: string
- name: till
required: true
in: query
schema:
format: date
example: '2026-06-13'
type: string
responses:
'200':
description: ''
tags:
- Candles
/api/v1/portfolios:
get:
operationId: PortfolioController_findAll
summary: Get all portfolios for current user
parameters: []
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PortfolioListResponseDto'
tags:
- Portfolios
security:
- bearer: []
post:
operationId: PortfolioController_create
summary: Create a new portfolio
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePortfolioDto'
responses:
'201':
description: ''
tags:
- Portfolios
security:
- bearer: []
/api/v1/portfolios/{id}:
get:
operationId: PortfolioController_findOne
summary: Get portfolio details with positions and prices
parameters:
- name: id
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PortfolioDetailResponseDto'
tags:
- Portfolios
security:
- bearer: []
patch:
operationId: PortfolioController_update
summary: Update portfolio
parameters:
- name: id
required: true
in: path
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdatePortfolioDto'
responses:
'200':
description: ''
tags:
- Portfolios
security:
- bearer: []
delete:
operationId: PortfolioController_remove
summary: Delete portfolio
parameters:
- name: id
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
tags:
- Portfolios
security:
- bearer: []
/api/v1/portfolios/{id}/positions:
post:
operationId: PortfolioController_addPosition
summary: Add position to portfolio
parameters:
- name: id
required: true
in: path
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddPositionDto'
responses:
'201':
description: ''
tags:
- Portfolios
security:
- bearer: []
/api/v1/portfolios/{id}/positions/{positionId}:
patch:
operationId: PortfolioController_updatePosition
summary: Update position
parameters:
- name: id
required: true
in: path
schema:
type: number
- name: positionId
required: true
in: path
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdatePositionDto'
responses:
'200':
description: ''
tags:
- Portfolios
security:
- bearer: []
delete:
operationId: PortfolioController_removePosition
summary: Remove position from portfolio
parameters:
- name: id
required: true
in: path
schema:
type: number
- name: positionId
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
tags:
- Portfolios
security:
- bearer: []
/api/v1/portfolios/{id}/analytics:
get:
operationId: PortfolioController_getAnalytics
summary: Get portfolio analytics with PnL
parameters:
- name: id
required: true
in: path
schema:
type: number
responses:
'200':
description: ''
tags:
- Portfolios
security:
- bearer: []
info:
title: MoexVibe API
description: ''
version: 1.0.0
contact: {}
tags: []
servers: []
components:
securitySchemes:
bearer:
scheme: bearer
bearerFormat: JWT
type: http
schemas:
RegisterDto:
type: object
properties:
email:
type: string
example: user@example.com
password:
type: string
example: securePass123
name:
type: string
example: John
required:
- email
- password
LoginDto:
type: object
properties:
email:
type: string
example: user@example.com
password:
type: string
example: securePass123
required:
- email
- password
UpdateProfileDto:
type: object
properties:
name:
type: string
example: John Doe
ScreenerItemDto:
type: object
properties:
secid:
type: string
example: SBER
shortName:
type: string
example: Сбербанк
isin:
type: string
example: RU0009029540
type:
type: string
enum:
- share
- bond
price:
type: object
example: 322.35
change:
type: object
example: 1.15
changePercent:
type: object
example: 0.36
volume:
type: number
example: 1925163
listLevel:
type: number
example: 1
capitalization:
type: object
example: 6958336818320
yieldToMaturity:
type: object
example: 12.71
duration:
type: object
example: 4.5
couponValue:
type: object
example: 40.64
couponPercent:
type: object
example: 8.15
accruedInt:
type: object
example: 29.48
matDate:
type: object
example: '2027-02-03'
bondType:
type: object
example: ОФЗ-ПД
required:
- secid
- shortName
- isin
- type
- volume
- listLevel
ScreenerResultDto:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/ScreenerItemDto'
total:
type: number
page:
type: number
pageSize:
type: number
totalPages:
type: number
required:
- items
- total
- page
- pageSize
- totalPages
PortfolioListResponseDto:
type: object
properties:
id:
type: number
name:
type: string
description:
type: object
currency:
type: string
default: RUB
createdAt:
type: string
updatedAt:
type: string
totalValue:
type: number
description: Total market value of all positions
positionCount:
type: number
description: Total number of positions
shareCount:
type: number
description: Number of share positions
bondCount:
type: number
description: Number of bond positions
required:
- id
- name
- currency
- createdAt
- updatedAt
- totalValue
- positionCount
- shareCount
- bondCount
CreatePortfolioDto:
type: object
properties:
name:
type: string
example: Мой портфель
description:
type: string
example: Описание портфеля
currency:
type: string
default: RUB
enum:
- RUB
- USD
- EUR
- CNY
- KZT
- BYN
required:
- name
PositionWithPriceDto:
type: object
properties:
id:
type: number
secid:
type: string
example: SBER
shortName:
type: object
type:
type: string
example: share
enum:
- share
- bond
quantity:
type: number
example: 10
buyPrice:
type: object
buyDate:
type: object
notes:
type: object
tags:
type: object
currentPrice:
type: object
totalCost:
type: object
currentValue:
type: object
weightPercent:
type: number
pnl:
type: object
pnlPercent:
type: object
dividendIncome:
type: object
totalReturn:
type: object
totalReturnPercent:
type: object
change:
type: object
changePercent:
type: object
yieldToMaturity:
type: object
duration:
type: object
couponValue:
type: object
couponPercent:
type: object
nextCouponDate:
type: object
matDate:
type: object
accruedInt:
type: object
bid:
type: object
offer:
type: object
couponPeriod:
type: object
bondType:
type: object
offerDate:
type: object
required:
- id
- secid
- type
- quantity
- weightPercent
PortfolioSummaryDto:
type: object
properties:
totalInvested:
type: number
totalValue:
type: number
totalPnl:
type: number
totalPnlPercent:
type: object
totalDividends:
type: number
totalReturn:
type: number
totalReturnPercent:
type: object
positionCount:
type: number
weightedYield:
type: object
required:
- totalInvested
- totalValue
- totalPnl
- totalPnlPercent
- totalDividends
- totalReturn
- totalReturnPercent
- positionCount
- weightedYield
PortfolioDetailResponseDto:
type: object
properties:
id:
type: number
name:
type: string
description:
type: object
currency:
type: string
default: RUB
createdAt:
type: string
updatedAt:
type: string
positions:
type: array
items:
$ref: '#/components/schemas/PositionWithPriceDto'
totalValue:
type: number
analytics:
$ref: '#/components/schemas/PortfolioSummaryDto'
required:
- id
- name
- currency
- createdAt
- updatedAt
- positions
- totalValue
- analytics
UpdatePortfolioDto:
type: object
properties:
name:
type: string
example: Мой портфель
description:
type: string
example: Обновлённое описание
currency:
type: string
default: RUB
enum:
- RUB
- USD
- EUR
- CNY
- KZT
- BYN
AddPositionDto:
type: object
properties:
secid:
type: string
example: SBER
quantity:
type: number
example: 10
buyPrice:
type: number
example: 250.5
buyDate:
type: string
example: '2026-06-01'
notes:
type: string
example: Покупка на дип
tags:
type: string
example:
- DIVIDEND
- GROWTH
enum:
- DIVIDEND
- GROWTH
- DEFENSIVE
- SPECULATIVE
- BOND
- ETF
- GOVERNMENT
- CASH
required:
- secid
- quantity
UpdatePositionDto:
type: object
properties:
quantity:
type: number
example: 15
buyPrice:
type: number
example: 260
buyDate:
type: string
example: '2026-06-15'
notes:
type: string
example: Докупка
tags:
type: string
example:
- DIVIDEND
enum:
- DIVIDEND
- GROWTH
- DEFENSIVE
- SPECULATIVE
- BOND
- ETF
- GOVERNMENT
- CASH