Upbit Read API
Mission
Implement or inspect read-only Upbit market-data integrations for:
- current price / ticker snapshots
- ticker lists by quote currency
- candles / OHLCV for chart analysis
Keep the integration read-only. Do not add order, account, deposit, withdrawal, Travel Rule, API-key, or authenticated Exchange API behavior under this skill.
Preferred Approach
Use a thin httpx or equivalent HTTP adapter unless the task explicitly requires the official SDK.
- These APIs are simple unauthenticated REST
GET endpoints.
- Avoid adding
upbit-sdk only for ticker/candle reads if a project already has an HTTP client.
- Normalize Upbit responses into local DTOs before passing data to chart, indicator, or briefing services.
Use the official SDK only when the user asks for SDK adoption, typed SDK models, or a wider Upbit integration beyond these read APIs.
Base URLs
For Korea/Upbit KR:
For global regions:
- Singapore:
https://sg-api.upbit.com
- Indonesia:
https://id-api.upbit.com
- Thailand:
https://th-api.upbit.com
Use market codes in {QUOTE}-{BASE} form, for example KRW-BTC, BTC-ETH, USDT-BTC.
Supported Endpoints
Trading Pair List
Use this when the integration needs the supported market universe.
GET /v1/market/all
- Optional params:
is_details=true when warning/detail fields are needed
- Key fields:
market
korean_name
english_name
market_warning
Current Prices By Pair
Use this when the integration already has specific market codes.
GET /v1/ticker
- Params:
- Key fields:
market
trade_price
opening_price
high_price
low_price
prev_closing_price
change
change_price
change_rate
signed_change_price
signed_change_rate
trade_volume
acc_trade_price
acc_trade_price_24h
acc_trade_volume
acc_trade_volume_24h
trade_timestamp
timestamp
Map trade_price to current/close price. Map acc_trade_price_24h or acc_trade_price to trading value depending on the requested horizon.
Ticker List By Quote Currency
Use this when the integration needs all tickers under one or more quote markets.
GET /v1/ticker/all
- Params:
- Korean API:
quote_currencies=KRW,BTC,USDT
- Some older English docs use
quoteCurrencies; prefer quote_currencies for current Korean/global docs.
- Response fields are ticker snapshot fields, same shape as
/v1/ticker.
Prefer this over calling /v1/ticker repeatedly for every pair in a quote market.
Candles
Use candles as the input for chart analysis and local indicator calculation.
- Seconds:
GET /v1/candles/seconds
- Minutes:
GET /v1/candles/minutes/{unit}
- Days:
GET /v1/candles/days
- Weeks:
GET /v1/candles/weeks
- Months:
GET /v1/candles/months
- Years:
GET /v1/candles/years
Minute units:
1, 3, 5, 10, 15, 30, 60, 240
Common params:
market=KRW-BTC
count=200 maximum per request for recent candles
to=<ISO datetime> for pagination/backfill before a cutoff
Key fields:
market
candle_date_time_utc
candle_date_time_kst
opening_price
high_price
low_price
trade_price
candle_acc_trade_price
candle_acc_trade_volume
timestamp
unit for minute candles
Map opening_price, high_price, low_price, trade_price, and candle_acc_trade_volume into OHLCV bars. Treat candle_acc_trade_price as candle trading value.
Candle Caveats
- Candles are generated only when trades occurred in that interval.
- Missing intervals are expected and should not be filled silently unless the target analysis explicitly defines a fill policy.
- 1-second candle data has limited retention; current docs state up to 3 months.
- For
to params containing +, :, or spaces, rely on HTTP-client params encoding instead of manually concatenating query strings.
Rate Limits
Upbit applies second-based rate limits by Rate Limit group.
Read-only Quotation REST APIs are measured by IP. The relevant groups are:
market: trading pair list, up to 10 requests/sec
ticker: /v1/ticker and /v1/ticker/all, up to 10 requests/sec
candle: all candle endpoints, up to 10 requests/sec
Important handling rules:
- Limits are shared within the same group. For example
/v1/ticker and /v1/ticker/all both spend from ticker.
- Check the
Remaining-Req response header after every request.
- Header shape:
group=ticker; min=1800; sec=9
- Treat
sec as the remaining requests in the current second. Ignore min; official docs mark it as deprecated/fixed.
- On HTTP
429, back off immediately.
- Repeated limit violations can return HTTP
418 with a temporary IP/account block; stop requests until the block duration passes.
- Requests with an
Origin header can be subject to a stricter policy for Quotation REST/WebSocket requests. Do not send browser-like Origin headers from server-side clients.
Recommended defaults:
- Use one shared limiter per process and per group:
market, ticker, candle.
- Cap each group at 8 requests/sec locally, not 10, to leave headroom for concurrent jobs.
- Batch pairs in
/v1/ticker?markets=... and use /v1/ticker/all for quote-market sweeps.
- For candle backfills, page sequentially with
to and obey the candle limiter.
- Log
Remaining-Req, status code, endpoint group, and market code, but never log credentials or unrelated private data.
Implementation Checklist
- Keep the client unauthenticated and read-only.
- Choose the narrowest endpoint:
- exact pairs:
/v1/ticker
- all pairs under quote market:
/v1/ticker/all
- chart bars: candle endpoint by interval
- Validate market code format before calling the API.
- Use an HTTP client with structured query params.
- Normalize Upbit field names at the adapter boundary.
- Preserve raw payload only if the target project's retention policy allows it.
- Enforce group-aware rate limiting and parse
Remaining-Req.
- Do not compute indicators in the API client. Compute them after candle normalization.
Official References
- Upbit Developer Center:
https://docs.upbit.com/kr
- Rate limits:
https://docs.upbit.com/kr/reference/rate-limits
- Trading pair list:
https://global-docs.upbit.com/reference/listing-market-list
- Tickers by pair:
https://global-docs.upbit.com/reference/tickers
- Tickers by quote currency:
https://docs.upbit.com/kr/reference/tickers_by_quote
- Minute candles:
https://global-docs.upbit.com/reference/list-candles-minutes
- REST best practices:
https://global-docs.upbit.com/docs/rest-api-best-practice
1---2name: upbit-read-api3description: Use when adding, reviewing, or debugging Upbit read-only market data integrations, limited to current ticker prices, ticker lists by quote currency, and candle OHLCV data. Includes endpoint selection, response field mapping, and Upbit rate-limit handling. Do not use for orders, accounts, deposits, withdrawals, authenticated Exchange APIs, or trading automation.4---56# Upbit Read API78## Mission910Implement or inspect read-only Upbit market-data integrations for:1112- current price / ticker snapshots13- ticker lists by quote currency14- candles / OHLCV for chart analysis1516Keep the integration read-only. Do not add order, account, deposit, withdrawal, Travel Rule, API-key, or authenticated Exchange API behavior under this skill.1718## Preferred Approach1920Use a thin `httpx` or equivalent HTTP adapter unless the task explicitly requires the official SDK.2122- These APIs are simple unauthenticated REST `GET` endpoints.23- Avoid adding `upbit-sdk` only for ticker/candle reads if a project already has an HTTP client.24- Normalize Upbit responses into local DTOs before passing data to chart, indicator, or briefing services.2526Use the official SDK only when the user asks for SDK adoption, typed SDK models, or a wider Upbit integration beyond these read APIs.2728## Base URLs2930For Korea/Upbit KR:3132- `https://api.upbit.com`3334For global regions:3536- Singapore: `https://sg-api.upbit.com`37- Indonesia: `https://id-api.upbit.com`38- Thailand: `https://th-api.upbit.com`3940Use market codes in `{QUOTE}-{BASE}` form, for example `KRW-BTC`, `BTC-ETH`, `USDT-BTC`.4142## Supported Endpoints4344### Trading Pair List4546Use this when the integration needs the supported market universe.4748- `GET /v1/market/all`49- Optional params:50 - `is_details=true` when warning/detail fields are needed51- Key fields:52 - `market`53 - `korean_name`54 - `english_name`55 - `market_warning`5657### Current Prices By Pair5859Use this when the integration already has specific market codes.6061- `GET /v1/ticker`62- Params:63 - `markets=KRW-BTC,KRW-ETH`64- Key fields:65 - `market`66 - `trade_price`67 - `opening_price`68 - `high_price`69 - `low_price`70 - `prev_closing_price`71 - `change`72 - `change_price`73 - `change_rate`74 - `signed_change_price`75 - `signed_change_rate`76 - `trade_volume`77 - `acc_trade_price`78 - `acc_trade_price_24h`79 - `acc_trade_volume`80 - `acc_trade_volume_24h`81 - `trade_timestamp`82 - `timestamp`8384Map `trade_price` to current/close price. Map `acc_trade_price_24h` or `acc_trade_price` to trading value depending on the requested horizon.8586### Ticker List By Quote Currency8788Use this when the integration needs all tickers under one or more quote markets.8990- `GET /v1/ticker/all`91- Params:92 - Korean API: `quote_currencies=KRW,BTC,USDT`93 - Some older English docs use `quoteCurrencies`; prefer `quote_currencies` for current Korean/global docs.94- Response fields are ticker snapshot fields, same shape as `/v1/ticker`.9596Prefer this over calling `/v1/ticker` repeatedly for every pair in a quote market.9798### Candles99100Use candles as the input for chart analysis and local indicator calculation.101102- Seconds: `GET /v1/candles/seconds`103- Minutes: `GET /v1/candles/minutes/{unit}`104- Days: `GET /v1/candles/days`105- Weeks: `GET /v1/candles/weeks`106- Months: `GET /v1/candles/months`107- Years: `GET /v1/candles/years`108109Minute units:110111- `1`, `3`, `5`, `10`, `15`, `30`, `60`, `240`112113Common params:114115- `market=KRW-BTC`116- `count=200` maximum per request for recent candles117- `to=<ISO datetime>` for pagination/backfill before a cutoff118119Key fields:120121- `market`122- `candle_date_time_utc`123- `candle_date_time_kst`124- `opening_price`125- `high_price`126- `low_price`127- `trade_price`128- `candle_acc_trade_price`129- `candle_acc_trade_volume`130- `timestamp`131- `unit` for minute candles132133Map `opening_price`, `high_price`, `low_price`, `trade_price`, and `candle_acc_trade_volume` into OHLCV bars. Treat `candle_acc_trade_price` as candle trading value.134135## Candle Caveats136137- Candles are generated only when trades occurred in that interval.138- Missing intervals are expected and should not be filled silently unless the target analysis explicitly defines a fill policy.139- 1-second candle data has limited retention; current docs state up to 3 months.140- For `to` params containing `+`, `:`, or spaces, rely on HTTP-client params encoding instead of manually concatenating query strings.141142## Rate Limits143144Upbit applies second-based rate limits by Rate Limit group.145146Read-only Quotation REST APIs are measured by IP. The relevant groups are:147148- `market`: trading pair list, up to 10 requests/sec149- `ticker`: `/v1/ticker` and `/v1/ticker/all`, up to 10 requests/sec150- `candle`: all candle endpoints, up to 10 requests/sec151152Important handling rules:153154- Limits are shared within the same group. For example `/v1/ticker` and `/v1/ticker/all` both spend from `ticker`.155- Check the `Remaining-Req` response header after every request.156- Header shape: `group=ticker; min=1800; sec=9`157- Treat `sec` as the remaining requests in the current second. Ignore `min`; official docs mark it as deprecated/fixed.158- On HTTP `429`, back off immediately.159- Repeated limit violations can return HTTP `418` with a temporary IP/account block; stop requests until the block duration passes.160- Requests with an `Origin` header can be subject to a stricter policy for Quotation REST/WebSocket requests. Do not send browser-like `Origin` headers from server-side clients.161162Recommended defaults:163164- Use one shared limiter per process and per group: `market`, `ticker`, `candle`.165- Cap each group at 8 requests/sec locally, not 10, to leave headroom for concurrent jobs.166- Batch pairs in `/v1/ticker?markets=...` and use `/v1/ticker/all` for quote-market sweeps.167- For candle backfills, page sequentially with `to` and obey the `candle` limiter.168- Log `Remaining-Req`, status code, endpoint group, and market code, but never log credentials or unrelated private data.169170## Implementation Checklist1711721. Keep the client unauthenticated and read-only.1732. Choose the narrowest endpoint:174 - exact pairs: `/v1/ticker`175 - all pairs under quote market: `/v1/ticker/all`176 - chart bars: candle endpoint by interval1773. Validate market code format before calling the API.1784. Use an HTTP client with structured query params.1795. Normalize Upbit field names at the adapter boundary.1806. Preserve raw payload only if the target project's retention policy allows it.1817. Enforce group-aware rate limiting and parse `Remaining-Req`.1828. Do not compute indicators in the API client. Compute them after candle normalization.183184## Official References185186- Upbit Developer Center: `https://docs.upbit.com/kr`187- Rate limits: `https://docs.upbit.com/kr/reference/rate-limits`188- Trading pair list: `https://global-docs.upbit.com/reference/listing-market-list`189- Tickers by pair: `https://global-docs.upbit.com/reference/tickers`190- Tickers by quote currency: `https://docs.upbit.com/kr/reference/tickers_by_quote`191- Minute candles: `https://global-docs.upbit.com/reference/list-candles-minutes`192- REST best practices: `https://global-docs.upbit.com/docs/rest-api-best-practice`