Exodus — Main REST API
Base: https://exodus.stockbit.com
Auth: Authorization: Bearer <main_token> (JWT, valid ~90 days)
User
| Method |
Path |
Description |
| GET |
/user/profile |
Get current user profile |
| GET |
/user/profile/{username} |
Get user profile by username |
| PUT |
/user/profile |
Edit user profile |
| PUT |
/user/profile/country |
Update country preference |
| GET |
/user/setting |
Get user settings |
| GET |
/user/trending |
Trending users |
| GET |
/user/v2/setting/change/status |
Setting change status |
| POST |
/user/v2/setting/token |
Get setting token |
| POST |
/user/v3/setting/token |
Get setting token v3 |
| POST |
/user/v2/setting/change/verify/identity |
Verify identity |
| POST |
/user/v2/setting/change/verify/otp |
Verify OTP |
| POST |
/user/v2/setting/change/confirm |
Confirm setting change |
| POST |
/user/setting/pin |
Set PIN |
| POST |
/user/setting/password/forgot |
Forgot password |
| POST |
/user/setting/password/reset |
Reset password |
PUT /user/profile — Payload
{
"username": "hansputera",
"fullname": "Hanif Dwy Putra S",
"bio": "trader",
"avatar": "avatar_url"
}
GET /user/profile — Response
{
"data": {
"userid": 3468390,
"username": "hansputera",
"email": "sekuritas.hanif@gmail.com",
"fullname": "Hanif Dwy Putra S",
"bio": "",
"avatar_url": "https://avatar.stockbit.com/...",
"is_verified": true,
"followers": 0,
"following": 0
}
}
Social / Stream
| Method |
Path |
Params |
Description |
| GET |
/stream/get |
— |
Main feed |
| GET |
/stream/trending |
date |
Trending posts |
| GET |
/stream/v3 |
— |
Stream v3 |
| GET |
/stream/v3/symbol/{symbol} |
— |
Stream filtered by stock |
| GET |
/stream/non-login/user/{id} |
— |
Public user stream |
GET /stream/v3/symbol/{symbol} — Response
{
"data": {
"streams": [{
"id": "post_id",
"user": { "userid": 3468390, "username": "hansputera", "fullname": "Hanif Dwy Putra S", "avatar": "avatar_url" },
"text": "Post content",
"likes": 10,
"comments": 2,
"created_at": "2026-07-15T07:00:00Z"
}]
}
}
Social Graph
| Method |
Path |
Description |
| GET |
/usergraph/socialinfo/user/me |
My social stats (followers, following) |
| GET |
/usergraph/socialinfo/{username} |
User social stats |
| GET |
/usergraph/non-login/socialinfo/{username} |
Public social stats |
Search
| Method |
Path |
Params |
Description |
| GET |
/search |
keyword, page(int), type(string) |
Search users, companies, posts |
| GET |
/search/recent |
— |
Recent searches list |
| POST |
/search/recent |
— |
Save recent search |
Params type: "users", "company", "all", "emiten"
Notifications
| Method |
Path |
Description |
| GET |
/notification |
List notifications |
| POST |
/notification/read |
Mark all as read |
| GET |
/notification/settings |
Get notification settings |
| GET |
/notification/v3/settings |
Get notification settings (v3) |
| GET |
/count/unread |
Unread notification count |
User Blocking
| Method |
Path |
Description |
| POST |
/user/{userId}/block |
Block user |
| POST |
/user/{userId}/unblock |
Unblock user |
| GET |
/user/blocked |
List blocked users |
| Method |
Path |
Description |
| POST |
/user/v2/connect/{media} |
Connect social account (facebook, google) |
| POST |
/user/disconnect/{media} |
Disconnect social account |
Onboarding & Upload
| Method |
Path |
Description |
| POST |
/user/onboarding |
Complete onboarding step |
| POST |
/user/upload/token |
Get S3 upload token |
| GET |
/user/avatar/collection |
List 3D avatar options |
Admin & Badge
| Method |
Path |
Description |
| POST |
/user/admin/suspend |
Suspend user (admin) |
| GET |
/verified-badge/user/{userId} |
Get verified badge status |
Suggested People
| Method |
Path |
Params |
Description |
| GET |
/suggest-friends |
page, limit, filter |
Suggested users to follow |
Watchlist
| Method |
Path |
Description |
| GET |
/watchlist |
Get all user watchlists |
| POST |
/watchlist/list |
List items in default watchlist |
| POST |
/watchlist/detail |
Watchlist details |
| POST |
/watchlist/create |
Create new watchlist |
| POST |
/watchlist/delete |
Delete watchlist |
| POST |
/watchlist/add |
Add stock to watchlist |
| POST |
/watchlist/remove |
Remove stock from watchlist |
| GET |
/watchlist/metric |
Watchlist aggregate metrics |
| GET |
/watchlist/search/company |
Search companies to add |
| POST |
/column/reorder |
Reorder watchlist columns |
| POST |
/favorites/rearrange |
Rearrange favorites |
| POST |
/company/item |
Company item action |
| GET |
/suggestion/company |
Suggested companies to follow |
Stock Chart Data
| Method |
Path |
Params |
Description |
| GET |
/chartbit/{symbol}/price/daily |
from(YYYY-MM-DD), to(YYYY-MM-DD) |
Daily OHLCV |
| GET |
/chartbit/{symbol}/price/intraday |
from(unix ts), to(unix ts) |
Intraday OHLCV |
| GET |
/chartbit/chart/corpaction |
symbol, from, to |
Corporate actions overlay |
| GET |
/chartbit/custom/indicator |
— |
Custom indicators |
| GET |
/chartbit/{symbol}/initial |
— |
Initial chart bootstrap |
| GET |
/chartbit/{symbol}/layout |
— |
Get chart layout |
| POST |
/chartbit/{symbol}/layout |
— |
Save chart layout |
| GET |
/chartbit/template |
— |
Get saved chart templates |
| POST |
/chartbit/template |
— |
Save chart template |
| GET |
/chartbit/{symbol}/template/{templateId} |
— |
Load chart template |
| DELETE |
/chartbit/template/{templateId} |
— |
Delete chart template |
| GET |
/chartbit/version |
— |
Chartbit version |
GET /chartbit/{symbol}/price/daily — Response
{
"data": { "chartbit": [{ "t": "1720775580", "o": 150, "h": 152, "l": 148, "c": 150, "v": 938717000 }] }
}
User Settings (Chart)
| Method |
Path |
Params |
Description |
| GET |
/user-setting/configurations |
?user_setting_type=1 |
Get chart settings |
| POST |
/user-setting/configurations |
{ key, value } |
Save chart setting |
Company / Stock Info
| Method |
Path |
Params |
Description |
| GET |
/emitten/{symbol}/profile |
— |
Company profile |
| GET |
/emitten/non-login/{symbol}/info |
— |
Company info (full detail) |
| GET |
/emitten/non-login/{symbol} |
— |
Company info (legacy) |
| GET |
/emitten/IHSG/info |
— |
IHSG index info |
| GET |
/emitten/trending |
— |
Trending stocks |
| GET |
/broker/activity |
symbol, page, limit |
Broker buy/sell activity |
| GET |
/broker/list |
— |
Broker master list |
| GET |
/top-broker |
— |
Top brokers by volume |
| GET |
/insider/company/majorholder |
symbols, page, limit, ... |
Major shareholders |
| GET |
/insider/shareholding/composition/companies/ |
— |
Shareholding composition |
| GET |
/corpaction/{symbol} |
limit |
Corporate actions |
| GET |
/keystats/ratio/v1/{symbol} |
year_limit |
Key financial ratios |
| GET |
/orderbook/companies/{symbol} |
— |
REST orderbook snapshot |
| GET |
/company-price-feed/price-performance/{symbol} |
— |
Price performance |
| GET |
/company-price-feed/seasonality/{symbol} |
year, back_year |
Seasonality |
| GET |
/charts/{symbol}/daily |
timeframe |
Daily chart snapshot |
| GET |
/order-trade/broker/top |
sort, period |
Top brokers |
| GET |
/findata-view/company/financial |
symbol, data_type, ... |
Financial reports |
| GET |
/indexes/special-board |
— |
Special board indexes |
| GET |
/formula/v2 |
— |
Fee formulas |
GET /emitten/non-login/BBCA/info — Response
{
"data": {
"symbol": "BBCA",
"name": "Bank Central Asia Tbk.",
"sector": "Keuangan",
"sub_sector": "Bank",
"exchange": "IDX",
"price": "6125",
"previous": "6125",
"change": "0.00",
"status": "STATUS_ACTIVE",
"type_company": "Saham",
"orderbook": { "bid": { "price": "6100", "volume": "6784400" }, "offer": { "price": "6125", "volume": "3091900" } },
"market_hour": { "status": "open", "time_left": 0, "formatted_time_left": "0 jam 0 menit 0 detik" },
"indexes": ["LQ45", "IDX30", "KOMPAS100", "IHSG"],
"followers": 3259406,
"day_trade_multiplier": "5"
}
}
GET /keystats/ratio/v1/BBCA — Response
{
"data": { "symbol": "BBCA", "per": 12.91, "pbv": 2.45, "roe": 18.5, "der": 0.45, "dividend_yield": 3.2, "market_cap": 1200000000000000 }
}
GET /formula/v2 — Response (Fee formulas)
{
"data": {
"version": "6",
"formula": {
"buy": { "invested": "(LOT*100)*PRICE", "fee": "((LOT*100)*PRICE)*FEE_BUY", "broker_fee": "((LOT*100)*PRICE)*BROKER_FEE", "exchange_fee": "((LOT*100)*PRICE)*EXCHANGE_FEE_TOTAL_BUY" },
"sell": { "invested": "(LOT*100)*PRICE", "fee": "((LOT*100)*PRICE)*FEE_SELL" }
}
}
}
Sectors
| Method |
Path |
Description |
| GET |
/sectors |
All sectors |
| GET |
/sectors/{id} |
Sector detail |
| GET |
/subsectors |
All subsectors |
| GET |
/subsector/{id} |
Subsector detail |
| GET |
/v3/sector/ |
Sectors v3 |
Index
| Method |
Path |
Description |
| GET |
/indexes/special-board |
Special board indexes |
Auth / Utility
| Method |
Path |
Description |
| GET |
/sekuritas/auth/token |
Get sekuritas login token (for trading) |
| GET |
/auth/websocket/key |
Get WebSocket authentication key |
| POST |
/auth/pin |
Authenticate PIN |
| POST |
/auth/pin/reset |
Reset PIN |
| POST |
/login/refresh |
Refresh main JWT token |
| GET |
/status/active |
Check if user account is active |
| GET |
/auth/session/device/{id} |
Device session info |
| POST |
/auth/v2/session/devices |
List session devices |
| POST |
/login/v3/username/browser |
Browser username login |
| POST |
/login/v4/facebook |
Facebook login |
| POST |
/login/v4/google |
Google login |
Orderbook
| Method |
Path |
Description |
| GET |
/orderbook/companies/{symbol} |
Get bid/offer for a stock |
GET /orderbook/companies/BUMI — Response
{
"data": {
"average": 150, "close": 150, "previous": 149, "change": 1,
"open": 150, "high": 152, "low": 148,
"volume": "938717000", "value": "140862880000",
"bid": { "price1": "149", "volume1": "43471300", "price2": "148", "volume2": "60441300" },
"offer": { "price1": "150", "volume1": "28319200", "price2": "151", "volume2": "15826300" },
"status": "Active",
"ara": { "value": "200", "visible": true },
"arb": { "value": "127", "visible": true }
}
}
Bid/offer uses `price1..price10` / `volume1..volume10` naming.
`ara` = Auto Rejection Above, `arb` = Auto Rejection Below.
Analyst (Next.js data endpoint)
Hosted on stockbit.com, not exodus.stockbit.com:
GET https://stockbit.com/_next/data/{build_id}/symbol/{symbol}/analyst.json?param=analyst
build_id is the Next.js build hash (found in /_next/static/${build_id}/_buildManifest.js).