Home
Finage
Finage WebSocket Market Data Stream
Finage · AsyncAPI Specification
Finage WebSocket Market Data Stream
Version 1.0.0
Finage streams real-time market prices (US stocks, global stocks, forex, crypto, CFD indices, and ETFs) over WebSocket. Each customer is assigned a dedicated WebSocket URL (subdomain + port) shown in the Finage dashboard; connections authenticate with a token (socket key) query parameter. After connecting, the server sends two status messages ("authorizing", then "connected to the adapter") before streaming price updates. This AsyncAPI was derived by API Evangelist from Finage's WebSocket documentation (https://finage.co.uk/docs/websocket) and the published message-type models (https://api.finage.co.uk/op/v1/wstype/list); all message payload examples are verbatim from that source.
View Spec
View on GitHub
Finance Market Data Stocks Forex Cryptocurrency ETFs Indices Fundamentals Real-Time Data Public APIs AsyncAPI Events WebSockets
Channels
prices
Single streaming channel. On connect the server sends ConnectionStatus messages, then real-time price update messages whose shape depends on the subscribed market (Finage message-type models Type2-Type10).
Messages
✉
connectionStatus
connectionStatus
Connection lifecycle status messages sent after connecting.
✉
forexQuoteWithChange
forexQuoteWithChange
Forex quote with daily change (Finage Type2Model).
✉
cryptoTradeWithChange
cryptoTradeWithChange
Crypto trade with daily change (Finage Type3Model).
✉
stockQuote
stockQuote
US stock quote (Finage Type4Model).
✉
cryptoTrade
cryptoTrade
Crypto trade (Finage Type5Model).
✉
forexQuote
forexQuote
Forex quote (Finage Type6Model).
✉
stockQuoteWithChange
stockQuoteWithChange
Stock quote with daily change (Finage Type8Model).
✉
etfQuoteWithChange
etfQuoteWithChange
ETF quote with daily change (Finage Type10Model).
Servers
wss
production
Your assigned WebSocket URL (subdomain and port) is shown in the Finage dashboard under the WebSocket section. Streams are divided into subdomains per market section for stability. Authenticate by appending ?token={socket key}. Documented error messages: "401 - invalid socket key", "401 - use your socket key to connect", "401 - please upgrade your package to access this market".
AsyncAPI Specification
asyncapi: 3.0.0
info:
title: Finage WebSocket Market Data Stream
version: 1.0.0
description: >-
Finage streams real-time market prices (US stocks, global stocks, forex,
crypto, CFD indices, and ETFs) over WebSocket. Each customer is assigned a
dedicated WebSocket URL (subdomain + port) shown in the Finage dashboard;
connections authenticate with a token (socket key) query parameter. After
connecting, the server sends two status messages ("authorizing", then
"connected to the adapter") before streaming price updates. This AsyncAPI
was derived by API Evangelist from Finage's WebSocket documentation
(https://finage.co.uk/docs/websocket) and the published message-type models
(https://api.finage.co.uk/op/v1/wstype/list); all message payload examples
are verbatim from that source.
contact:
name: Finage Support
email: support@finage.co.uk
url: https://finage.co.uk
externalDocs:
description: Finage WebSocket documentation
url: https://finage.co.uk/docs/websocket
x-apievangelist:
generated: '2026-07-22'
method: derived
source: https://finage.co.uk/docs/websocket + https://api.finage.co.uk/op/v1/wstype/list
servers:
production:
host: '{subdomain}.finage.ws:{port}'
protocol: wss
description: >-
Your assigned WebSocket URL (subdomain and port) is shown in the Finage
dashboard under the WebSocket section. Streams are divided into
subdomains per market section for stability. Authenticate by appending
?token={socket key}. Documented error messages: "401 - invalid socket
key", "401 - use your socket key to connect", "401 - please upgrade your
package to access this market".
variables:
subdomain:
description: Stream subdomain assigned to your account (shown in dashboard).
port:
description: Port of your assigned stream server (shown in dashboard).
channels:
prices:
address: /
description: >-
Single streaming channel. On connect the server sends ConnectionStatus
messages, then real-time price update messages whose shape depends on the
subscribed market (Finage message-type models Type2-Type10).
messages:
connectionStatus:
$ref: '#/components/messages/connectionStatus'
forexQuoteWithChange:
$ref: '#/components/messages/forexQuoteWithChange'
cryptoTradeWithChange:
$ref: '#/components/messages/cryptoTradeWithChange'
stockQuote:
$ref: '#/components/messages/stockQuote'
cryptoTrade:
$ref: '#/components/messages/cryptoTrade'
forexQuote:
$ref: '#/components/messages/forexQuote'
stockQuoteWithChange:
$ref: '#/components/messages/stockQuoteWithChange'
etfQuoteWithChange:
$ref: '#/components/messages/etfQuoteWithChange'
operations:
receivePrices:
action: receive
channel:
$ref: '#/channels/prices'
summary: Receive real-time price updates for subscribed symbols.
components:
messages:
connectionStatus:
name: ConnectionStatus
summary: Connection lifecycle status messages sent after connecting.
payload:
type: object
properties:
status_code:
type: integer
message:
type: string
id:
type: string
examples:
- name: authorizing
payload:
status_code: 200
message: authorizing
id: e0fb1b68-1905-48e3-9fd2-d482bf5e1f0a
- name: connected
payload:
status_code: 200
message: connected to the adapter
id: e0fb1b68-1905-48e3-9fd2-d482bf5e1f0a
forexQuoteWithChange:
name: Type2Model
summary: Forex quote with daily change (Finage Type2Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
a: {type: number, description: Ask price}
b: {type: number, description: Bid price}
dd: {type: string, description: Daily difference}
dc: {type: string, description: Daily change percent}
ppms: {type: boolean, description: Price per millisecond flag}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: ZAR/EUR
a: 0.05103271
b: 0.05100465
dd: '0.0002'
dc: '0.4016'
ppms: false
t: 1680703141685
cryptoTradeWithChange:
name: Type3Model
summary: Crypto trade with daily change (Finage Type3Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
p: {type: string, description: Price}
q: {type: string, description: Quantity}
dc: {type: string, description: Daily change percent}
dd: {type: string, description: Daily difference}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: DOGEUSD
p: '0.09649316'
q: '22434.12483106'
dc: '1.4147'
dd: '0.0014'
t: 1680704192819
stockQuote:
name: Type4Model
summary: US stock quote (Finage Type4Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
ap: {type: number, description: Ask price}
bp: {type: number, description: Bid price}
as: {type: integer, description: Ask size}
bs: {type: integer, description: Bid size}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: TSLA
ap: 189.3
bp: 189.27
as: 3
bs: 1
t: 1714403004431
cryptoTrade:
name: Type5Model
summary: Crypto trade (Finage Type5Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
p: {type: string, description: Price}
q: {type: string, description: Quantity}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: HBARUSD
p: '0.06648169'
q: '340082.47302549'
t: 1680704234267
forexQuote:
name: Type6Model
summary: Forex quote (Finage Type6Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
a: {type: number, description: Ask price}
b: {type: number, description: Bid price}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: EUR/USD
a: 1.09229
b: 1.09227
t: 1680705338000
stockQuoteWithChange:
name: Type8Model
summary: Stock quote with daily change (Finage Type8Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
a: {type: number, description: Ask price}
as: {type: integer, description: Ask size}
b: {type: number, description: Bid price}
bs: {type: integer, description: Bid size}
dc: {type: number, description: Daily change percent}
dd: {type: number, description: Daily difference}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: GOOGL
a: 167.989804
as: 13
b: 167.970446
bs: 4
dc: -1.9556
dd: -3.2851
t: 1714403502895
etfQuoteWithChange:
name: Type10Model
summary: ETF quote with daily change (Finage Type10Model).
payload:
type: object
properties:
s: {type: string, description: Symbol}
a: {type: number, description: Ask price}
as: {type: integer, description: Ask size}
b: {type: number, description: Bid price}
bs: {type: integer, description: Bid size}
dc: {type: number, description: Daily change percent}
dd: {type: number, description: Daily difference}
ppms: {type: boolean, description: Price per millisecond flag}
t: {type: integer, description: Timestamp (ms)}
examples:
- payload:
s: QQQ
a: 458.610865
as: 1
b: 458.549806
bs: 1
dc: -0.4196
dd: -1.924
ppms: true
t: 1725449608827
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
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.
All 92 tools →
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/finage-websocket-asyncapi"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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.