# List the active DCA strategies of one maker wallet.
# Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
METHOD=GET
ENDPOINT=/dca-order/strategies
QUERY='accountTo=0x1E67cb01969D79B2B895179e4A07D24a839dBb52&status=active'
BODY='' # GET has no body: the signature covers the empty string
TS="${OLYMPEX_TIMESTAMP:-$(date +%s)}"
NONCE="${OLYMPEX_NONCE:-$(openssl rand -hex 12)}"
BODY_HASH="$(printf '%s' "$BODY" | openssl dgst -sha256 -binary | openssl base64 -A | tr '+/' '-_' | tr -d '=')"
VALUE_INFO="$(printf '%s\n%s\n%s' "$TS" "$NONCE" "$BODY_HASH")"
MESSAGE="$(printf 'OLPX-HMAC-SHA256-V2\n%s\n%s\n%s\n%s\n%s\n%s' "$TS" "$NONCE" "$METHOD" "/api/v1$ENDPOINT" "$QUERY" "$BODY_HASH")"
curl -sS -X "$METHOD" "https://api-rest.olympex.io/api/v1$ENDPOINT${QUERY:+?$QUERY}" \
-H "content-type: application/json" \
-H "x-api-key-id: $OLYMPEX_API_KEY_ID" \
-H "x-value-info: $(printf '%s' "$VALUE_INFO" | openssl base64 -A)" \
-H "x-passphrase: $OLYMPEX_PASSPHRASE" \
-H "x-signature: $(printf '%s' "$MESSAGE" | openssl dgst -sha256 -hmac "$OLYMPEX_SECRET_KEY" -binary | od -An -v -tx1 | tr -d ' \n')"
import { olympexRequest } from "./sign-request.ts"; // /authentication/sign-requests
type DcaOrder = { id: string; status: string };
type DcaStrategy = {
id: string;
status: string;
tokenSymbolFrom: string;
tokenSymbolTo: string;
iterations: number;
orders: DcaOrder[];
};
const maker = "0x1E67cb01969D79B2B895179e4A07D24a839dBb52"; // the exact form sent on create
const strategies = await olympexRequest<DcaStrategy[]>("GET", `/dca-order/strategies?accountTo=${maker}&status=active`);
for (const strategy of strategies) {
const executed = strategy.orders.filter((order) => order.status === "successful").length;
console.log(`${strategy.id} ${strategy.tokenSymbolFrom}/${strategy.tokenSymbolTo}: ${executed} of ${strategy.iterations} orders executed`);
}
from sign_request import olympex_request # /authentication/sign-requests
maker = "0x1E67cb01969D79B2B895179e4A07D24a839dBb52" # the exact form sent on create
strategies = olympex_request("GET", f"/dca-order/strategies?accountTo={maker}&status=active")
for strategy in strategies:
executed = sum(1 for order in strategy["orders"] if order["status"] == "successful")
pair = f'{strategy["tokenSymbolFrom"]}/{strategy["tokenSymbolTo"]}'
print(f'{strategy["id"]} {pair}: {executed} of {strategy["iterations"]} orders executed')
{
"success": true,
"data": [
{
"id": "320263ca-2f38-4349-b641-a23aed2ff847",
"accountTo": "0x1E67cb01969D79B2B895179e4A07D24a839dBb52",
"chainIdFrom": 137,
"chainIdTo": 137,
"tokenAddressFrom": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"tokenAddressTo": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
"tokenSymbolFrom": "USDC",
"tokenSymbolTo": "WETH",
"totalAmount": 100,
"frequency": 86400,
"iterations": 10,
"slippage": 1,
"status": "active",
"createdAt": "2026-09-29T13:48:57.833Z",
"updatedAt": "2026-09-29T13:48:57.833Z",
"orders": [
{
"id": "5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17",
"strategyId": "320263ca-2f38-4349-b641-a23aed2ff847",
"accountTo": "0x1E67cb01969D79B2B895179e4A07D24a839dBb52",
"amount": 10,
"amountReceived": 0.00238,
"executionPrice": 4201.68,
"status": "successful",
"transactionHash": "0x9f2c4b1e7a3d5c8f0b6e2a4d1c7f9e3b5a8d0c2e4f6a1b3d5c7e9f0a2b4c6d8e",
"createdAt": "2026-09-30T12:52:10.004Z",
"updatedAt": "2026-09-30T12:52:41.377Z"
}
]
}
],
"meta": {
"requestId": "Edkf6hkGoAMEPOA=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"message": "Forbidden"
}
List DCA strategies
List the DCA strategies created with your API key, each with the orders Olympex has created for it.
# List the active DCA strategies of one maker wallet.
# Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
METHOD=GET
ENDPOINT=/dca-order/strategies
QUERY='accountTo=0x1E67cb01969D79B2B895179e4A07D24a839dBb52&status=active'
BODY='' # GET has no body: the signature covers the empty string
TS="${OLYMPEX_TIMESTAMP:-$(date +%s)}"
NONCE="${OLYMPEX_NONCE:-$(openssl rand -hex 12)}"
BODY_HASH="$(printf '%s' "$BODY" | openssl dgst -sha256 -binary | openssl base64 -A | tr '+/' '-_' | tr -d '=')"
VALUE_INFO="$(printf '%s\n%s\n%s' "$TS" "$NONCE" "$BODY_HASH")"
MESSAGE="$(printf 'OLPX-HMAC-SHA256-V2\n%s\n%s\n%s\n%s\n%s\n%s' "$TS" "$NONCE" "$METHOD" "/api/v1$ENDPOINT" "$QUERY" "$BODY_HASH")"
curl -sS -X "$METHOD" "https://api-rest.olympex.io/api/v1$ENDPOINT${QUERY:+?$QUERY}" \
-H "content-type: application/json" \
-H "x-api-key-id: $OLYMPEX_API_KEY_ID" \
-H "x-value-info: $(printf '%s' "$VALUE_INFO" | openssl base64 -A)" \
-H "x-passphrase: $OLYMPEX_PASSPHRASE" \
-H "x-signature: $(printf '%s' "$MESSAGE" | openssl dgst -sha256 -hmac "$OLYMPEX_SECRET_KEY" -binary | od -An -v -tx1 | tr -d ' \n')"
import { olympexRequest } from "./sign-request.ts"; // /authentication/sign-requests
type DcaOrder = { id: string; status: string };
type DcaStrategy = {
id: string;
status: string;
tokenSymbolFrom: string;
tokenSymbolTo: string;
iterations: number;
orders: DcaOrder[];
};
const maker = "0x1E67cb01969D79B2B895179e4A07D24a839dBb52"; // the exact form sent on create
const strategies = await olympexRequest<DcaStrategy[]>("GET", `/dca-order/strategies?accountTo=${maker}&status=active`);
for (const strategy of strategies) {
const executed = strategy.orders.filter((order) => order.status === "successful").length;
console.log(`${strategy.id} ${strategy.tokenSymbolFrom}/${strategy.tokenSymbolTo}: ${executed} of ${strategy.iterations} orders executed`);
}
from sign_request import olympex_request # /authentication/sign-requests
maker = "0x1E67cb01969D79B2B895179e4A07D24a839dBb52" # the exact form sent on create
strategies = olympex_request("GET", f"/dca-order/strategies?accountTo={maker}&status=active")
for strategy in strategies:
executed = sum(1 for order in strategy["orders"] if order["status"] == "successful")
pair = f'{strategy["tokenSymbolFrom"]}/{strategy["tokenSymbolTo"]}'
print(f'{strategy["id"]} {pair}: {executed} of {strategy["iterations"]} orders executed')
{
"success": true,
"data": [
{
"id": "320263ca-2f38-4349-b641-a23aed2ff847",
"accountTo": "0x1E67cb01969D79B2B895179e4A07D24a839dBb52",
"chainIdFrom": 137,
"chainIdTo": 137,
"tokenAddressFrom": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"tokenAddressTo": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
"tokenSymbolFrom": "USDC",
"tokenSymbolTo": "WETH",
"totalAmount": 100,
"frequency": 86400,
"iterations": 10,
"slippage": 1,
"status": "active",
"createdAt": "2026-09-29T13:48:57.833Z",
"updatedAt": "2026-09-29T13:48:57.833Z",
"orders": [
{
"id": "5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17",
"strategyId": "320263ca-2f38-4349-b641-a23aed2ff847",
"accountTo": "0x1E67cb01969D79B2B895179e4A07D24a839dBb52",
"amount": 10,
"amountReceived": 0.00238,
"executionPrice": 4201.68,
"status": "successful",
"transactionHash": "0x9f2c4b1e7a3d5c8f0b6e2a4d1c7f9e3b5a8d0c2e4f6a1b3d5c7e9f0a2b4c6d8e",
"createdAt": "2026-09-30T12:52:10.004Z",
"updatedAt": "2026-09-30T12:52:41.377Z"
}
]
}
],
"meta": {
"requestId": "Edkf6hkGoAMEPOA=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"message": "Forbidden"
}
GET /dca-order/strategies returns the DCA strategies created with your API key, newest first. Each strategy carries an orders array with the orders Olympex has created for it so far, oldest first. Filter by maker wallet with accountTo and by strategy status with status. To read a single strategy, use GET /dca-order/strategies/{id}, which returns it without its orders.
Filters
| Parameter | Matches |
|---|---|
accountTo | The maker wallet, exactly as it was sent when the strategy was created. The match is case-sensitive, so create strategies with the EIP-55 checksummed address and filter with the same form. |
status | active, cancelled or finished. pending is reserved for Olympex. |
status: a value outside this table returns an empty array, not an error. Other query parameters, such as chainId, are ignored, so check the spelling: ?acountTo= returns every strategy. Send each parameter once: a repeated parameter returns an empty array.
Response size
The list is unpaginated. Every matching strategy comes back in one response, with all of its orders, so the response grows with each strategy and each order. To follow one strategy, callGET /dca-order/strategies/{id}/orders instead of the full list.
Check before you create again
POST /dca-order/strategies creates a new strategy on every successful call. If a create request times out, list the maker’s active strategies and look for one with the same tokens, totalAmount, iterations and frequency, created around the time you sent the request, before you send it again.
# List the active DCA strategies of one maker wallet.
# Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
METHOD=GET
ENDPOINT=/dca-order/strategies
QUERY='accountTo=0x1E67cb01969D79B2B895179e4A07D24a839dBb52&status=active'
BODY='' # GET has no body: the signature covers the empty string
TS="${OLYMPEX_TIMESTAMP:-$(date +%s)}"
NONCE="${OLYMPEX_NONCE:-$(openssl rand -hex 12)}"
BODY_HASH="$(printf '%s' "$BODY" | openssl dgst -sha256 -binary | openssl base64 -A | tr '+/' '-_' | tr -d '=')"
VALUE_INFO="$(printf '%s\n%s\n%s' "$TS" "$NONCE" "$BODY_HASH")"
MESSAGE="$(printf 'OLPX-HMAC-SHA256-V2\n%s\n%s\n%s\n%s\n%s\n%s' "$TS" "$NONCE" "$METHOD" "/api/v1$ENDPOINT" "$QUERY" "$BODY_HASH")"
curl -sS -X "$METHOD" "https://api-rest.olympex.io/api/v1$ENDPOINT${QUERY:+?$QUERY}" \
-H "content-type: application/json" \
-H "x-api-key-id: $OLYMPEX_API_KEY_ID" \
-H "x-value-info: $(printf '%s' "$VALUE_INFO" | openssl base64 -A)" \
-H "x-passphrase: $OLYMPEX_PASSPHRASE" \
-H "x-signature: $(printf '%s' "$MESSAGE" | openssl dgst -sha256 -hmac "$OLYMPEX_SECRET_KEY" -binary | od -An -v -tx1 | tr -d ' \n')"
import { olympexRequest } from "./sign-request.ts"; // /authentication/sign-requests
type DcaOrder = { id: string; status: string };
type DcaStrategy = {
id: string;
status: string;
tokenSymbolFrom: string;
tokenSymbolTo: string;
iterations: number;
orders: DcaOrder[];
};
const maker = "0x1E67cb01969D79B2B895179e4A07D24a839dBb52"; // the exact form sent on create
const strategies = await olympexRequest<DcaStrategy[]>("GET", `/dca-order/strategies?accountTo=${maker}&status=active`);
for (const strategy of strategies) {
const executed = strategy.orders.filter((order) => order.status === "successful").length;
console.log(`${strategy.id} ${strategy.tokenSymbolFrom}/${strategy.tokenSymbolTo}: ${executed} of ${strategy.iterations} orders executed`);
}
from sign_request import olympex_request # /authentication/sign-requests
maker = "0x1E67cb01969D79B2B895179e4A07D24a839dBb52" # the exact form sent on create
strategies = olympex_request("GET", f"/dca-order/strategies?accountTo={maker}&status=active")
for strategy in strategies:
executed = sum(1 for order in strategy["orders"] if order["status"] == "successful")
pair = f'{strategy["tokenSymbolFrom"]}/{strategy["tokenSymbolTo"]}'
print(f'{strategy["id"]} {pair}: {executed} of {strategy["iterations"]} orders executed')
{
"success": true,
"data": [
{
"id": "320263ca-2f38-4349-b641-a23aed2ff847",
"accountTo": "0x1E67cb01969D79B2B895179e4A07D24a839dBb52",
"chainIdFrom": 137,
"chainIdTo": 137,
"tokenAddressFrom": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"tokenAddressTo": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
"tokenSymbolFrom": "USDC",
"tokenSymbolTo": "WETH",
"totalAmount": 100,
"frequency": 86400,
"iterations": 10,
"slippage": 1,
"status": "active",
"createdAt": "2026-09-29T13:48:57.833Z",
"updatedAt": "2026-09-29T13:48:57.833Z",
"orders": [
{
"id": "5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17",
"strategyId": "320263ca-2f38-4349-b641-a23aed2ff847",
"accountTo": "0x1E67cb01969D79B2B895179e4A07D24a839dBb52",
"amount": 10,
"amountReceived": 0.00238,
"executionPrice": 4201.68,
"status": "successful",
"transactionHash": "0x9f2c4b1e7a3d5c8f0b6e2a4d1c7f9e3b5a8d0c2e4f6a1b3d5c7e9f0a2b4c6d8e",
"createdAt": "2026-09-30T12:52:10.004Z",
"updatedAt": "2026-09-30T12:52:41.377Z"
}
]
}
],
"meta": {
"requestId": "Edkf6hkGoAMEPOA=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"message": "Forbidden"
}
Authorizations
Your API key ID (UUID). See Sign requests.
Base64 of timestamp + "\n" + nonce + "\n" + bodyHash, where timestamp is Unix seconds, nonce is 24 new hexadecimal characters and bodyHash is the unpadded base64url SHA-256 of the canonical body.
Your account passphrase. Treat it like the secret key.
Lowercase hex HMAC-SHA256 (signature v2), keyed with your secret key string (UTF-8, not decoded), of seven lines joined with \n, with no trailing newline: OLPX-HMAC-SHA256-V2, timestamp, nonce, the uppercase method, path, canonicalQuery and bodyHash. path is the request path including /api/v1, without the query string, for example /api/v1/limit-order/<id>. canonicalQuery is the query parameters decoded (+ is a space), sorted by key and then by value, re-encoded per RFC 3986 and joined with &, or the empty string when there is no query. Headers signed for one request are rejected on any other. See Sign requests.
Query Parameters
Only strategies for this maker wallet. Matches case-sensitively: use the exact form you sent.
Only strategies with this status.
pending, active, cancelled, finished Response
Matching strategies, each with its orders.
Was this page helpful?
