This document provides example request and subscription payloads for receiving Upbit(Singapore, Indonesia, Thailand) announcement data via WebSocket.
WebSocket Endpoint
| Type | Endpoint |
|---|---|
| Private | wss://{region}-api.upbit.com/websocket/v1/private |
Use the endpoint for your region.
| Region | Endpoint |
|---|---|
| Singapore | wss://sg-api.upbit.com/websocket/v1/private |
| Indonesia | wss://id-api.upbit.com/websocket/v1/private |
| Thailand | wss://th-api.upbit.com/websocket/v1/private |
Private WebSocket Connection Management GuideWhen a large number of Private WebSocket connections are maintained simultaneously, new connection attempts may be rejected. Please minimize unnecessary connections and, where possible, subscribe to the required data types through a single existing connection.
No data is sent unless a new announcement is published or an existing announcement is updated.Announcement data is transmitted in real time only when a new announcement is published or an existing announcement is updated. Therefore, it is normal to receive no data after establishing a WebSocket connection if no new announcement is published or updated.
Announcement data supports real-time streams only, and
stream_typeis provided asREALTIME. For details on WebSocket connection and authentication, refer to the WebSocket Usage and Error Guide.
Announcement delivery timing may vary by channel.Announcements are provided only in the default language of each region.
If an announcement is not available in the default language of the region, a predefined message is returned instead. Empty data or content in another language is not returned.
title: This announcement is currently not available in [language].body: Announcements available in other languages can be viewed through the provided link.
Announcement LanguageAnnouncements are provided only in the default language of each region.
If an announcement is not available in the default language of the region, a predefined message is returned instead. Empty data or content in another language is not returned.
title: This announcement is currently not available in language.body: Announcements available in other languages can be viewed through the provided link.
Request Message Format
To request announcement data, after establishing a WebSocket connection, create a JSON Object with the structure below and include it as a Data Type Object in the request message.
For the complete WebSocket request message specification, including the Ticket and Format Objects, refer to the WebSocket Usage and Error Guide.
| Field Name | Type | Description | Required | Default |
|---|---|---|---|---|
type | String | Data type to receive. Set to announcement to receive announcement data. | Required | |
categories | List:String | List of announcement categories to receive. If omitted, announcements from all supported categories are received. If the request includes an unsupported value, an INVALID_PARAM error is returned. | Optional | All |
include_body | Boolean | Whether to include the announcement body. If set to true, the body field is included in the subscription data. If the body data is too large, it may be returned as null. | Optional | false |
format | String | Data format to receive.DEFAULT: Default format.SIMPLE: Simplified format with abbreviated field names.JSON_LIST: List format.SIMPLE_LIST: List format with abbreviated field names. | Required |
Announcement Categories (categories)
categories)You can specify categories to subscribe only to announcements in selected categories. If omitted, announcements from all supported categories are received.
Available categories may vary by region. If a request includes a category that is not supported in the connected region, an INVALID_PARAM error is returned.
| Category | categories Value | TH | ID | SG | Description |
|---|---|---|---|---|---|
| Note | note | ✅ | ✅ | ✅ | General announcements related to service usage and updates |
| Trading | trading | ✅ | ✅ | ✅ | Announcements related to trading support, market changes, investment warnings, and termination of trading support |
| Wallet | wallet | ✅ | ✅ | ✅ | Announcements related to digital asset deposits and withdrawals, including suspensions and resumptions |
| Maintenance | maintenance | ✅ | ✅ | ✅ | Announcements related to system and service maintenance |
| Digital Asset | digital_asset | ✅ | ✅ | ✅ | Announcements related to digital assets |
| Airdrop | airdrop | ✅ | ✅ | ✅ | Announcements related to airdrops |
| Event | event | ✅ | ✅ | ✅ | Announcements related to Upbit events |
| Feature | feature | ✅ | ✅ | ✅ | Announcements related to new features and service improvements |
| Disclosure | disclosure | ✅ | ❌ | ❌ | Disclosure-related announcements |
Subscription Data Specification
When a new announcement is published or an existing announcement is updated, real-time stream data is returned as follows.
| Field Name | Abbreviation | Description | Type | Value |
|---|---|---|---|---|
type | ty | Data type | String | announcement |
event_type | et | Announcement event type | String | CREATED: New announcement publishedUPDATED: Existing announcement updated |
uuid | uid | Unique identifier of the announcement | String | |
title | tt | Announcement title | String | |
category | cat | Announcement category | String | Example: trading, wallet, maintenance, digital_asset |
url | url | URL of the announcement detail page | String | |
first_listed_at | flat | Initial publication time | String | ISO 8601 |
listed_at | lat | Latest publication time. Updated when the announcement is updated. | String | ISO 8601 |
timestamp | tms | Timestamp (ms) | Long | |
stream_type | st | Stream type | String | REALTIME: Real-time stream |
body | bd | Announcement body in Markdown format. Included only when include_body is set to true in the request. | String |
Examples
Subscribe to All Announcements
This example subscribes to all Upbit announcements without specifying a category. The announcement body is excluded. The
ticketfield identifies the request and can be set to any string.
Subscription Request Example
[
{
"ticket": "announcement-monitor"
},
{
"type": "announcement",
"include_body": false
},
{
"format": "DEFAULT"
}
]Subscription Data Example - New Announcement Published
{
"type": "announcement",
"event_type": "CREATED",
"uuid": "562593104",
"title": "[Trading] New Trading Support ...",
"category": "trading",
"url": "https://sg.upbit.com/service_center/notice?id=562593104",
"first_listed_at": "2026-07-14T16:36:34+08:00",
"listed_at": "2026-07-14T16:36:34+08:00",
"timestamp": 1752566400123,
"stream_type": "REALTIME"
}Subscription Data Example - Existing Announcement Updated
{
"type": "announcement",
"event_type": "UPDATED",
"uuid": "562593104",
"title": "[Trading] New Trading Support (Schedule Updated)",
"category": "trading",
"url": "https://sg.upbit.com/service_center/notice?id=562593104",
"first_listed_at": "2026-07-14T16:36:34+08:00",
"listed_at": "2026-07-14T21:19:33+08:00",
"timestamp": 1752570000234,
"stream_type": "REALTIME"
}Subscribe to Announcements in a Specific Category
This example specifies
tradingincategoriesto subscribe only to trading-related announcements. The announcement body is excluded.
Subscription Request Example
[
{
"ticket": "trading-announcement-monitor"
},
{
"type": "announcement",
"categories": ["trading"],
"include_body": false
},
{
"format": "DEFAULT"
}
]Subscription Data Example
{
"type": "announcement",
"event_type": "CREATED",
"uuid": "562593104",
"title": "[Trading] New Trading Support ...",
"category": "trading",
"url": "https://sg.upbit.com/service_center/notice?id=562593104",
"first_listed_at": "2026-07-14T16:36:34+08:00",
"listed_at": "2026-07-14T16:36:34+08:00",
"timestamp": 1752566400123,
"stream_type": "REALTIME"
}Subscribe with Announcement Body
This example subscribes to announcements from all categories and sets
include_bodytotrueto receive the announcement body. Theticketfield identifies the request and can be set to any string.If the body data is too large, it may be returned as
null.
Subscription Request Example
[
{
"ticket": "announcement-subscription"
},
{
"type": "announcement",
"include_body": true
},
{
"format": "DEFAULT"
}
]Subscription Data Example - New Announcement Published
{
"type": "announcement",
"event_type": "CREATED",
"uuid": "562593104",
"title": "[Trading] New Trading Support ...",
"category": "trading",
"url": "https://sg.upbit.com/service_center/notice?id=562593104",
"first_listed_at": "2026-07-14T16:36:34+08:00",
"listed_at": "2026-07-14T16:36:34+08:00",
"timestamp": 1752566400123,
"stream_type": "REALTIME",
"body": "Announcement body ..."
}Error Information
If an error occurs after establishing a WebSocket connection and sending a request, the response is returned in the following JSON format.
{
"error": {
"name": "ERROR_CODE",
"message": "ERROR_MESSAGE"
}
}The main error codes that may be returned are listed below.
error.name | Reason | Recommended Action |
|---|---|---|
INVALID_AUTH | Missing authentication information or authentication token verification failure | When using a Private WebSocket endpoint, make sure you are connected to the correct endpoint and that the Authorization header contains a valid authentication token. |
WRONG_FORMAT | Invalid request message format | Make sure the request message follows the WebSocket request format. Check the Object structure as well as the type and value of each field. |
NO_TICKET | Missing ticket field | Make sure the request message includes a Ticket Object and the ticket field. |
NO_TYPE | Missing type field | Make sure the Data Type Object includes the type field and specify the data type to subscribe to. |
NO_CODES | Missing codes field | Check whether the subscribed data type requires the codes field and specify the trading pair codes to receive. |
INVALID_PARAM | Missing required request field or unsupported value | Make sure all required fields are included and that each field contains a supported value. |
Too Many Requests | Request rate limit exceeded | Wait until another request can be made, then retry. Refer to the Rate Limits section for details. |
I'm a teapot | Requests are temporarily restricted due to repeated Too Many Requests errors | Check the restriction period included in the response and retry after the specified time has passed. |
Rate Limits
APIs are grouped into Rate Limit groups. APIs within the same group share the same per-second request limit.
The maximum number of requests allowed per Rate Limit group may change after prior notice according to service policy, and additional restrictions may be applied depending on service conditions. For details, refer to Rate Limits.
| Rate Limit Group | Policy | Applied By |
|---|---|---|
websocket-connect | Up to 5 connections per second | Account |
websocket-message | Up to 5 messages per second and 100 messages per minute | Connection |
Managing WebSocket Rate LimitsUnlike REST API responses, WebSocket does not provide the number of remaining requests. Clients should track the number of WebSocket connection attempts and data request messages they send to ensure compliance with the applicable rate limits. If a rate limit is reached, wait for an appropriate period before sending another request..
