Skip to main content

Introduction

The OEMS (Order Execution Management System) provides a unified API for order execution across multiple cryptocurrency exchanges.

Features

  • Direct Execution - Execute market and limit orders on any supported exchange
  • Algorithmic Trading - TWAP, VWAP, and Iceberg execution algorithms
  • Pre-Trade Analysis - Balance checks, liquidity analysis, and slippage estimation
  • Transaction Cost Analysis - Post-trade execution quality metrics
  • Global Orderbook - Aggregated orderbook across exchanges with smart order routing

Supported Exchanges

ExchangeSpotPerpetualsNotes
BinanceYesYesPortfolio margin, hedge mode supported
BybitYesYesUnified account supported
Gate.ioYesYesStandard API
KrakenYesYesSpot and Futures use separate API keys, see Trading on Kraken
OKXYesYesUnified account supported
HyperliquidNoYesWallet-based authentication

Authentication

All REST endpoints authenticate with a Renesis API key (prefix ak_), passed in the X-API-Key header. Create and manage keys from your user page in the dashboard; the secret is shown only once at creation, so copy it then.
export API_KEY="ak_xxxxxxxxxxxxxxxxxxxx"

curl -H "X-API-Key: $API_KEY" \
  "https://api.renesis.fi/order-execution/execution/balance?exchange_account_id=your-account"
The key works on every route until you revoke it, with no login or session to keep alive. If a key was issued with a path allowlist, it must include the /order-execution prefix to call OEMS endpoints. Keep keys secret and server-side.

Daily Trading Limits

To prevent accidental large trades during development, each exchange account has a daily trading limit (default: $100/day). Check your remaining limit:
curl -H "X-API-Key: $API_KEY" \
  "https://api.renesis.fi/order-execution/execution/daily-limit?exchange_account_id=your-account"

Base URL

  • Production: https://api.renesis.fi
All OEMS endpoints are served under the /order-execution prefix. For other environments, contact your administrator.

Response Format

All responses follow this format:
{
  "isError": false,
  "message": "Success",
  "statusCode": 200,
  "data": { ... }
}
Error responses:
{
  "isError": true,
  "message": "Error description",
  "statusCode": 400,
  "data": {
    "error": "ERROR_CODE",
    "details": { ... }
  }
}