# Read one DCA strategy by ID.
# Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
STRATEGY_ID='320263ca-2f38-4349-b641-a23aed2ff847'
METHOD=GET
ENDPOINT="/dca-order/strategies/$STRATEGY_ID"
QUERY=''
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 DcaStrategy = { id: string; status: string; iterations: number; frequency: number };
const strategyId = "320263ca-2f38-4349-b641-a23aed2ff847";
const strategy = await olympexRequest<DcaStrategy>("GET", `/dca-order/strategies/${strategyId}`);
if (strategy.status === "active") {
// The strategy itself carries no orders: fetch them separately.
const orders = await olympexRequest<{ status: string }[]>("GET", `/dca-order/strategies/${strategyId}/orders`);
console.log(`${orders.length} of ${strategy.iterations} orders created so far`);
} else {
console.log(`Strategy is ${strategy.status}`);
}
from sign_request import olympex_request # /authentication/sign-requests
strategy_id = "320263ca-2f38-4349-b641-a23aed2ff847"
strategy = olympex_request("GET", f"/dca-order/strategies/{strategy_id}")
if strategy["status"] == "active":
# The strategy itself carries no orders: fetch them separately.
orders = olympex_request("GET", f"/dca-order/strategies/{strategy_id}/orders")
print(f'{len(orders)} of {strategy["iterations"]} orders created so far')
else:
print(f'Strategy is {strategy["status"]}')
{
"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"
},
"meta": {
"requestId": "Eds3sh1MIAMEPeg=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "DCA strategy not found",
"details": []
},
"meta": {
"requestId": "EdjfDjXBIAMEVsA=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"message": "Forbidden"
}
Get a DCA strategy
Read one DCA strategy by ID: its tokens, budget, schedule and status.
# Read one DCA strategy by ID.
# Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
STRATEGY_ID='320263ca-2f38-4349-b641-a23aed2ff847'
METHOD=GET
ENDPOINT="/dca-order/strategies/$STRATEGY_ID"
QUERY=''
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 DcaStrategy = { id: string; status: string; iterations: number; frequency: number };
const strategyId = "320263ca-2f38-4349-b641-a23aed2ff847";
const strategy = await olympexRequest<DcaStrategy>("GET", `/dca-order/strategies/${strategyId}`);
if (strategy.status === "active") {
// The strategy itself carries no orders: fetch them separately.
const orders = await olympexRequest<{ status: string }[]>("GET", `/dca-order/strategies/${strategyId}/orders`);
console.log(`${orders.length} of ${strategy.iterations} orders created so far`);
} else {
console.log(`Strategy is ${strategy.status}`);
}
from sign_request import olympex_request # /authentication/sign-requests
strategy_id = "320263ca-2f38-4349-b641-a23aed2ff847"
strategy = olympex_request("GET", f"/dca-order/strategies/{strategy_id}")
if strategy["status"] == "active":
# The strategy itself carries no orders: fetch them separately.
orders = olympex_request("GET", f"/dca-order/strategies/{strategy_id}/orders")
print(f'{len(orders)} of {strategy["iterations"]} orders created so far')
else:
print(f'Strategy is {strategy["status"]}')
{
"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"
},
"meta": {
"requestId": "Eds3sh1MIAMEPeg=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "DCA strategy not found",
"details": []
},
"meta": {
"requestId": "EdjfDjXBIAMEVsA=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"message": "Forbidden"
}
GET /dca-order/strategies/{id} returns one strategy created with your API key: its tokens, budget, schedule, price bounds and status. The response doesn’t include the strategy’s orders. Get them with GET /dca-order/strategies/{id}/orders, or list your strategies together with their orders with GET /dca-order/strategies.
Strategy status
status | Meaning |
|---|---|
active | Running. Olympex places the orders one frequency apart. |
cancelled | Stopped with PATCH /dca-order/strategies/{id}. Cancelling can’t be undone. |
finished | Every order ran. |
pending | Reserved for Olympex. |
status of each one.
Fields
totalAmount,slippage,minPriceandmaxPriceare JSON numbers in human-readable units, as sent.minPriceandmaxPriceare absent when the strategy has no bounds, andslippageis0when the strategy was created without it.- Addresses come back exactly as they were sent.
pairandsignaturearen’t returned. createdAtandupdatedAtare ISO 8601 timestamps in UTC.
Not found
404 NOT_FOUND with the message “DCA strategy not found” means that no strategy with this ID belongs to your API key: the ID doesn’t exist, or another API key created it. Each API key sees only its own strategies.
# Read one DCA strategy by ID.
# Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
STRATEGY_ID='320263ca-2f38-4349-b641-a23aed2ff847'
METHOD=GET
ENDPOINT="/dca-order/strategies/$STRATEGY_ID"
QUERY=''
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 DcaStrategy = { id: string; status: string; iterations: number; frequency: number };
const strategyId = "320263ca-2f38-4349-b641-a23aed2ff847";
const strategy = await olympexRequest<DcaStrategy>("GET", `/dca-order/strategies/${strategyId}`);
if (strategy.status === "active") {
// The strategy itself carries no orders: fetch them separately.
const orders = await olympexRequest<{ status: string }[]>("GET", `/dca-order/strategies/${strategyId}/orders`);
console.log(`${orders.length} of ${strategy.iterations} orders created so far`);
} else {
console.log(`Strategy is ${strategy.status}`);
}
from sign_request import olympex_request # /authentication/sign-requests
strategy_id = "320263ca-2f38-4349-b641-a23aed2ff847"
strategy = olympex_request("GET", f"/dca-order/strategies/{strategy_id}")
if strategy["status"] == "active":
# The strategy itself carries no orders: fetch them separately.
orders = olympex_request("GET", f"/dca-order/strategies/{strategy_id}/orders")
print(f'{len(orders)} of {strategy["iterations"]} orders created so far')
else:
print(f'Strategy is {strategy["status"]}')
{
"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"
},
"meta": {
"requestId": "Eds3sh1MIAMEPeg=",
"version": "v1",
"accountType": "integrator",
"apiKeyId": "00000000-0000-4000-8000-000000000000"
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "DCA strategy not found",
"details": []
},
"meta": {
"requestId": "EdjfDjXBIAMEVsA=",
"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.
Path Parameters
Strategy ID, as returned when it was created.
Was this page helpful?
