Coins.ph Coins Pro — Spot Trading
Coins Pro — Spot Trading API (TRADING v1.0.0) — part of the Coins.ph developer platform.
Coins Pro — Spot Trading API (TRADING v1.0.0) — part of the Coins.ph developer platform.
{
"openapi": "3.0.0",
"info": {
"title": "TRADING",
"version": "1.0.0",
"description": "Spot trading endpoints for the Coins.ph Trading API."
},
"servers": [
{
"url": "https://api.pro.coins.ph",
"description": "Production"
},
{
"url": "https://api.9001.pl-qa.coinsxyz.me",
"description": "Sandbox"
}
],
"tags": [
{
"name": "Spot",
"description": "Spot trading operations including order placement, querying, cancellation, and trade history."
}
],
"x-tagGroups": [
{
"name": "TRADING",
"tags": [
"Spot"
]
}
],
"x-readme": {
"proxy-enabled": false
},
"paths": {
"/openapi/v1/exchangeInfo": {
"get": {
"tags": [
"Spot"
],
"summary": "Exchange Information",
"description": "Returns current exchange trading rules and symbol information. Provides comprehensive\ndetails about available trading pairs, their configurations, trading rules, and filters\nthat apply to orders.\n\n**Key Notes**\n\n- Use `symbol` to query a single trading pair.\n- Use `symbols` (comma-separated) to query multiple trading pairs. Cannot be used together with `symbol`.\n- If neither is provided, returns information for all trading pairs.\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- **Order Validation** — Fetch PRICE_FILTER and LOT_SIZE filters before placing orders to avoid rejection\n- **Trading Pair Discovery** — Enumerate all active trading pairs and their supported order types\n- **Precision Handling** — Retrieve baseAssetPrecision and quoteAssetPrecision to format amounts correctly\n\n**Best Practices**\n\n- Cache exchange information at application startup and refresh periodically (every few hours)\n- Always check `status === 'TRADING'` before allowing orders on a symbol\n- Validate order price and quantity against PRICE_FILTER and LOT_SIZE before submitting\n",
"operationId": "get_exchange_info",
"parameters": [
{
"in": "header",
"name": "X-COINS-APIKEY",
"required": true,
"schema": {
"type": "string"
},
"description": "API key for authentication."
},
{
"in": "query",
"name": "symbol",
"required": false,
"schema": {
"type": "string",
"example": "BTCPHP"
},
"description": "Specify a single trading pair. Cannot be used with `symbols`."
},
{
"in": "query",
"name": "symbols",
"required": false,
"schema": {
"type": "string",
"example": "BTCPHP,ETHPHP"
},
"description": "Comma-separated list of trading pairs. Cannot be used with `symbol`."
}
],
"x-codeSamples": [
{
"lang": "Shell",
"label": "All Trading Pairs",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/v1/exchangeInfo' \\\n--header 'X-COINS-APIKEY: <your api key>'\n"
},
{
"lang": "Shell",
"label": "Single Trading Pair",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/v1/exchangeInfo?symbol=BTCPHP' \\\n--header 'X-COINS-APIKEY: <your api key>'\n"
},
{
"lang": "Shell",
"label": "Multiple Trading Pairs",
"source": "curl --get --location 'https://api.pro.coins.ph/openapi/v1/exchangeInfo?symbols=BTCPHP,ETHPHP,BTCUSDT' \\\n--header 'X-COINS-APIKEY: <your api key>'\n"
}
],
"responses": {
"200": {
"description": "Exchange information retrieved successfully.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"timezone": {
"type": "string",
"description": "Server timezone.",
"example": "UTC"
},
"serverTime": {
"type": "integer",
"format": "int64",
"description": "Current server time in milliseconds.",
"example": 1538323200000
},
"exchangeFilters": {
"type": "array",
"description": "Exchange-level filters (currently empty)."
},
"symbols": {
"type": "array",
"description": "Array of trading pair information.",
"items": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Trading pair symbol.",
"example": "BTCPHP"
},
"status": {
"type": "string",
"description": "Trading status: TRADING (active) or HALT (suspended).",
"example": "TRADING"
},
"baseAsset": {
"type": "string",
"description": "Base asset (the asset being bought or sold).",
"example": "BTC"
},
"baseAssetPrecision": {
"type": "integer",
"description": "Decimal precision for base asset amounts.",
"example": 8
},
"quoteAsset": {
"type": "string",
"description": "Quote asset (the asset used for pricing).",
"example": "PHP"
},
"quoteAssetPrecision": {
"type": "integer",
"description": "Decimal precision for quote asset amounts.",
"example": 8
},
"orderTypes": {
"type": "array",
"description": "Supported order types for this trading pair.",
"items": {
"type": "string"
},
"example": [
"LIMIT",
"MARKET",
"LIMIT_MAKER",
"STOP_LOSS_LIMIT",
"STOP_LOSS",
"TAKE_PROFIT_LIMIT",
"TAKE_PROFIT"
]
},
"filters": {
"type": "array",
"description": "Trading rules and filters for this pair."
}
}
}
}
}
},
"examples": {
"success": {
"summary": "Exchange Info (BTCPHP)",
"value": {
"timezone": "UTC",
"serverTime": 1538323200000,
"exchangeFilters": [],
"symbols": [
{
"symbol": "BTCPHP",
"status": "TRADING",
"baseAsset": "BTC",
"baseAssetPrecision": 8,
"quoteAsset": "PHP",
"quoteAssetPrecision": 8,
"orderTypes": [
"LIMIT",
"MARKET",
"LIMIT_MAKER",
"STOP_LOSS_LIMIT",
"STOP_LOSS",
"TAKE_PROFIT_LIMIT",
"TAKE_PROFIT"
],
"filters": [
{
"filterType": "PRICE_FILTER",
"minPrice": "0.00000100",
"maxPrice": "100000.00000000",
"tickSize": "0.00000100"
},
{
"filterType": "LOT_SIZE",
"minQty": "0.00100000",
"maxQty": "100000.00000000",
"stepSize": "0.00100000"
},
{
"filterType": "NOTIONAL",
"minNotional": "0.00100000"
},
{
"filterType": "MAX_NUM_ORDERS",
"maxNumOrders": 200
},
{
"filterType": "MAX_NUM_ALGO_ORDERS",
"maxNumAlgoOrders": 5
}
]
}
]
}
}
}
}
}
},
"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/v1/order/test": {
"post": {
"tags": [
"Spot"
],
"summary": "Test New Order (TRADE)",
"description": "Test order creation without sending it to the matching engine. Validates parameters,\nsignature, and recvWindow. Returns empty object on success. Accepts the same parameters\nas POST /openapi/v1/order.\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- **Dry-Run Validation** — Submit a test order to confirm that price, quantity, and parameter formatting pass all exchange filters\n- **Order Type Exploration** — Test different order type and parameter combinations without risking actual funds\n\n**Best Practices**\n\n- Use during development to validate request format before placing live orders\n- Test all parameter combinations for each order type\n",
"operationId": "test_new_order",
"parameters": [
{
"in": "header",
"name": "X-COINS-APIKEY",
"required": true,
"schema": {
"type": "string"
},
"description": "API key for authentication."
}
],
"requestBody": {
"required": true,
"content": {
"application/x-www-form-urlencoded": {
"schema": {
"type": "object",
"required": [
"symbol",
"side",
"type",
"timestamp",
"signature"
],
"properties": {
"symbol": {
"type": "string",
"default": "BTCPHP",
"description": "Trading pair symbol."
},
"side": {
"type": "string",
"enum": [
"BUY",
"SELL"
],
"example": "BUY",
"description": "Order side."
},
"type": {
"type": "string",
"enum": [
"LIMIT",
"MARKET",
"LIMIT_MAKER",
"STOP_LOSS",
"STOP_LOSS_LIMIT",
"TAKE_PROFIT",
"TAKE_PROFIT_LIMIT"
],
"example": "LIMIT",
"description": "Order type."
},
"timeInForce": {
"type": "string",
"enum": [
"GTC",
"IOC",
"FOK"
],
"example": "GTC",
"description": "Time in force. Required for LIMIT order types."
},
"quantity": {
"type": "string",
"example": "0.001",
"description": "Order quantity in base asset units. The quantity must be a multiple of the symbol's stepSize. If the submitted quantity is not aligned with the stepSize, the excess portion will be truncated."
},
"quoteOrderQty": {
"type": "string",
"example": "1000.00",
"description": "Quote asset quantity for MARKET orders."
},
"price": {
"type": "string",
"example": "50000.00",
"description": "Order price per unit."
},
"newClientOrderId": {
"type": "string",
"example": "my_order_123",
"description": "Client-assigned unique order ID."
},
"stopPrice": {
"type": "string",
"example": "49000.00",
"description": "Trigger price for stop orders."
},
"newOrderRespType": {
"type": "string",
"enum": [
"ACK",
"RESULT",
"FULL"
],
"example": "FULL",
"description": "Response type."
},
"stpFlag": {
"type": "string",
"enum": [
"CB",
"CN",
"CO"
],
"example": "CB",
"description": "Self-trade prevention flag. Default: CB."
},
"recvWindow": {
"type": "integer",
"format": "int64",
"minimum": 0,
"maximum": 60000,
"example": 5000,
"description": "Request validity window in milliseconds. Default: 5000, Maximum: 60000."
},
"timestamp": {
"type": "integer",
"format": "int64",
"example": 1507725176532,
"description": "Unix timestamp in milliseconds."
},
"signature": {
"type": "string",
"example": "c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71",
"description": "HMAC SHA256 signature of the query string [📖 Learn More](https://api.docs.coins.ph/reference/general#signed-endpoint-examples-for-post-openapiv1order)"
}
}
}
}
}
},
"x-codeSamples": [
{
"lang": "Shell",
"label": "Test LIMIT Order",
"source": "curl --location --request POST 'https://api.pro.coins.ph/openapi/v1/order/test' \\\n--header 'X-COINS-APIKEY: <your api key>' \\\n--data-urlencode 'symbol=BTCPHP' \\\n--data-urlencode 'side=BUY' \\\n--data-urlencode 'type=LIMIT' \\\n--data-urlencode 'timeInForce=GTC' \\\n--data-urlencode 'quantity=0.001' \\\n--data-urlencode 'price=50000.00' \\\n--data-urlencode 'timestamp=1507725176532' \\\n--data-urlencode 'signature=<calculated_signature>'\n"
}
],
"responses": {
"200": {
"description": "Order validated. Returns empty object (order not placed).",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {},
"additionalProperties": false,
"example": {}
},
"example": {
"success": {
"summary": "Validation Passed",
"value": {}
}
}
}
}
},
"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| -1100 | Illegal characters in parameter |\n| -1102 | Mandatory parameter was not sent |\n| -1116 | Invalid orderType |\n\nFor the full list of error codes, see [Error Codes](https://api.docs.coins.ph/reference/error-codes).\n"
}
}
}
},
"/openapi/v1/order": {
"post": {
"tags": [
"Spot"
],
"summary": "New Order (TRADE)",
"description": "Submit a new trading order. Supports LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT, and LIMIT_MAKER order types.\n\n**Order Type Requirements**\n\n| Type | Required Additional Parameters |\n|---|---|\n| LIMIT | timeInForce, quantity, price |\n| MARKET | quantity OR quoteOrderQty |\n| STOP_LOSS | quantity OR quoteOrderQty, stopPrice |\n| STOP_LOSS_LIMIT | timeInForce, quantity, price, stopPrice |\n| TAKE_PROFIT | quantity OR quoteOrderQty, stopPrice |\n| TAKE_PROFIT_LIMIT | timeInForce, quantity, price, stopPrice |\n| LIMIT_MAKER | quantity, price |\n\n**Time In Force**\n\n- GTC (Good-Till-Cancel): Active until filled or cancelled\n- IOC (Immediate-Or-Cancel): Fill immediately, cancel remainder\n- FOK (Fill-Or-Kill): Fill entirely or cancel completely\n\n**Self-Trade Prevention (stpFlag)**\n\n- CB (Cancel Both): Cancel both orders (default)\n- CO (Cancel Oldest): Cancel the older order\n- CN (Cancel Newest): Cancel the newer order\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- **Limit Order** - Buy/sell at a specific price; stays in order book until filled or cancelled\n- **Market Order** - Execute immediately at best available price\n- **Stop-Loss** - Limit losses by triggering a market order when stop price is reached\n- **Take-Profit** - Lock in gains by triggering a market order at target price\n- **LIMIT_MAKER** - Post-only order guaranteeing maker fees\n\n**Best Practices**\n\n- Use newClientOrderId for idempotency and order tracking\n- Use newOrderRespType=FULL to receive fill details in the response\n- Validate price/quantity against exchangeInfo filters before placing orders\n",
"operationId": "create_new_order",
"parameters": [
{
"in": "header",
"name": "X-COINS-APIKEY",
"required": true,
"schema": {
"type": "string"
},
"description": "API key for authentication."
}
],
"requestBody": {
"required": true,
"content": {
"application/x-www-form-urlencoded": {
"schema": {
"type": "object",
"required": [
"symbol",
"side",
"type",
"timestamp",
"signature"
],
"properties": {
"symbol": {
"type": "string",
"default": "BTCPHP",
"description": "Trading pair symbol (e.g., BCHUSDT, BTCUSDT)."
},
"side": {
"type": "string",
"enum": [
"BUY",
"SELL"
],
"description": "Order side."
},
"type": {
"type": "string",
"enum": [
"LIMIT",
"MARKET",
"STOP_LOSS",
"STOP_LOSS_LIMIT",
"TAKE_PROFIT",
"TAKE_PROFIT_LIMIT",
"LIMIT_MAKER"
],
"description": "Order type."
},
"timeInForce": {
"type": "string",
"enum": [
"GTC",
"IOC",
"FOK"
],
"example": "GTC",
"description": "Time in force policy. Required for LIMIT order types."
},
"quantity": {
"type": "string",
"example": "1",
"description": "Order quantity in base asset units. The quantity must be a multiple of the symbol's stepSize. If the submitted quantity is not aligned with the stepSize, the excess portion will be truncated."
},
"quoteOrderQty": {
"type": "string",
"example": "400",
"description": "Order quantity in quote asset units. Used for MARKET orders as alternative to quantity."
},
"price": {
"type": "string",
"example": "400",
"description": "Limit price. Required for LIMIT, STOP_LOSS_LIMIT, TAKE_PROFIT_LIMIT, LIMIT_MAKER."
},
"newClientOrderId": {
"type": "string",
"maxLength": 100,
"example": "my_order_001",
"description": "Client-assigned unique order ID for idempotency. Auto-generated if not provided."
},
"stopPrice": {
"type": "string",
"example": "390",
"description": "Trigger price for conditional orders. Direction rules:\n- STOP_LOSS / STOP_LOSS_LIMIT BUY: stop price must be above current market price\n- STOP_LOSS / STOP_LOSS_LIMIT SELL: stop price must be below current market price\n- TAKE_PROFIT / TAKE_PROFIT_LIMIT SELL: stop price must be above current market price\n- TAKE_PROFIT / TAKE_PROFIT_LIMIT BUY: stop price must be below current market price\n"
},
"newOrderRespType": {
"type": "string",
"enum": [
"ACK",
"RESULT",
"FULL"
],
"example": "FULL",
"description": "Response detail level. Default: FULL for MARKET/LIMIT, ACK for others."
},
"stpFlag": {
"type": "string",
"enum": [
"CB",
"CO",
"CN",
"NONE"
],
"example": "CB",
"description": "Self-Trade Prevention flag. Default: CB."
},
"recvWindow": {
"type": "integer",
"format": "int64",
"minimum": 0,
"maximum": 60000,
"example": 5000,
"description": "Request validity window in milliseconds. Default: 5000, Maximum: 60000."
},
"timestamp": {
"type": "integer",
"format": "int64",
"example": 1656900365976,
"description": "Unix timestamp in milliseconds."
},
"signature": {
"type": "string",
"example": "c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71",
"description": "HMAC SHA256 signature of the query string [📖 Learn More](https://api.docs.coins.ph/reference/general#signed-endpoint-examples-for-post-openapiv1order)"
}
}
}
}
}
},
"x-codeSamples": [
{
"lang": "Shell",
"label": "LIMIT Order",
"source": "curl --location --request POST 'https://api.pro.coins.ph/openapi/v1/order' \\\n--header 'X-COINS-APIKEY: <your api key>' \\\n--data-urlencode 'symbol=BCHUSDT' \\\n--data-urlencode 'side=BUY' \\\n--data-urlencode 'type=LIMIT' \\\n--data-urlencode 'timeInForce=GTC' \\\n--data-urlencode 'quantity=1' \\\n--data-urlencode 'price=400' \\\n--data-urlencode 'timestamp=1656900365976' \\\n--data-urlencode 'signature=<calculated_signature>'\n"
},
{
"lang": "Shell",
"label": "MARKET Order",
"source": "curl --location --request POST 'https://api.pro.coins.ph/openapi/v1/order' \\\n--header 'X-COINS-APIKEY: <your api key>' \\\n--data-urlencode 'symbol=ETHUSDT' \\\n--data-urlencode 'side=BUY' \\\n--data-urlencode 'type=MARKET' \\\n--data-urlencode 'quoteOrderQty=1000' \\\n--data-urlencode 'timestamp=1656900365976' \\\n--data-urlencode 'signature=<calculated_signature>'\n"
}
],
"responses": {
"200": {
"description": "Order submitted successfully.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"example": "BCHUSDT"
},
"orderId": {
"type": "integer",
"format": "int64",
"example": 1202289462787244800
},
"clientOrderId": {
"type": "string",
"example": "165806087267756"
},
"transactTime": {
"type": "integer",
"format": "int64",
"example": 1656900365976
},
"price": {
"type": "string",
"example": "400"
},
"origQty": {
"type": "string",
"example": "1"
},
"executedQty": {
"type": "string",
"example": "1"
},
"cummulativeQuoteQty": {
"type": "string",
"example": "400"
},
"status": {
"type": "string",
"example": "FILLED"
},
"timeInForce": {
"type": "string",
"example": "GTC"
},
"type": {
"type": "string",
"example": "LIMIT"
},
"side": {
"type": "string",
"example": "BUY"
},
"fills": {
"type": "array",
"description": "Fill details (FULL response only).",
"items": {
"type": "object",
"properties": {
"price": {
"type": "string",
"example": "400"
},
"qty": {
"type": "string",
"example": "1"
},
"commission": {
"type": "string",
"example": "0.001"
},
"commissionAsset": {
"type": "string",
"example": "BCH"
},
"tradeId": {
"type": "string",
"example": "1205027741844507648"
}
}
}
}
}
},
"examples": {
"full_response": {
"summary": "FULL Response (FILLED)",
"value": {
"symbol": "BCHUSDT",
"orderId": 1202289462787244800,
"clientOrderId": "165806087267756",
"transactTime": 1656900365976,
"price": "400",
"origQty": "1",
"executedQty": "1",
"cummulativeQuoteQty": "400",
"status": "FILLED",
"timeInForce": "GTC",
"type": "LIMIT",
"side": "BUY",
"fills": [
{
"price": "400",
"qty": "1",
"commission": "0.001",
"commissionAsset": "BCH",
"tradeId": "1205027741844507648"
}
]
}
}
}
}
}
},
"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| -1013 | Filter failure: PRICE_FILTER or LOT_SIZE |\n| -1116 | Invalid orderType |\n| -2010 | New order rejected |\n\nFor the full list of error codes, see [Error Codes](https://api.docs.coins.ph/reference/error-codes).\n"
}
}
},
"get": {
"tags": [
"Spot"
],
"summary": "Query Order (USER_DATA)",
"description": "Check an order's status. Either orderId or origClientOrderId must be sent. If both are sent, orderId takes precedence.\n\n**Order Status Values**\n\n| Status | Description |\n|---|---|\n| NEW | Accepted but not yet executed |\n| PARTIALLY_FILLED | Part of order has been filled |\n| FILLED | Completely executed |\n| PARTIALLY_CANCELED | Part canceled due to self-trade |\n| CANCELED | Cancelled by user |\n| EXPIRED | Cancelled by matching engine |\n\n---\n\n## Additional Info\n\n**Rate Limit** [📖 Learn More](https://api.docs.coins.ph/reference/general#api-limit-introduction)\n\nWeight: 2\n\n**Use Cases** [🧩 SDK](https://api.docs.coins.ph/reference/general#sdk)\n\n- **Fill Confirmation** — Query order status after submission to confirm whether a fill occurred before placing a follow-up order\n- **State Reconciliation** — Sync local order state with the exchange after a network interruption or reconnect\n- **Partial Fill Check** — Inspect `executedQty` against `origQty` to determine how much of a partially filled order has been executed\n\n**Best Practices**\n\n- Use orderId for precision when available\n- Cache order details locally to reduce API calls\n",
"operationId": "query_order",
"parameters": [
# --- truncated at 32 KB (121 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coinsph/refs/heads/main/openapi/coinsph-spot-openapi.json