Unified REST APIStrategy

Submit Maker-Taker Arbitrage Strategy

Submit a maker-taker arbitrage strategy that places a maker order on one exchange and triggers a taker order on another exchange when conditions are met.

How it works:

  1. Places a maker (limit) order on the maker exchange with GTX (post-only)
  2. When the maker order is placed, monitors for trigger conditions
  3. When triggered, executes a taker order on the taker exchange
  4. Optionally reconciles positions if there's a discrepancy

Use Cases:

  • Cross-exchange arbitrage
  • Market making with hedging
  • Spread capture strategies

Endpoint: POST https://api.hypereth.io/v2/all/strategy/submit/maker-taker-arbitrage

POST
/strategy/submit/maker-taker-arbitrage

Authorization

ApiKeyAuth
X-API-KEY<token>

In: header

Request Body

application/json

symbol*stringrequired

Unified market symbol

Example: MON
marketType?enum<string>

Optional market type. Use "spot" for spot markets or "perp" for perpetual/futures markets.

Example: spot
Available options: spotperp
amount*stringrequired

Order amount for both legs

Example: 100
maker*objectrequired

Maker leg configuration

exchange*stringrequired

Exchange to place the maker order (e.g., "kuru")

Example: kuru
accountId*stringrequired

Account ID for this leg

Example: acc_A
side*enum<string>required

Order side (buy or sell)

Available options: buysell
price*stringrequired

Limit price for the maker order

Example: 0.01
taker*objectrequired

Taker leg configuration

exchange*stringrequired

Exchange to place the taker order (e.g., "kuru")

Example: kuru
accountId*stringrequired

Account ID for this leg

Example: acc_B
side*enum<string>required

Order side (must be opposite of maker side)

Available options: buysell
price?string

Optional limit price for taker order. If not provided, uses market order.

slippage?string

Optional slippage tolerance for market orders

Example: 0.005
takerTriggerConfig?object

Optional trigger conditions for the taker order

priceCondition?object

Price-based trigger condition

spreadThreshold*stringrequired

Price spread threshold to trigger the taker order

Example: 0.001
condition*enum<string>required

Trigger condition:

  • above - Trigger when spread is above threshold
  • below - Trigger when spread is below threshold
Available options: abovebelow
depthCondition?object

Order book depth trigger condition

takerBufferVolume*stringrequired

Additional volume buffer required in the order book beyond the order amount

Example: 10
conditionLogic?enum<string>default: "AND"

How to combine multiple conditions:

  • AND - All conditions must be met
  • OR - Any condition triggers execution
Available options: ANDOR
timeout?integer

Timeout for trigger conditions in milliseconds

timeout?integer

Strategy timeout in milliseconds

Example: 30000
clientStrategyId?string

Optional client-provided strategy ID

Example: my_strategy_001
reconciliation?object

Optional reconciliation configuration

enabled?booleandefault: true

Whether reconciliation is enabled

timeoutMs?integerdefault: 30000

Time to wait before checking for discrepancies (milliseconds)

discrepancyThreshold?stringdefault: "0"

Minimum size discrepancy to trigger recovery

maxSlippageBps?integerdefault: 100

Maximum slippage for recovery orders in basis points (100 = 1%)

Response Body

application/json

application/json

curl -X POST "https://api.hypereth.io/v2/all/strategy/submit/maker-taker-arbitrage" \  -H "Content-Type: application/json" \  -d '{    "symbol": "MON",    "marketType": "spot",    "amount": "100",    "maker": {      "exchange": "kuru",      "accountId": "acc_A",      "side": "buy",      "price": "0.01"    },    "taker": {      "exchange": "kuru",      "accountId": "acc_B",      "side": "sell"    }  }'
{
  "strategyId": "maker_taker_550e8400-e29b-41d4-a716-446655440000",
  "status": "pending",
  "createdAt": 1710000000000,
  "requestId": "req_123456789"
}
{
  "code": "invalid_parameters",
  "message": "string",
  "retriable": true
}
Empty

Update Position Leverage POST

Update leverage for a specific trading symbol. **Platform Support**: Available on hyperliquid, aster, lighter. **Not available on kuru** (spot DEX - no leverage). **Implementation Notes**: - Leverage must be adjusted before opening positions or when no position exists - Some platforms restrict leverage changes when positions are open - Maximum allowed leverage varies by symbol and account tier - Leverage reduction may be restricted in isolated margin mode with open positions **Platform-Specific Limits**: - **Hyperliquid**: Asset and notional-dependent (varies by margin tiers; e.g., BTC up to 40x, ETH up to 25x) - **Aster**: 1-125 depending on position size and notional brackets, and it is unable to adjust to isolated-margin mode under the Multi-Assets mode. - **Lighter**: 1-100 (varies by market)

Get Strategy Status GET

Get the current status and details of a submitted maker-taker arbitrage strategy. **Status Lifecycle**: - `pending` → Strategy submitted, not yet started - `maker_placing` → Placing maker order - `waiting_trigger` → Maker order placed, waiting for trigger conditions - `taker_triggered` → Taker order being executed - `reconciling` → Checking for position discrepancies - `completed` → Strategy completed successfully - `completed_with_recovery` → Completed with position recovery - `failed` → Strategy failed (see error field) - `cancelled` → Strategy was cancelled - `timed_out` → Strategy timed out - `requires_intervention` → Manual intervention required **Endpoint**: `GET https://api.hypereth.io/v2/all/strategy/status/maker-taker-arbitrage/{strategyId}`