Coins.ph Coins Pro — Market Data
Coins Pro — Market Data API (TRADING v1.0.0) — part of the Coins.ph developer platform.
Coins Pro — Market Data API (TRADING v1.0.0) — part of the Coins.ph developer platform.
{
"openapi": "3.1.0",
"info": {
"title": "TRADING",
"version": "1.0.0",
"description": "Market data endpoints for Coins.ph Trading API — real-time prices, order book, klines, ticker statistics, and trade data."
},
"servers": [
{
"url": "https://api.pro.coins.ph",
"description": "Production"
},
{
"url": "https://api.9001.pl-qa.coinsxyz.me",
"description": "Sandbox"
}
],
"tags": [
{
"name": "Markets",
"description": "Market data APIs."
}
],
"paths": {
"/openapi/v1/pairs": {
"get": {
"tags": [
"Markets"
],
"summary": "Cryptoasset Trading Pairs",
"description": "Returns a summary of all cryptoasset trading pairs available on the exchange.\n\nNo query parameters are required. Returns all active trading pairs on the exchange.\n\nSymbol format: `{baseToken}{quoteToken}` — e.g., `LTCBTC` means LTC quoted in BTC.\n\n---\n\n## Additional Info\n\n**Rate Limit** [📖 Learn More](https://api.docs.coins.ph/reference/general#api-limit-introduction)\n\nWeight: 1\n\n**Use Cases** [🧩 SDK](https://api.docs.coins.ph/reference/general#sdk)\n\n- **Instrument Discovery** — Enumerate all active trading pairs to know which symbols are available before placing order.\n\n**Best Practices**\n\n- Cache the trading pairs list and refresh periodically (e.g., every 5–10 minutes).\n- Use the `symbol` field when making requests to other market data endpoints.\n- Validate trading pairs before attempting to place orders.\n- Handle empty arrays gracefully in case no trading pairs are available.\n",
"operationId": "get_cryptoasset_trading_pairs",
"x-codeSamples": [
{
"lang": "Shell",
"label": "Get all trading pairs",
"source": "curl --location 'https://api.pro.coins.ph/openapi/v1/pairs'\n"
}
],
"responses": {
"200": {
"description": "List of all available cryptoasset trading pairs.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "The combined identifier for the trading pair.",
"example": "BTCUSDT"
},
"quoteToken": {
"type": "string",
"description": "The asset used as the pricing reference.",
"example": "USDT"
},
"baseToken": {
"type": "string",
"description": "The asset being traded.",
"example": "BTC"
}
}
}
},
"examples": {
"success": {
"summary": "Successful response",
"value": [
{
"symbol": "LTCBTC",
"quoteToken": "BTC",
"baseToken": "LTC"
},
{
"symbol": "BTCUSDT",
"quoteToken": "USDT",
"baseToken": "BTC"
}
]
}
}
}
}
},
"default": {
"description": "API error response. The `code` field contains the internal API error code (not an HTTP status code).\n\n| Code | Description |\n|---|---|\n| -1121 | Invalid symbol. |\n\nFor the full list of error codes, see [Error Codes](https://api.docs.coins.ph/reference/error-codes).\n"
}
}
}
},
"/openapi/quote/v1/depth": {
"get": {
"tags": [
"Markets"
],
"summary": "Order Book",
"description": "Retrieves the order book (market depth) for a specified trading symbol. Returns bid and ask orders with their respective prices and quantities.\n\n**Bids** are buy orders sorted by price (highest to lowest — first element is best bid).\n\n**Asks** are sell orders sorted by price (lowest to highest — first element is best ask).\n\nAll numeric values (price and quantity) are returned as **strings** to preserve precision.\n\n---\n\n## Additional Info\n\n**Rate Limit** [📖 Learn More](https://api.docs.coins.ph/reference/general#api-limit-introduction)\n\n| Limit Values | Weight |\n|---|---|\n| 5, 10, 20, 50, 100 | 1 |\n| 200 | 5 |\n\n**Use Cases** [🧩 SDK](https://api.docs.coins.ph/reference/general#sdk)\n\n- **Pre-Trade Liquidity Check** — Inspect available depth before placing a large order to estimate fill size and average execution price.\n- **Spread Assessment** — Compare `bids[0][0]` and `asks[0][0]` to measure market tightness before entering a position.\n- **Market-Making** — Poll top-of-book continuously to set competitive bid/ask prices on both sides.\n- **Slippage Estimation** — Walk through depth levels to predict average fill price for a given order size before submitting.\n\n**Best Practices**\n\n- Use smaller limits (5, 10, 20) for UI display; use larger limits (100, 200) for trading algorithms.\n- Use `lastUpdateId` to track order book changes.\n- Consider using WebSocket streams for real-time updates.\n- Monitor your weight consumption and implement exponential backoff for retries.\n",
"operationId": "get_order_book",
"parameters": [
{
"in": "query",
"name": "symbol",
"required": true,
"schema": {
"type": "string",
"example": "BTCPHP"
},
"description": "Trading pair symbol (e.g., BTCPHP, ETHPHP). The symbol must be in uppercase and represents Base Asset + Quote Asset.\n"
},
{
"in": "query",
"name": "limit",
"required": false,
"schema": {
"type": "integer",
"example": 20
},
"description": "Number of order book entries to return for both bids and asks. Valid values: 5, 10, 20, 50, 100, 200. Default: 100."
}
],
"x-codeSamples": [
{
"lang": "Shell",
"label": "Get order book depth",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/depth' \\\n--data-urlencode 'symbol=BTCPHP' \\\n--data-urlencode 'limit=20'\n"
}
],
"responses": {
"200": {
"description": "Order book with bids and asks.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"lastUpdateId": {
"type": "integer",
"description": "Last update ID for tracking order book changes.",
"example": 1027024
},
"bids": {
"type": "array",
"description": "Buy orders as `[price, quantity]` pairs, sorted highest to lowest."
},
"asks": {
"type": "array",
"description": "Sell orders as `[price, quantity]` pairs, sorted lowest to highest."
}
}
},
"examples": {
"success": {
"summary": "Successful response",
"value": {
"lastUpdateId": 1027024,
"bids": [
[
"4.90000000",
"331.00000000"
],
[
"4.00000000",
"431.00000000"
]
],
"asks": [
[
"4.00000200",
"12.00000000"
],
[
"5.10000000",
"28.00000000"
]
]
}
}
}
}
}
},
"default": {
"description": "API error response. The `code` field contains the internal API error code (not an HTTP status code).\n\n| Code | Description |\n|---|---|\n| -1121 | Invalid symbol. |\n\nFor the full list of error codes, see [Error Codes](https://api.docs.coins.ph/reference/error-codes).\n"
}
}
}
},
"/openapi/quote/v1/klines": {
"get": {
"tags": [
"Markets"
],
"summary": "Kline/Candlestick Data",
"description": "Returns Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.\n\nIf `startTime` and `endTime` are not sent, the most recent klines are returned. Each kline array contains 11 elements. Timestamps are in milliseconds since Unix epoch. Maximum limit is 1000 klines per request.\n\n**Interval options:** `1m`, `3m`, `5m`, `15m`, `30m`, `1h`, `2h`, `4h`, `6h`, `8h`, `12h`, `1d`, `3d`, `1w`, `1M`\n\n**Response array index reference:**\n\n| Index | Field | Type | Description |\n|---|---|---|---|\n| 0 | Open Time | LONG | Kline open time in milliseconds |\n| 1 | Open | STRING | Opening price |\n| 2 | High | STRING | Highest price during the interval |\n| 3 | Low | STRING | Lowest price during the interval |\n| 4 | Close | STRING | Closing price |\n| 5 | Volume | STRING | Trading volume (base asset) |\n| 6 | Close Time | LONG | Kline close time in milliseconds |\n| 7 | Quote Asset Volume | STRING | Trading volume (quote asset) |\n| 8 | Number of Trades | INT | Number of trades during the interval |\n| 9 | Taker Buy Base Volume | STRING | Volume of taker buy orders (base asset) |\n| 10 | Taker Buy Quote Volume | STRING | Volume of taker buy orders (quote asset) |\n\n---\n\n## Additional Info\n\n**Rate Limit** [📖 Learn More](https://api.docs.coins.ph/reference/general#api-limit-introduction)\n\nWeight: 1\n\n**Use Cases** [🧩 SDK](https://api.docs.coins.ph/reference/general#sdk)\n\n- **Technical Analysis** — Fetch recent klines to compute indicators (MA, RSI, Bollinger Bands) before an algorithm decides to place an order.\n- **Backtesting** — Download historical klines to simulate strategy performance against real past price action before going live.\n- **Volume Analysis** — Aggregate taker buy volume across intervals to gauge directional pressure and confirm a trend.\n\n**Best Practices**\n\n- Cache historical kline data locally to reduce API calls.\n- Use `startTime` and `endTime` to paginate through historical data.\n- Choose appropriate intervals: short (1m, 5m) for intraday; medium (1h, 4h) for swing trading; long (1d, 1w) for position trading.\n- Don't request more data than needed; use appropriate limit values.\n- All price and volume fields are returned as strings to maintain precision.\n",
"operationId": "get_kline_candlestick_data",
"parameters": [
{
"in": "query",
"name": "symbol",
"required": true,
"schema": {
"type": "string",
"example": "BTCUSDT"
},
"description": "Trading pair symbol."
},
{
"in": "query",
"name": "interval",
"required": true,
"schema": {
"type": "string",
"enum": [
"1m",
"3m",
"5m",
"15m",
"30m",
"1h",
"2h",
"4h",
"6h",
"8h",
"12h",
"1d",
"3d",
"1w",
"1M"
],
"example": "1h"
},
"description": "Kline interval."
},
{
"in": "query",
"name": "startTime",
"required": false,
"schema": {
"type": "integer",
"format": "int64",
"example": 1499040000000
},
"description": "Start time in milliseconds."
},
{
"in": "query",
"name": "endTime",
"required": false,
"schema": {
"type": "integer",
"format": "int64",
"example": 1499644799000
},
"description": "End time in milliseconds."
},
{
"in": "query",
"name": "limit",
"required": false,
"schema": {
"type": "integer",
"example": 500
},
"description": "Number of results to return. Default: 500. Maximum: 1000."
}
],
"x-codeSamples": [
{
"lang": "Shell",
"label": "Get klines (1h interval)",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/klines' \\\n--data-urlencode 'symbol=BTCUSDT' \\\n--data-urlencode 'interval=1h'\n"
},
{
"lang": "Shell",
"label": "Historical data with time range",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/klines' \\\n--data-urlencode 'symbol=BTCUSDT' \\\n--data-urlencode 'interval=1d' \\\n--data-urlencode 'startTime=1609459200000' \\\n--data-urlencode 'endTime=1612137600000'\n"
}
],
"responses": {
"200": {
"description": "Array of kline/candlestick data arrays.",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"openTime": {
"type": "integer",
"format": "int64",
"description": "Kline open time in milliseconds.",
"example": 1499040000000
},
"open": {
"type": "string",
"description": "Opening price.",
"example": "0.01634790"
},
"high": {
"type": "string",
"description": "Highest price during the interval.",
"example": "0.80000000"
},
"low": {
"type": "string",
"description": "Lowest price during the interval.",
"example": "0.01575800"
},
"close": {
"type": "string",
"description": "Closing price.",
"example": "0.01577100"
},
"volume": {
"type": "string",
"description": "Trading volume (base asset).",
"example": "148976.11427815"
},
"closeTime": {
"type": "integer",
"format": "int64",
"description": "Kline close time in milliseconds.",
"example": 1499644799999
},
"quoteAssetVolume": {
"type": "string",
"description": "Trading volume (quote asset).",
"example": "2434.19055334"
},
"numberOfTrades": {
"type": "integer",
"description": "Number of trades during the interval.",
"example": 308
},
"takerBuyBaseVolume": {
"type": "string",
"description": "Volume of taker buy orders (base asset).",
"example": "1756.87402397"
},
"takerBuyQuoteVolume": {
"type": "string",
"description": "Volume of taker buy orders (quote asset).",
"example": "28.46694368"
}
}
}
},
"examples": {
"success": {
"summary": "Successful response",
"value": [
[
1499040000000,
"0.01634790",
"0.80000000",
"0.01575800",
"0.01577100",
"148976.11427815",
1499644799999,
"2434.19055334",
308,
"1756.87402397",
"28.46694368"
]
]
}
}
}
}
},
"default": {
"description": "API error response. The `code` field contains the internal API error code (not an HTTP status code).\n\n| Code | Description |\n|---|---|\n| -1121 | Invalid symbol. |\n| -1100 | Invalid interval parameter. |\n\nFor the full list of error codes, see [Error Codes](https://api.docs.coins.ph/reference/error-codes).\n"
}
}
}
},
"/openapi/quote/v1/ticker/24hr": {
"get": {
"tags": [
"Markets"
],
"summary": "24hr Ticker Price Change Statistics",
"description": "Retrieves 24-hour rolling window price change statistics for one or multiple trading symbols. Returns comprehensive market data including price changes, volumes, and trading counts.\n\n**Careful** when accessing this endpoint with no `symbol` parameter — it returns data for all symbols at a higher weight cost.\n\nUse `symbol` for a single pair, `symbols` for multiple specific pairs (JSON array format, e.g., `[\"BTCUSDT\",\"BNBUSDT\"]`). `symbol` and `symbols` cannot be used in combination.\n\n**Price change calculations:**\n- `priceChange` = `lastPrice` − `openPrice`\n- `priceChangePercent` = `((lastPrice − openPrice) / openPrice) × 100`\n- `weightedAvgPrice` = `quoteVolume / volume`\n\n---\n\n## Additional Info\n\n**Rate Limit** [📖 Learn More](https://api.docs.coins.ph/reference/general#api-limit-introduction)\n\n| Parameter | Weight |\n|---|---|\n| symbol (1 symbol) | 1 |\n| symbols (1–20 symbols) | 1 |\n| symbols (21–100 symbols) | 20 |\n| symbols (101+ symbols) | 40 |\n| symbol omitted (all symbols) | 40 |\n\n**Use Cases** [🧩 SDK](https://api.docs.coins.ph/reference/general#sdk)\n\n- **Market Overview** — Load 24h stats for all symbols to render a market screener with price change, volume, and high/low per pair.\n- **Price Change Alerts** — Monitor `priceChangePercent` across symbols to detect when a threshold is breached and trigger a notification.\n- **Volume Ranking** — Sort symbols by `quoteVolume` to identify the most actively traded pairs and allocate attention or liquidity accordingly.\n\n**Best Practices**\n\n- Use `symbol` for a single pair; use `symbols` for multiple; omit both only when you truly need all symbols.\n- Cache ticker data when real-time updates aren't critical.\n- Use WebSocket streams for continuous real-time data instead of polling.\n- Requesting all symbols uses 40× more weight than a single symbol.\n",
"operationId": "get_24hr_ticker_price_change_statistics",
"parameters": [
{
"in": "query",
"name": "symbol",
"required": false,
"schema": {
"type": "string",
"example": "BTCPHP"
},
"description": "Trading pair symbol. If omitted, tickers for all symbols are returned in an array. Not case sensitive. Cannot be used with `symbols`.\n"
},
{
"in": "query",
"name": "symbols",
"required": false,
"schema": {
"type": "string",
"example": "[\"BTCUSDT\",\"BNBUSDT\"]"
},
"description": "Alternative to symbol. Provide multiple symbols as a JSON array string. Cannot be used with `symbol`.\n"
}
],
"x-codeSamples": [
{
"lang": "Shell",
"label": "Single symbol",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/ticker/24hr' \\\n--data-urlencode 'symbol=BTCPHP'\n"
},
{
"lang": "Shell",
"label": "All symbols",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/ticker/24hr'\n"
}
],
"responses": {
"200": {
"description": "24-hour ticker statistics. Returns a single object for one symbol, or an array for multiple/all symbols.",
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Trading pair symbol.",
"example": "BTCPHP"
},
"priceChange": {
"type": "string",
"description": "Absolute price change in the last 24 hours.",
"example": "-1500.00000000"
},
"priceChangePercent": {
"type": "string",
"description": "Relative price change in percent in the last 24 hours.",
"example": "-2.450"
},
"weightedAvgPrice": {
"type": "string",
"description": "Weighted average price over the last 24 hours.",
"example": "62350.50000000"
},
"prevClosePrice": {
"type": "string",
"description": "Previous close price (from 24 hours ago).",
"example": "61250.00000000"
},
"lastPrice": {
"type": "string",
"description": "Latest price.",
"example": "59750.00000000"
},
"lastQty": {
"type": "string",
"description": "Quantity of the latest trade.",
"example": "0.05000000"
},
"bidPrice": {
"type": "string",
"description": "Current best bid price.",
"example": "59745.00000000"
},
"bidQty": {
"type": "string",
"description": "Quantity of the current best bid.",
"example": "1.25000000"
},
"askPrice": {
"type": "string",
"description": "Current best ask price.",
"example": "59755.00000000"
},
"askQty": {
"type": "string",
"description": "Quantity of the current best ask.",
"example": "0.85000000"
},
"openPrice": {
"type": "string",
"description": "Opening price 24 hours ago.",
"example": "61250.00000000"
},
"highPrice": {
"type": "string",
"description": "Highest price in the last 24 hours.",
"example": "63500.00000000"
},
"lowPrice": {
"type": "string",
"description": "Lowest price in the last 24 hours.",
"example": "58900.00000000"
},
"volume": {
"type": "string",
"description": "Total trading volume in base asset over the last 24 hours.",
"example": "125.50000000"
},
"quoteVolume": {
"type": "string",
"description": "Total trading volume in quote asset over the last 24 hours.",
"example": "7825000.00000000"
},
"openTime": {
"type": "integer",
"format": "int64",
"description": "Statistics open time (timestamp in milliseconds).",
"example": 1499783499040
},
"closeTime": {
"type": "integer",
"format": "int64",
"description": "Statistics close time (timestamp in milliseconds).",
"example": 1499869899040
},
"firstId": {
"type": "integer",
"format": "int64",
"description": "First trade ID in the 24-hour period.",
"example": 10001
},
"lastId": {
"type": "integer",
"format": "int64",
"description": "Last trade ID in the 24-hour period.",
"example": 10250
},
"count": {
"type": "integer",
"description": "Total number of trades in the last 24 hours.",
"example": 250
}
}
}
]
},
"examples": {
"single_symbol": {
"summary": "Single symbol response",
"value": {
"symbol": "BTCPHP",
"priceChange": "-1500.00000000",
"priceChangePercent": "-2.450",
"weightedAvgPrice": "62350.50000000",
"prevClosePrice": "61250.00000000",
"lastPrice": "59750.00000000",
"lastQty": "0.05000000",
"bidPrice": "59745.00000000",
"bidQty": "1.25000000",
"askPrice": "59755.00000000",
"askQty": "0.85000000",
"openPrice": "61250.00000000",
"highPrice": "63500.00000000",
"lowPrice": "58900.00000000",
"volume": "125.50000000",
"quoteVolume": "7825000.00000000",
"openTime": 1499783499040,
"closeTime": 1499869899040,
"firstId": 10001,
"lastId": 10250,
"count": 250
}
}
}
}
}
},
"default": {
"description": "API error response. The `code` field contains the internal API error code (not an HTTP status code).\n\n| Code | Description |\n|---|---|\n| -1121 | Invalid symbol. |\n| -100013 | Parameter symbol and symbols cannot be used in combination. |\n\nFor the full list of error codes, see [Error Codes](https://api.docs.coins.ph/reference/error-codes).\n"
}
}
}
},
"/openapi/quote/v1/ticker/price": {
"get": {
"tags": [
"Markets"
],
"summary": "Latest Price for a Symbol or Symbols",
"description": "Retrieves the latest price for a symbol or symbols. Lightweight endpoint returning only the current price.\n\nUse `symbol` for a single pair, `symbols` for multiple pairs. Cannot use both simultaneously. Omit both to get all symbols. Prices are returned as **strings** to preserve full precision.\n\n---\n\n## Additional Info\n\n**Rate Limit** [📖 Learn More](https://api.docs.coins.ph/reference/general#api-limit-introduction)\n\n| Parameter | Symbols Provided | Weight |\n|---|---|---|\n| symbol | 1 | 1 |\n| symbol omitted | All symbols | 2 |\n\n**Use Cases** [🧩 SDK](https://api.docs.coins.ph/reference/general#sdk)\n\n- **Pre-Order Price Check** — Fetch the latest price before sizing an order to calculate quantity based on an up-to-date rate.\n- **Multi-Symbol Comparison** — Pass a `symbols` array to compare prices across several pairs in a single lightweight call.\n- **Price Threshold Alerts** — Poll periodically to detect when a symbol's price crosses a target level and trigger the appropriate action.\n- **Portfolio Valuation** — Retrieve current prices for all held assets to compute an up-to-date portfolio value.\n\n**Best Practices**\n\n- Use Symbol Price Ticker for simple price display; use 24HR Ticker when you need historical context.\n- Parse prices to appropriate numeric types — do not use floating-point arithmetic directly.\n- For real-time updates, consider WebSocket streams.\n- Use `symbols` for specific pairs; omit parameters only when you need all symbols.\n",
"operationId": "get_latest_price_for_symbol",
"parameters": [
{
"in": "query",
"name": "symbol",
"required": false,
"schema": {
"type": "string",
"example": "BTCPHP"
},
"description": "Trading pair symbol. If omitted, prices for all symbols are returned in an array. Cannot be used with `symbols`.\n"
},
{
"in": "query",
"name": "symbols",
"required": false,
"schema": {
"type": "string",
"example": "[\"BTCUSDT\",\"BNBUSDT\"]"
},
"description": "Alternative to symbol. Provide multiple symbols as a JSON array string. Cannot be used with `symbol`.\n"
}
],
"x-codeSamples": [
{
"lang": "Shell",
"label": "Single symbol price",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/ticker/price' \\\n--data-urlencode 'symbol=BTCPHP'\n"
},
{
"lang": "Shell",
"label": "All symbol prices",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/quote/v1/ticker/price'\n"
}
],
"responses": {
"200": {
"description": "Latest price. Returns a single object for one symbol, or an array for multiple/all symbols.",
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Trading pair symbol.",
"example": "BTCPHP"
},
"price": {
"type": "string",
"description": "Current
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coinsph/refs/heads/main/openapi/coinsph-markets-openapi.json