WebSocket API
The WebSocket API provides real-time data from the 3xpl.com blockchain explorer.
As a developer-friendly solution, we offer AsyncAPI based document: stream.3xpl.net-asyncapi.yml. You can use the AsyncAPI Generator as a tool to generate code examples (SDKs) in your preferred language based on the provided AsyncAPI document.
Common features
- The base endpoint is: wss://stream.3xpl.net. A public beta server is available without the need for authorization.
- Once the socket is open, you can subscribe to a public channel by sending a subscribe request message. Every message is JSON-encoded.
- Every message is JSON encoded.
- The special JSON value
null
is used as a PING/PONG message. PINGs sent by a server, a client should answer with PONGs upon receiving PING. Alternatively, you can use these messages to detect broken connections, particularly when nothing has been received from the server for a considerable amount of time. The server sends a PING message every 25 seconds. - The server supports the reconnect scenario and automatically provides a history of missed data.
Connection scenario
- Receive a JWT token using:
- personal customer area (the token expiration can be set manually);
- service endpoint https://3xpl.com/get-websockets-token (the token valid for 10 minutes).
- Connect to base endpoint wss://stream.3xpl.net
- Once the connection is established, the server expects the following messages:
-
connect request message:
{"connect":{"token":"{JWT_TOKEN}"},"id":1}
where{JWT_TOKEN}
is JWT token received in previous step; -
subscribe request message:
{"subscribe":{"channel":""},"id":2}
wherechannel
is the name of the channel to subscribe to.
-
connect request message:
You can subscribe up to 10 channels using one connection.
Channel history and recovery
The WebSocket Server maintains a publication history for certain channels, with the history size capped at 100 messages.
To receive the history for a channel, send the following message: {"history":{"channel":"","limit":1,"reverse":true},"id":3}
where channel
is the name of the channel, limit
is number of history messages you want, reverse
indicates the direction of messages (from the most recent to the earliest).
Messages format
Every message comprises two section:
data
: this contains general information provided by the channel.context
: this section offers additional technical information
Available blockchains
Every channel name contains {:blockchain}
parameter.
You can get list of available blockchains directly from api main stats endpoint: https://api.3xpl.com/ (api token key required)
List of available blockchains
Id | Title |
---|---|
aptos |
Aptos |
arbitrum-one |
Arbitrum One |
avalanche |
Avalanche |
base |
Base |
beacon-chain |
Beacon Chain |
bitcoin |
Bitcoin |
bitcoin-cash |
Bitcoin Cash |
blast |
Blast |
bnb |
BNB |
bob |
BOB |
cardano |
Cardano |
dash |
Dash |
digibyte |
DigiByte |
dogecoin |
Dogecoin |
ecash |
eCash |
ethereum |
Ethereum |
ethereum-classic |
Ethereum Classic |
fantom |
Fantom |
galactica-evm |
Galactica EVM |
gnosis-chain |
Gnosis Chain |
groestlcoin |
Groestlcoin |
handshake |
Handshake |
kusama |
Kusama |
linea |
Linea |
liquid-network |
Liquid Network |
litecoin |
Litecoin |
mantle |
Mantle |
merlin |
Merlin |
monero |
Monero |
moonbeam |
Moonbeam |
opbnb |
opBNB |
optimism |
Optimism |
peercoin |
Peercoin |
polkadot |
Polkadot |
polygon |
Polygon |
polygon-zkevm |
Polygon zkEVM |
rootstock |
Rootstock |
scroll |
Scroll |
sei-evm |
Sei EVM |
solana |
Solana |
stellar |
Stellar |
ton |
TON |
tron |
TRON |
xrp-ledger |
XRP Ledger |
zcash |
Zcash |
zksync-era |
zkSync Era |
Available channels
SUB
{blockchain}/blocks
Stream information about new blocks in blockchain
Parameters:
Name / type | Description |
---|---|
blockchain
string
|
id of blockchain to receive blocks from |
Response:
-
object {}
-
data array [] List of blocks
-
object {} Block object
-
block integer Block identifier
-
hash string Block hash
-
time string Timestamp when block issued
-
events object {} Key-value object with events count by module
-
{:module} integer Events count
-
-
-
-
context object {}
-
time string Time when message was produced
-
-
Response examples:
Bitcoin block number 500000
{ data: [ { block: 500000, hash: "00000000000000000024fb37364cbf81fd49cc2d51c09c75c35433c3a1945d04", time: "2017-12-18T18:35:25.000000Z", events: { bitcoin-main: 13340, bitcoin-omni: 420 } } ], context: { time: "0.59455600 1685039844" } }
SUB
{blockchain}/events
Stream information about new events in blockchain
Parameters:
Name / type | Description |
---|---|
blockchain
string
|
id of blockchain to receive events from |
Response:
-
object {}
-
data array [] List of events
-
object {} Event object
-
blockchain string
-
module string Module in which the event occurred
-
block integer Number of block in which the event included
-
transaction string Hash of transaction contains the event
-
sort_key integer Sorting number
-
address string Address affected by the event
-
currency string Effect currency
-
effect string Amount in currency which address effected
-
failed boolean Shows is event failed by any reason
-
extra null
-
extra_indexed null
-
-
-
context object {}
-
time string Time when message was produced
-
-
Response examples:
First events in Bitcoin blockchain
{ data: [ { blockchain: "bitcoin", module: "bitcoin-main", block: 0, transaction: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", sort_key: 0, address: "the-void", currency: "bitcoin", effect: "-5000000000", failed: false, extra: null, extra_indexed: null }, { blockchain: "bitcoin", module: "bitcoin-main", block: 0, transaction: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", sort_key: 1, address: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", currency: "bitcoin", effect: "+5000000000", failed: false, extra: null, extra_indexed: null } ], context: { time: "2023-03-02T18:24:51.000000Z" } }
SUB
{blockchain}/mempool
Stream information about new events in mempool (if specified blockchain supports it)
Parameters:
Name / type | Description |
---|---|
blockchain
string
|
id of blockchain to receive events from |
Response:
-
object {}
-
data array [] List of mempool events
-
object {} Mempool event object
-
blockchain string
-
module string Module in which the event occurred
-
block integer `-1` always
-
transaction string Hash of transaction contains the event
-
sort_key integer Sorting number
-
address string Address affected by the event
-
currency string Effect currency
-
effect string Amount in currency which address effected
-
failed boolean Shows is event failed by any reason
-
extra null
-
extra_indexed null
-
-
-
context object {}
-
time string Time when message was produced
-
-
Response examples:
First events in Bitcoin blockchain
{ data: [ { blockchain: "bitcoin", module: "bitcoin-main", block: -1, transaction: "63381b941dbe21d6b7d03cab158118d74c7c313eb4c9164abf64f1293702923a", sort_key: 326, address: "bc1qkcwtu2k9jjhyvlx804xx5ae786yksqhvju46ml", currency: "bitcoin", effect: "-723449", failed: false, extra: null, extra_indexed: null }, { blockchain: "bitcoin", module: "bitcoin-main", block: -1, transaction: "63381b941dbe21d6b7d03cab158118d74c7c313eb4c9164abf64f1293702923a", sort_key: 325, address: "bc1qph5wssklxwsl50vyhstlg232nzqwp8sfws2zqm", currency: "bitcoin", effect: "-910585", failed: false, extra: null, extra_indexed: null } ], context: { time: "2023-03-02T16:20:00.000000Z" } }
SUB
{blockchain}/transaction/{hash}
Receive event when a mempool transaction will be included in the block
Parameters:
Name / type | Description |
---|---|
blockchain
string
|
id of blockchain to receive events from |
hash
string
|
Transaction hash |
Response:
-
object {} Transaction object
-
module string Module in which the transaction processed
-
block integer Number of block in which the transaction included
-
transaction string Transaction hash
-
time string Transaction timestamp
-
Response examples:
First transaction in Dogecoin blockchain
{ data: { module: "dogecoin-main", block: 0, transaction: "5b2a3f53f605d62c53e62932dac6925e3d74afa5a4b459745c36d42d0ed26a69", time: "2013-12-06T10:25:40.000000Z" }, context: { time: "2013-12-06T10:25:40.000000Z" } }
SUB
{blockchain}/address/{hash}
Stream information about new events address affected
Parameters:
Name / type | Description |
---|---|
blockchain
string
|
id of blockchain to receive events from |
hash
string
|
Address |
Response:
-
object {}
-
data array [] List of events
-
object {} Event object
-
blockchain string
-
module string Module in which the event occurred
-
block integer Number of block in which the event included
-
transaction string Hash of transaction contains the event
-
sort_key integer Sorting number
-
address string Address affected by the event
-
currency string Effect currency
-
effect string Amount in currency which address effected
-
failed boolean Shows is event failed by any reason
-
extra null
-
extra_indexed null
-
-
-
context object {}
-
time string Time when message was produced
-
-
Response examples:
Some recently events affected to first address in Bitcoin blockchain
{ data: [ { blockchain: "bitcoin", module: "bitcoin-main", block: 779007, transaction: "685e1c7bd823384335e1b3519148622e97a6e6a637bfee339c347e1d994b73bc", sort_key: 13093, time: "2023-03-02T18:38:33.000000Z", currency: "bitcoin", effect: "+7491", failed: false, extra: null, extra_indexed: null }, { blockchain: "bitcoin", module: "bitcoin-main", block: 779006, transaction: "6783e8ef51befa0eb31f12c7e36317ceca1f766f0c7ce2af5c13ede7cffc43de", sort_key: 1918, time: "2023-03-02T18:24:51.000000Z", currency: "bitcoin", effect: "+7047", failed: false, extra: null, extra_indexed: null } ], context: { time: "2023-03-02T18:24:51.000000Z" } }
SUB
{blockchain}/currency/{hash}
Stream information about new events with provided currency
Parameters:
Name / type | Description |
---|---|
blockchain
string
|
id of blockchain to receive events from |
hash
string
|
Currency contract address |
Response:
-
object {}
-
data array [] List of events
-
object {} Event object
-
blockchain string
-
module string Module in which the event occurred
-
block integer Number of block in which the event included
-
transaction string Hash of transaction contains the event
-
sort_key integer Sorting number
-
address string Address affected by the event
-
currency string Effect currency
-
effect string Amount in currency which address effected
-
failed boolean Shows is event failed by any reason
-
extra null
-
extra_indexed null
-
-
-
context object {}
-
time string Time when message was produced
-
-
Response examples:
First events in Bitcoin blockchain
{ data: [ { blockchain: "bitcoin", module: "bitcoin-main", block: 0, transaction: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", sort_key: 0, address: "the-void", currency: "bitcoin", effect: "-5000000000", failed: false, extra: null, extra_indexed: null }, { blockchain: "bitcoin", module: "bitcoin-main", block: 0, transaction: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", sort_key: 1, address: "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", currency: "bitcoin", effect: "+5000000000", failed: false, extra: null, extra_indexed: null } ], context: { time: "2023-03-02T18:24:51.000000Z" } }
How to get access to data services
Join our Discord server and go to the #faq section, where you can find authorization credentials and keys. We provide free access to data services for students and academics.