Ripio WebSocket Stream API
The WebSocket Stream API from Ripio — 0 operation(s) for websocket stream.
The WebSocket Stream API from Ripio — 0 operation(s) for websocket stream.
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/ripio-websocket-stream-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: Ripio WebSocket Stream API
version: v4.0
contact:
name: Jorn Filho
x-logo:
url: https://trade-images.ripio.com/general_images/logo-ripio.png
href: '#'
description: 'Operations tagged WebSocket Stream across 2 of this provider''s published API definitions: ripio-trade-openapi.yml, ripio-websocket-stream-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.ripiotrade.co/v4/
tags:
- name: WebSocket Stream
description: Our websocket stream service provides real time updates about market data via websocket protocol.
paths: {}
webhooks:
trade:
post:
summary: trade@BASE_QUOTE
description: This topic listens for trades of a given pair (BASE_QUOTE), so it will be notified every time a trade happens.
operationId: trade
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequest'
example:
method: subscribe
topics:
- trade@ETH_BRL
responses:
'200':
description: Trade
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_ISocketTrade_'
example:
id: 1
topic: trade@ETH_BRL
timestamp: 1672856503549
body:
amount: 0.2404764
date: '2019-01-03T02:27:33.947Z'
id: 2B222F22-5235-45FA-97FC-E9DBFA2575EE
maker_order_id: F49F5BD8-3F5B-4364-BCEE-F36F62DB966A
maker_side: buy
maker_type: limit
pair: ETH_BRL
price: 15160
taker_order_id: FEAB5CEC-7F9E-4F95-B67D-9E8D5C739BE3
taker_side: sell
taker_type: market
timestamp: 1675780847920
total_value: 3638.4
servers:
- url: https://api.ripiotrade.co/v4/
orderbook/level_3:
post:
summary: orderbook/level_3@BASE_QUOTE
description: This topic will notify whenever an order is opened, canceled or a trade happens for the given pair (BASE_QUOTE). By default, the system notifies the topic every 30 seconds, even if a transaction has not taken place. Each side will contain up to 100 orders.
operationId: orderbook/level_3
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequest'
example:
method: subscribe
topics:
- orderbook/level_3@ETH_BRL
responses:
'200':
description: Level 3 orderbook
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_IOrderBookLevel3_'
example:
id: 2
topic: orderbook/level_3@ETH_BRL
timestamp: 1672857013503
body:
asks:
- amount: 184.9
id: 43758DB1-3257-4C98-A20F-7F246E460A50
price: 20
- amount: 10
id: 4B86ACC5-76B2-4003-AF20-F398CE9EDC92
price: 20
bids:
- amount: 400
id: B075FDF9-9B68-4299-87E0-5FC8B40B3ABD
price: 5
- amount: 20
id: 606763A5-4B95-4216-9F07-69C6B51D64F0
price: 5
pair: ETH_BRL
hash: '2254383345'
servers:
- url: https://api.ripiotrade.co/v4/
orderbook/level_2:
post:
summary: orderbook/level_2@BASE_QUOTE
description: This topic will notify whenever an order is opened, canceled or a trade happens for the given pair (BASE_QUOTE). Since it is a level 2 orderbook, the orders are going to be grouped by price. By default, the system notifies the topic every 30 seconds, even if a transaction has not taken place. Each side will contain up to 100 price levels.
operationId: orderbook/level_2
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequest'
example:
method: subscribe
topics:
- orderbook/level_2@ETH_BRL
responses:
'200':
description: Level 2 orderbook
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_IOrderBookLevel2WithoutUsers_'
example:
id: 3
topic: orderbook/level_2@ETH_BRL
timestamp: 1672856653428
body:
asks:
- amount: 184.9
price: 20
- amount: 10
price: 25
bids:
- amount: 400
price: 5
- amount: 20
price: 4
pair: ETH_BRL
hash: '2254383345'
servers:
- url: https://api.ripiotrade.co/v4/
orderbook/level_2_delta:
post:
summary: orderbook/level_2_delta@BASE_QUOTE
description: 'This topic will always notify a change at a price level of the order book when an order is opened, canceled or a trade takes place for a given pair (BASE_QUOTE). In other words, it is the variation in the amount of assets available for buy or sell at a given price level. In each topic event the `amount` is the absolute quantity for a price level, and if the `amount` is 0, you should remove the price level from the order book.
**Important!** In addition to the delta messages, the first message sent upon connection will be a snapshot of the level 2 order book.'
operationId: orderbook/level_2_delta
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequest'
example:
method: subscribe
topics:
- orderbook/level_2_delta@ETH_BRL
responses:
'200':
description: Level 2 delta orderbook
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_IOrderBookLevel2WithoutUsers_'
example:
id: 4
topic: orderbook/level_2_delta@ETH_BRL
timestamp: 1672856653428
body:
asks:
- amount: 0
price: 25
bids:
- amount: 20
price: 25
pair: ETH_BRL
hash: '2254383345'
servers:
- url: https://api.ripiotrade.co/v4/
orderbook/level_2_with_users:
post:
summary: orderbook/level_2_with_users@BASE_QUOTE
description: This topic will notify whenever an order is opened, canceled or a trade happens for the given pair (BASE_QUOTE). Since it is a level 2 orderbook, the orders are going to be grouped by price, and this also includes an array with users ids that have an order at that level. By default, the system notifies the topic every 30 seconds, even if a transaction has not taken place. Each side will contain up to 100 price levels.
operationId: orderbook/level_2_with_users
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequest'
example:
method: subscribe
topics:
- orderbook/level_2_with_users@ETH_BRL
responses:
'200':
description: Level 2 orderbook with users
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_IOrderBookLevel2_'
example:
id: 5
topic: orderbook/level_2_with_users@ETH_BRL
timestamp: 1672856653428
body:
asks:
- amount: 184.9
price: 20
users:
- 5EF6B2C9-28C9-4C50-99EA-7F3A38958F0A
- amount: 10
price: 25
users:
- 5EF6B2C9-28C9-4C50-99EA-7F3A38958F0A
bids:
- amount: 400
price: 5
users:
- 5EF6B2C9-28C9-4C50-99EA-7F3A38958F0A
- amount: 20
price: 4
users:
- 5EF6B2C9-28C9-4C50-99EA-7F3A38958F0A
pair: ETH_BRL
hash: '2254383345'
servers:
- url: https://api.ripiotrade.co/v4/
ticker:
post:
summary: ticker@BASE_QUOTE
description: This topic delivers notifications for 24 hour window statistics for a pair (BASE_QUOTE), and this will happen whenever an order is opened, canceled or a trade happens for the given pair. By default, the system notifies the topic every 30 seconds, even if a transaction has not taken place.
operationId: ticker
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequest'
example:
method: subscribe
topics:
- ticker@ETH_BRL
responses:
'200':
description: Ticker
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_ITickerV4_'
example:
id: 6
topic: ticker@ETH_BRL
timestamp: 1672856683447
body:
ask: 4.01
base_code: ETH
base_id: 27698137-8178-4395-9841-C1B1505C9352
conversions:
- currency_code: BRL
volume: 0
- currency_code: BTC
volume: 0
- currency_code: ETH
volume: 0
- currency_code: USD
volume: 0
- currency_code: USDC
volume: 0
- currency_code: UXD
volume: 0
- currency_code: ARS
volume: 0
- currency_code: MXN
volume: 0
bid: 5
date: '2022-09-28T19:13:40.887Z'
high: 20
low: 20
pair: ETH_BRL
price_change_percent_24h: '-16.66'
quote_code: BRL
quote_id: 48898138-8623-4555-9468-B1A1505A9352
quote_volume: 600
trades_quantity: 10
volume: 124
first: 10
last: 20
servers:
- url: https://api.ripiotrade.co/v4/
order_status:
post:
summary: order_status
description: This topic is responsible for notifing the user every time one of its orders is updated (created, executed, canceled).
operationId: order_status
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequestWithTicket'
example:
method: subscribe
topics:
- order_status
ticket: 97794B95-AFE7-454F-81B0-9109112548C2
responses:
'200':
description: Order status
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_IOrderStatus_'
example:
id: 7
topic: order_status
timestamp: 1672856713677
body:
amount: 4
average_execution_price: 6
id: F55E4E01-C39B-4AA7-848B-1C6A362C386E
created_at: '2023-01-24T17:28:32.247Z'
executed_amount: 4
external_id: null
pair: ETH_BRL
price: 6
remaining_amount: 0
side: buy
status: executed_completely
type: limit
updated_at: '2023-01-24T17:28:33.993Z'
user_id: 30B8CDBB-BDBD-4B60-A90F-860AB46B76F7
servers:
- url: https://api.ripiotrade.co/v4/
balance:
post:
summary: balance
description: Every time there is a change in the user's balance, this topic will be notified. Actions like create / cancel order, deposit / withdraw currency or a trade being executed, are gonna change the use''s balance.
operationId: balance
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequestWithTicket'
example:
method: subscribe
topics:
- balance
ticket: 97794B95-AFE7-454F-81B0-9109112548C2
responses:
'200':
description: Balance
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_SocketBalance_'
example:
id: 8
topic: balance
timestamp: 1672856833684
body:
user_id: 299E7131-CE8C-422F-A1CF-497BFA116F89
balances:
- available_amount: 1
currency_code: BTC
locked_amount: 0.5
conversions:
- available_amount: 50003247
currency_code: UXD
locked_amount: 0
- available_amount: 10000649.4
currency_code: BRL
locked_amount: 0
- available_amount: 1
currency_code: BTC
locked_amount: 0.5
- available_amount: 20001.2988
currency_code: ETH
locked_amount: 0
- available_amount: 20001298.8
currency_code: USD
locked_amount: 0
- available_amount: 20001298.8
currency_code: USDC
locked_amount: 0
- available_amount: 3
currency_code: ETH
locked_amount: 1
conversions:
- available_amount: 4119989.31998
currency_code: UXD
locked_amount: 860.002145
- available_amount: 823997.86
currency_code: BRL
locked_amount: 172
- available_amount: 46.03340022
currency_code: BTC
locked_amount: 0.00960896
- available_amount: 3
currency_code: ETH
locked_amount: 1
- available_amount: 4119989.31
currency_code: USD
locked_amount: 860
- available_amount: 4119989.31998
currency_code: USDC
locked_amount: 860.002145
servers:
- url: https://api.ripiotrade.co/v4/
user_trades:
post:
summary: user_trades
description: When orders match, this topic notifies the users involved in the match process. Buyer and seller will get notified about what orders were executed.
operationId: user_trades
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequestWithTicket'
example:
method: subscribe
topics:
- user_trades
ticket: 97794B95-AFE7-454F-81B0-9109112548C2
responses:
'200':
description: User Trades
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_UserTrades_'
example:
id: 9
topic: user_trades
timestamp: 1673271591764
body:
trade:
amount: 1
date: '2023-01-09T13:39:24.057Z'
fee: 0
fee_currency: BCH
id: 08799ECC-F6B1-498E-B89C-2A05E6A181B9
maker_order_id: AF1C3AD2-D5A2-41CC-9A4C-646B600F9E01
pair_code: BCH_BRL
price: 49
side: buy
taker_or_maker: taker
taker_order_id: 52B46D87-86A1-4978-B141-4E18E3E47514
timestamp: 1675780847920
total_value: 49
type: limit
user_id: 30B8CDBB-BDBD-4B60-A90F-860AB46B76F7
servers:
- url: https://api.ripiotrade.co/v4/
deposit:
post:
summary: deposit
description: This topic is responsible for notifing the user when a fiat / cryptocurrency deposit occurs.
operationId: deposit
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequestWithTicket'
example:
method: subscribe
topics:
- deposit
ticket: 97794B95-AFE7-454F-81B0-9109112548C2
responses:
'200':
description: Deposit
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_SendCashInToSocketUseCaseParams_'
example:
id: 10
topic: deposit
timestamp: 1673271591764
body:
id: 08799ECC-F6B1-498E-B89C-2A05E6A181B9
amount: 1
hash: '0x79704c92b31061b8f51e26486d6454aff3e3c58aa0d51f0f803d6fd063be8100'
currency_code: ETH
is_internal: false
status: confirmed
create_date: '2023-01-09T13:39:24.057Z'
update_date: '2023-01-09T13:39:25.001Z'
user_id: 5B6A43AE-8012-402D-966F-87CF64689535
confirmation_date: '2023-01-09T13:39:25.001Z'
address: 3PQhyXH1EZs1bZ23ZafqQDyeViqxn5KdXN
network: bitcoincash
servers:
- url: https://api.ripiotrade.co/v4/
withdrawal:
post:
summary: withdrawal
description: This topic is responsible for notifing the user when a fiat / cryptocurrency withdrawal occurs.
operationId: withdrawal
tags:
- WebSocket Stream
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IRequestWithTicket'
example:
method: subscribe
topics:
- withdrawal
ticket: 97794B95-AFE7-454F-81B0-9109112548C2
responses:
'200':
description: Withdrawal
content:
application/json:
schema:
$ref: '#/components/schemas/IResponse_SendCashOutToSocketUseCaseParams_'
example:
id: 11
topic: withdrawal
timestamp: 1673271591764
body:
id: 2B222F22-5235-45FA-97FC-E9DBFA2575EE
amount: 100
currency_code: ETH
status: confirmed
miner_fee: null
fee: null
external_id: 08799ECC-F6B1-498E-B89C-2A05E6A181B9
create_date: '2023-01-09T13:39:24.057Z'
destination_address: mpe8FKtvDktBN1FGToFpYN2pdktySxD8wg
update_date: '2023-01-09T13:39:24.057Z'
hash: '0x79704c92b31061b8f51e26486d6454aff3e3c58aa0d51f0f803d6fd063be8100'
is_internal: false
network: bitcoin
user_id: 5B6A43AE-8012-402D-966F-87CF64689535
servers:
- url: https://api.ripiotrade.co/v4/
components:
schemas:
TopicEnum:
enum:
- trade
- orderbook/level_3
- orderbook/level_2
- orderbook/level_2_with_users
- orderbook/level_2_delta
- ticker
- order_status
- balance
- user_trades
- deposit
- withdrawal
type: string
IRequest:
properties:
method:
$ref: '#/components/schemas/MethodEnum'
description: Method to be executed
topics:
items:
$ref: '#/components/schemas/TopicEnum'
type: array
description: Topics to subscribe to
required:
- method
- topics
type: object
additionalProperties: false
IOrderBookLevel2WithoutUsers:
properties:
asks:
items:
$ref: '#/components/schemas/IBookExecutionLevel2WithoutUsers'
type: array
description: Sell orders
bids:
items:
$ref: '#/components/schemas/IBookExecutionLevel2WithoutUsers'
type: array
description: Buy orders
pair:
type: string
description: Currency pair code
example: BTC_BRL
hash:
type: string
description: 'The checksum hash for the current order book is a CRC32 value derived from the top 10 bids and top 10 asks. This checksum allows client applications to verify that the local order book data is accurate and can serve as an indicator to refresh the order book if the data is outdated. For guidance on generating checksums for order book messages, please refer to the following sample: https://github.com/ripio/api/tree/main/websocket-checksum-hash.'
example: '2254383345'
required:
- asks
- bids
- pair
- hash
type: object
additionalProperties: false
example:
asks:
- amount: 184.9
price: 20
- amount: 10
price: 20
bids:
- amount: 400
price: 5
- amount: 20
price: 4
pair: ETH_BRL
hash: '2254383345'
IResponse_SendCashOutToSocketUseCaseParams_:
properties:
body:
$ref: '#/components/schemas/SendCashOutToSocketUseCaseParams'
id:
type: number
format: double
description: Each WebSocket message includes a sequential numeric id. Each topic has its own unique sequence, and for private topics, the sequence is unique to each topic and user. It's important to note that some topics will send a "welcome message", which will have an id value of `-1`. Additionally, this sequence may be reset between connections, so be sure to update this value locally whenever you reconnect.
example: 1308
timestamp:
type: number
format: double
description: Timestamp in milliseconds
example: 1709300794000
topic:
$ref: '#/components/schemas/TopicEnum'
description: Topic related to the message
example: trade@BTC_USDC
required:
- body
- id
- timestamp
- topic
type: object
additionalProperties: false
SendCryptoCashInToSocketUseCaseParams:
properties:
id:
type: string
description: Deposit identifier
amount:
type: number
format: double
description: Amount
currency_code:
type: string
description: Currency code
status:
type: string
description: Cash in status (`confirmation_pending` | `confirmed` | `canceled` for cryptocurrency / `awaiting_processing` | `processing` | `confirmed` | `canceled` | `rejected` | `pending_cancelation` | `pending_approval` | `pending_processing` | `awaiting_bank_interval` for fiat)
create_date:
type: string
description: Datetime of the creation
update_date:
type: string
description: Datetime of the last update
user_id:
type: string
description: User id
hash:
type: string
description: Transaction hash
confirmation_date:
type: string
description: Datetime of the confirmation
network:
type: string
description: Network
is_internal:
type: boolean
description: If true, indicates that the deposit was sent internally by another exchange user
required:
- id
- amount
- currency_code
- status
- create_date
- update_date
- user_id
type: object
additionalProperties: false
SendCashInToSocketUseCaseParams:
anyOf:
- $ref: '#/components/schemas/SendFiatCashInToSocketUseCaseParams'
- $ref: '#/components/schemas/SendCryptoCashInToSocketUseCaseParams'
DetailType:
properties:
pix_key:
type: string
agency:
type: string
user_bank_account:
type: string
destination_key:
type: string
type: object
IResponse_IOrderBookLevel2WithoutUsers_:
properties:
body:
$ref: '#/components/schemas/IOrderBookLevel2WithoutUsers'
id:
type: number
format: double
description: Each WebSocket message includes a sequential numeric id. Each topic has its own unique sequence, and for private topics, the sequence is unique to each topic and user. It's important to note that some topics will send a "welcome message", which will have an id value of `-1`. Additionally, this sequence may be reset between connections, so be sure to update this value locally whenever you reconnect.
example: 1308
timestamp:
type: number
format: double
description: Timestamp in milliseconds
example: 1709300794000
topic:
$ref: '#/components/schemas/TopicEnum'
description: Topic related to the message
example: trade@BTC_USDC
required:
- body
- id
- timestamp
- topic
type: object
additionalProperties: false
UserTrades:
properties:
user_id:
type: string
description: User identifier
trade:
$ref: '#/components/schemas/UserPreparedTradeV4'
required:
- user_id
- trade
type: object
additionalProperties: false
SendFiatCashInToSocketUseCaseParams:
properties:
id:
type: string
description: Cash in identifier
amount:
type: number
format: double
description: Amount
currency_code:
type:
- string
- 'null'
description: Currency code
fee:
type: number
format: double
description: Fee charged by the exchange
status:
type: string
description: Cash in status (`confirmation_pending` | `confirmed` | `canceled` for cryptocurrency / `awaiting_processing` | `processing` | `confirmed` | `canceled` | `rejected` | `pending_cancelation` | `pending_approval` | `pending_processing` | `awaiting_bank_interval` for fiat)
create_date:
type: string
description: Datetime of the creation
update_date:
type: string
description: Datetime of the last update
user_id:
type: string
description: User id
required:
- id
- amount
- currency_code
- fee
- status
- create_date
- update_date
- user_id
type: object
additionalProperties: false
IResponse_ISocketTrade_:
properties:
body:
$ref: '#/components/schemas/ISocketTrade'
id:
type: number
format: double
description: Each WebSocket message includes a sequential numeric id. Each topic has its own unique sequence, and for private topics, the sequence is unique to each topic and user. It's important to note that some topics will send a "welcome message", which will have an id value of `-1`. Additionally, this sequence may be reset between connections, so be sure to update this value locally whenever you reconnect.
example: 1308
timestamp:
type: number
format: double
description: Timestamp in milliseconds
example: 1709300794000
topic:
$ref: '#/components/schemas/TopicEnum'
description: Topic related to the message
example: trade@BTC_USDC
required:
- body
- id
- timestamp
- topic
type: object
additionalProperties: false
IResponse_IOrderBookLevel3_:
properties:
body:
$ref: '#/components/schemas/IOrderBookLevel3'
id:
type: number
format: double
description: Each WebSocket message includes a sequential numeric id. Each topic has its own unique sequence, and for private topics, the sequence is unique to each topic and user. It's important to note that some topics will send a "welcome message", which will have an id value of `-1`. Additionally, this sequence may be reset between connections, so be sure to update this value locally whenever you reconnect.
example: 1308
timestamp:
type: number
format: double
description: Timestamp in milliseconds
example: 1709300794000
topic:
$ref: '#/components/schemas/TopicEnum'
description: Topic related to the message
example: trade@BTC_USDC
required:
- body
- id
- timestamp
- topic
type: object
additionalProperties: false
SendCryptoCashOutToSocketUseCaseParams:
properties:
id:
type: string
description: Cash out identifier
amount:
type: number
format: double
description: Amount
currency_code:
type: string
description: Currency code
status:
type: string
description: Origin address (valid only for cryptocurrency)
external_id:
type: string
description: External id
create_date:
type: string
description: Datetime of the creation
update_date:
type: string
description: Datetime of the last update
user_id:
type: string
description: User id
miner_fee:
type:
- number
- 'null'
format: double
description: Miner fee
fee:
type:
- number
- 'null'
format: double
description: Fee charged by the exchange
hash:
type: string
description: Withdrawal hash
destination_address:
type: string
description: Destination Address
is_internal:
type: boolean
description: If true, indicates that the withdrawal was sent to another exchange user
link:
type:
- string
- 'null'
description: Link to explorer
memo:
type: string
description: Destination memo
tag:
type: string
description: Destination tag
network:
type: string
description: Currency network
required:
- id
- amount
- currency_code
- status
- create_date
- update_date
- user_id
- miner_fee
- fee
- hash
- destination_address
- is_internal
- link
- network
type: object
additionalProperties: false
IResponse_IOrderStatus_:
p
# --- truncated at 32 KB (69 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ripio/refs/heads/main/openapi/ripio-websocket-stream-api-openapi.yml