> ## Documentation Index
> Fetch the complete documentation index at: https://docs.olympex.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a DCA order

> Read one order of a DCA strategy: its status and, once it executes, the amount bought and the transaction hash.

`GET /dca-order/orders/{id}` returns one order of a strategy created with your API key. An order is one execution of the strategy: Olympex creates it as the strategy runs, and it sells `totalAmount / iterations` of the strategy's `tokenAddressFrom`. Get order IDs from [`GET /dca-order/strategies/{id}/orders`](/api-reference/dca/list-dca-strategy-orders), and read the order again to follow its `status`.

Signed endpoint with no request body. Send `Content-Type: application/json` and the four headers `x-api-key-id`, `x-value-info`, `x-passphrase` and `x-signature` described in [Sign requests](/authentication/sign-requests), signed over the method, the path and the empty string (`bodyHash` `47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU`). `id` is the DCA order ID. `status` is `pending`, `executing`, `successful` (with `transactionHash`, `amountReceived` and `executionPrice`), `cancelled`, `error` (with `errorMessage`) or `expired`; treat any other value as not final. `404 NOT_FOUND` "DCA order not found" means the ID doesn't exist or belongs to a strategy of another API key.

## Order status

| `status` | Meaning | Fields it sets |
| - | - | - |
| `pending` | Scheduled. Olympex hasn't started it. | |
| `executing` | Olympex is executing it. It can no longer be stopped. | |
| `successful` | Executed. | `transactionHash`, `amountReceived`, `executionPrice` |
| `cancelled` | Skipped. | |
| `error` | Failed. | `errorMessage` |
| `expired` | Not executed in time. | |

Treat any other value as not final.

DCA orders are read-only: Olympex creates and updates them, and no endpoint changes or cancels one. To stop a strategy's remaining orders, [cancel the strategy](/api-reference/dca/update-dca-strategy) and lower the maker's allowance.

## Execution fields

| Field | Meaning |
| - | - |
| `amount` | Amount of the token sold in this order, human-readable, as a JSON number. |
| `amountReceived` | Amount of the token bought, human-readable, as a JSON number. |
| `executionPrice` | Price the order executed at, in units of the token sold per 1 token bought: `4201.68` is 4,201.68 USDC per WETH. This is the inverse of the strategy's `minPrice` and `maxPrice`, which are in units of the token bought per 1 token sold. |
| `transactionHash` | Hash of the execution transaction, on the strategy's chain. |

## Not found

`404 NOT_FOUND` with the message "DCA order not found" means that no order with this ID belongs to one of your strategies: the ID doesn't exist, or the order belongs to a strategy that another API key created.

<RequestExample>
  ```bash cURL theme={null}
  # Read one DCA order by ID.
  # Needs openssl, curl and OLYMPEX_API_KEY_ID, OLYMPEX_SECRET_KEY, OLYMPEX_PASSPHRASE.
  ORDER_ID='5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17'
  METHOD=GET
  ENDPOINT="/dca-order/orders/$ORDER_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')"
  ```

  ```ts TypeScript theme={null}
  import { olympexRequest } from "./sign-request.ts"; // /authentication/sign-requests

  type DcaOrder = {
    status: string;
    amount: number;
    amountReceived?: number;
    executionPrice?: number;
    transactionHash?: string;
    errorMessage?: string;
  };

  const orderId = "5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17";
  const order = await olympexRequest<DcaOrder>("GET", `/dca-order/orders/${orderId}`);
  if (order.status === "successful") {
    console.log(`Sold ${order.amount}, bought ${order.amountReceived} at ${order.executionPrice}: ${order.transactionHash}`);
  } else if (order.status === "error") {
    console.log(`Failed: ${order.errorMessage}`);
  } else {
    console.log(`Order is ${order.status}`);
  }
  ```

  ```python Python theme={null}
  from sign_request import olympex_request  # /authentication/sign-requests

  order_id = "5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17"
  order = olympex_request("GET", f"/dca-order/orders/{order_id}")
  if order["status"] == "successful":
      print(f'Sold {order["amount"]}, bought {order["amountReceived"]} at {order["executionPrice"]}: {order["transactionHash"]}')
  elif order["status"] == "error":
      print(f'Failed: {order["errorMessage"]}')
  else:
      print(f'Order is {order["status"]}')
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "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": "EdjfPgZTIAMEbEA=",
      "version": "v1",
      "accountType": "integrator",
      "apiKeyId": "00000000-0000-4000-8000-000000000000"
    }
  }
  ```

  ```json 404 theme={null}
  {
    "success": false,
    "error": {
      "code": "NOT_FOUND",
      "message": "DCA order not found",
      "details": []
    },
    "meta": {
      "requestId": "EdjfPgZTIAMEbEA=",
      "version": "v1",
      "accountType": "integrator",
      "apiKeyId": "00000000-0000-4000-8000-000000000000"
    }
  }
  ```

  ```json 403 Gateway theme={null}
  {
    "message": "Forbidden"
  }
  ```
</ResponseExample>


## OpenAPI

````yaml api-reference/openapi.json GET /dca-order/orders/{id}
openapi: 3.0.3
info:
  title: Olympex REST API
  version: 1.0.0
  description: >-
    Aggregated swap quotes and transactions, limit orders and DCA strategies on
    EVM chains, plus the chain and token catalog. Every response uses the same
    envelope, except the API gateway's own responses (`{"message": …}`): `401`
    or `403` when the signed headers are missing or rejected, `429` when it
    throttles requests, and `500` or `503` when it can't get a response from
    Olympex in time. Chain IDs are integers on every endpoint. Signed endpoints
    require four signed headers; see [Sign
    requests](https://docs.olympex.io/authentication/sign-requests).
  termsOfService: https://docs.olympex.io/legal/terms
  contact:
    name: Olympex partnerships
    email: partners@olympex.io
    url: https://docs.olympex.io
servers:
  - url: https://api-rest.olympex.io/api/v1
    description: Olympex REST API v1
security: []
tags:
  - name: Accounts
    description: Create API credentials.
  - name: Quotes
    description: Aggregated single-chain and cross-chain quotes.
  - name: Swap
    description: Unsigned transaction calldata for a quoted route.
  - name: TxStatus
    description: Track a cross-chain transfer after you broadcast it.
  - name: Transactions
    description: On-chain status of a transaction you broadcast.
  - name: Chains and tokens
    description: Enabled chains and the tokens listed on each.
  - name: Limit orders
    description: Orders that Olympex executes when the market reaches your price.
  - name: DCA
    description: Strategies that buy a token in equal orders over time.
  - name: Docs
    description: Machine-readable API description.
paths:
  /dca-order/orders/{id}:
    get:
      tags:
        - DCA
      summary: Get a DCA order
      description: >-
        Returns one order of a strategy created with your API key. DCA orders
        are read-only: to stop the remaining orders, cancel the strategy and
        lower your token allowance. No request body: sign the empty string.
      operationId: getDcaOrder
      parameters:
        - name: id
          in: path
          required: true
          description: DCA order ID, as returned when it was created.
          schema:
            type: string
          example: 5b3e1f7a-9c2d-4e8b-a1f0-6d4c2b8e9a17
      responses:
        '200':
          description: The order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DcaOrderSuccessResponse'
              example:
                success: true
                data:
                  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: EdjfPgZTIAMEbEA=
                  version: v1
                  accountType: integrator
                  apiKeyId: 00000000-0000-4000-8000-000000000000
        '401':
          description: >-
            A signing header is missing. The gateway answers with
            `{"message":"Unauthorized"}` before your request reaches Olympex;
            the handler answers with the `UNAUTHORIZED` envelope when the
            authorizer context is missing.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/GatewayError'
                  - $ref: '#/components/schemas/ErrorResponse'
              example:
                message: Unauthorized
        '403':
          description: >-
            Authentication failed: unknown key, wrong passphrase, invalid
            signature, timestamp outside the ±300 s window, reused nonce, or
            inactive account (gateway `{"message":"Forbidden"}`). The handler
            answers with the `FORBIDDEN` envelope when the signed `bodyHash` is
            not the hash of an empty body.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/GatewayError'
                  - $ref: '#/components/schemas/ErrorResponse'
              examples:
                gateway:
                  summary: Signature rejected by the gateway
                  value:
                    message: Forbidden
                bodyHash:
                  summary: Body does not match the signed hash
                  value:
                    success: false
                    error:
                      code: FORBIDDEN
                      message: Invalid body hash
                      details: []
                    meta:
                      requestId: ENXGDhsXIAMEMEw=
                      version: v1
                      accountType: integrator
                      apiKeyId: 00000000-0000-4000-8000-000000000000
        '404':
          description: >-
            No DCA order with this ID belongs to your API key (`NOT_FOUND`). IDs
            of other API keys return the same error. An unknown path or method
            also returns `NOT_FOUND`, with a message that names the method and
            path.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                notFound:
                  summary: Unknown DCA order
                  value:
                    success: false
                    error:
                      code: NOT_FOUND
                      message: DCA order not found
                      details: []
                    meta:
                      requestId: EdjfPgZTIAMEbEA=
                      version: v1
                      accountType: integrator
                      apiKeyId: 00000000-0000-4000-8000-000000000000
                unknownRoute:
                  summary: Unknown path or method
                  value:
                    success: false
                    error:
                      code: NOT_FOUND
                      message: No route for GET /api/v1/quote
                      details: []
                    meta:
                      requestId: E7edogG4IAMEPYA=
                      version: v1
        '500':
          description: >-
            Olympex could not complete the request (`INTERNAL_ERROR`), or the
            gateway could not get a response (`{"message":"Internal Server
            Error"}`), which also happens on the first request after a quiet
            period. Retry with backoff.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ErrorResponse'
                  - $ref: '#/components/schemas/GatewayError'
              example:
                success: false
                error:
                  code: INTERNAL_ERROR
                  message: Unexpected internal error
                  details: []
                meta:
                  requestId: EdjfPgZTIAMEbEA=
                  version: v1
                  accountType: integrator
                  apiKeyId: 00000000-0000-4000-8000-000000000000
        '503':
          description: >-
            The gateway could not get a response in time (the integration
            timeout is about 30 seconds) or the service is briefly unavailable.
            Returned by the gateway. Retry with backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                message: Service Unavailable
      security:
        - ApiKeyId: []
          ValueInfo: []
          Passphrase: []
          Signature: []
components:
  schemas:
    DcaOrderSuccessResponse:
      type: object
      required:
        - success
        - data
        - meta
      properties:
        success:
          type: boolean
          enum:
            - true
        data:
          $ref: '#/components/schemas/DcaOrder'
        meta:
          $ref: '#/components/schemas/Meta'
    GatewayError:
      type: object
      required:
        - message
      description: >-
        Returned by the API gateway itself: `401` or `403` when the signed
        headers are missing or rejected, `429` when it throttles requests, and
        `500` or `503` when it can't get a response from Olympex in time. It has
        no `success`, `error` or `meta`.
      properties:
        message:
          type: string
          example: Forbidden
    ErrorResponse:
      type: object
      required:
        - success
        - error
        - meta
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          $ref: '#/components/schemas/ErrorBody'
        meta:
          $ref: '#/components/schemas/Meta'
    DcaOrder:
      type: object
      description: >-
        One execution of a DCA strategy. Olympex creates these as the strategy
        runs. DCA orders are read-only. Olympex can add fields; ignore the ones
        you don't use.
      required:
        - id
        - strategyId
        - accountTo
        - amount
        - status
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          description: DCA order ID.
        strategyId:
          type: string
          format: uuid
          description: ID of the strategy the order belongs to.
        accountTo:
          type: string
          description: Maker wallet.
        amount:
          type: number
          description: Amount of the token sold in this order, human-readable.
        amountReceived:
          type: number
          description: >-
            Amount of the token bought, human-readable. Present once the order
            executes.
        executionPrice:
          type: number
          description: >-
            Price the order executed at, in units of the token sold per 1 token
            bought. Present once the order executes.
        status:
          type: string
          enum:
            - pending
            - executing
            - successful
            - cancelled
            - error
            - expired
          description: >-
            `pending`: scheduled. `executing`: in progress. `successful`:
            executed, see `transactionHash`. `cancelled`: skipped. `error`:
            failed, see `errorMessage`. `expired`: not executed in time. Treat
            any other value as not final.
        errorMessage:
          type: string
          description: Why the order failed. Present when `status` is `error`.
        transactionHash:
          type: string
          description: Execution transaction hash. Present once the order executes.
        createdAt:
          type: string
          format: date-time
          description: When Olympex created the order (ISO 8601, UTC).
        updatedAt:
          type: string
          format: date-time
          description: When the order last changed (ISO 8601, UTC).
        deletedAt:
          type: string
          format: date-time
          description: Absent unless the order was deleted by Olympex.
    Meta:
      type: object
      required:
        - requestId
        - version
      properties:
        requestId:
          type: string
          description: Unique ID for this request. Include it when you contact support.
        version:
          type: string
          default: v1
          description: API version that served the request.
        accountType:
          type: string
          description: >-
            Account type resolved by the signature check, for example
            `integrator`. Present when the request was authenticated; absent on
            the `404` for an unknown path or method.
        apiKeyId:
          type: string
          format: uuid
          description: >-
            The API key ID that signed the request. Present when the request was
            authenticated; absent on the `404` for an unknown path or method.
    ErrorBody:
      type: object
      required:
        - code
        - message
        - details
      properties:
        code:
          type: string
          description: >-
            Machine-readable error code. `VALIDATION_ERROR` (400),
            `UNAUTHORIZED` (401), `FORBIDDEN` (403), `NOT_FOUND` (404, also for
            an unknown path or method), `CONFLICT` (409), `NO_ROUTE` (422), and
            for 500: `QUOTE_ERROR`, `CROSS_CHAIN_QUOTE_ERROR`, `SWAP_ERROR`,
            `CROSS_CHAIN_SWAP_ERROR`, `SUPPORT_CHAIN_ERROR`,
            `ENABLED_CHAINS_ERROR`, `TOKEN_LIST_ERROR`, `TX_STATUS_ERROR`,
            `INTERNAL_ERROR`. Olympex can add codes: handle an unknown code by
            its HTTP status.
        message:
          type: string
          description: Human-readable summary. Don't parse it.
        details:
          type: array
          items:
            $ref: '#/components/schemas/ErrorDetail'
    ErrorDetail:
      type: object
      additionalProperties: true
      description: >-
        Validation errors carry `field` and `message`; other errors carry
        `message` only.
      properties:
        field:
          type: string
          description: >-
            Dot path of the invalid field, for example `params.chainId`. Empty
            for the top level.
        message:
          type: string
  securitySchemes:
    ApiKeyId:
      type: apiKey
      in: header
      name: x-api-key-id
      description: >-
        Your API key ID (UUID). See [Sign
        requests](https://docs.olympex.io/authentication/sign-requests).
    ValueInfo:
      type: apiKey
      in: header
      name: x-value-info
      description: >-
        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.
    Passphrase:
      type: apiKey
      in: header
      name: x-passphrase
      description: Your account passphrase. Treat it like the secret key.
    Signature:
      type: apiKey
      in: header
      name: x-signature
      description: >-
        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](https://docs.olympex.io/authentication/sign-requests).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.