Integration of OKX API into a Mobile Crypto App
We often encounter teams migrating from Binance to OKX who run into fundamental differences in API architecture. OKX is one of the few exchanges where REST and WebSocket live in different URL spaces with different authentication logic. REST goes to https://www.okx.com/api/v5/, WebSocket to wss://ws.okx.com:8443/ws/v5/public and /private. If you port the architecture "as-is," surprises await.
We are mobile developers with 5+ years of experience, having implemented over 30 integrations with crypto exchanges, including OKX, Binance, and Bybit. For example, for one fintech startup, we connected spot trading and historical data on OKX in three weeks, allowing them to enter the market two months ahead of competitors. Our accumulated modules reduce the integration time to 2–4 weeks for basic functionality.
The specifics of OKX require a clear understanding of the signing scheme, instrument types, and trading modes to avoid critical errors in production. Let's break down the key points based on the OKX API Documentation.
How to Sign Requests to the OKX REST API?
OKX authenticates requests via HTTP headers, not query string or body:
-
OK-ACCESS-KEY— API key -
OK-ACCESS-SIGN— Base64(HMAC-SHA256(timestamp + method + requestPath + body)) -
OK-ACCESS-TIMESTAMP— ISO 8601 with milliseconds -
OK-ACCESS-PASSPHRASE— third secret
requestPath includes the query string: for GET /api/v5/account/balance?ccy=BTC, sign /api/v5/account/balance?ccy=BTC. Body for GET requests is an empty string "". Error {"code":"50113","msg":"Invalid Sign"} almost always means a problem with requestPath — 80% of such errors are caused by incorrect inclusion of the query string. Timestamp in ISO 8601 with milliseconds is rare. On Android, Instant.now().toString() gives the required format starting from API 26. For older versions — SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US) with UTC timezone.
| Parameter | OKX | Binance |
|---|---|---|
| Signature location | Headers | Headers (X-MBX-*) |
| Algorithm | HMAC-SHA256 | HMAC-SHA256 |
| Query string inclusion | Yes | No |
| Timestamp format | ISO 8601 with ms | Unix ms |
| Passphrase | Required | No |
Why is WebSocket Private More Complex Than It Seems?
OKX session authentication differs from REST: you send a JSON with op: "login", where timestamp is Unix seconds (not milliseconds, not ISO). Signature: HMAC-SHA256(timestamp + "GET" + "/users/self/verify").
{ "op": "login", "args": [{ "apiKey": "...", "passphrase": "...", "timestamp": "1705312200", "sign": "..." }] } This difference is a frequent source of errors when refactoring a common auth module. 90% of developers forget to switch the timestamp format, leading to failed authentication. OKX disconnects the WebSocket session after 30 seconds without activity. Ping/pong is non-standard: send the string "ping", receive "pong". Not JSON but a raw string — libraries that only work with JSON text frames break.
What to Do About Error 50113?
Error 50113 "Invalid Sign" is the most common during integration. Check:
- Query string included in requestPath
- Body empty for GET
- Timestamp in ISO 8601 with milliseconds
- Passphrase matches the one set when creating the API key
Nuances of Product Logic
OKX supports instType: SPOT, MARGIN, SWAP, FUTURES, OPTION. The same ticker exists in multiple instTypes with different rules. When implementing an order form, you must explicitly pass instType — otherwise the exchange returns {"code":"51001","msg":"Instrument ID does not exist"}. Another feature is tdMode: cash for Spot, cross or isolated for margin. Mobile UIs often hide this choice "for simplicity," which leads to accidental opening of margin positions. We recommend an explicit UI selection with a warning.
| Error | Cause | Solution |
|---|---|---|
| 50113 Invalid Sign | Incorrect requestPath (missing query string or extra slash) | Check path formation with query string |
| 51001 Instrument ID does not exist | instType not specified | Explicitly pass instType for each instrument |
| WebSocket disconnect | Incorrect timestamp in login | Use Unix seconds, not ISO |
| Order in margin mode | Hidden tdMode selection | Display explicit toggle with warning |
Working with Historical Data
OKX limits candlesticks: GET /api/v5/market/candles returns a maximum of 300 records. To load history while scrolling backwards, you need a paginated request with the before parameter (candle ID). The standard mistake is using after instead of before, resulting in data in reverse order and then inverting the array in the UI with visual artifacts. The OKX demo environment allows you to test pagination without risking real funds.
Typical errors when integrating OKX
- Incorrect requestPath (forgot query string or added extra slash) - Using ISO instead of Unix seconds in WebSocket login - Lack of handling for non-standard ping/pong - Missing instType when placing an order - Replacing `before` with `after` for candle paginationHow We Simplify Integration?
We offer ready-made signing modules for Swift, Kotlin, Flutter, and React Native. They cover REST and WebSocket, automatically selecting the timestamp format. As a result, the average budget savings on developing the authentication layer is 40% — twice as fast as the market average. Testing in the OKX demo environment speeds up debugging threefold compared to exchanges without a sandbox. We guarantee that your production will not encounter errors 50113 or 51001. Our engineers integrate push notifications (APNs) for trade alerts and configure deep linking for moving from web links into the app.
What's Included
- Integration documentation with code examples in Swift, Kotlin, Flutter, and React Native
- Adapters for REST signing and WebSocket session management
- Keychain/key store configuration for iOS/Android
- UI development for selecting instType and tdMode with warnings
- Post-deployment support for 2 weeks
Work Process
- Analysis of your architecture and stack selection (Flutter/React Native/Native)
- Design of authentication module and state management
- Implementation of REST + WebSocket layer with error handling
- Testing on OKX demo environment and with real keys
- Deployment to App Store / Google Play with review recommendations
Estimated Timelines
Basic integration (market data + spot trading) — from 2 to 4 weeks. Derivatives and margin — add another 3–4 weeks for business logic and testing edge cases. Cost is calculated individually depending on project complexity. Contact us for a detailed consultation and order OKX API integration with ready-made signing modules — we ensure seamless trading in your app.







