Hot summer promotion: 20% off all challenges · Limited time only

API Access, Now Open

Connect any strategy.Trade with firm capital.

Full REST + WebSocket API, algo trading & bot trading on every funded account

Every Velotrade account, from your first evaluation challenge to a fully funded account, includes full programmatic API access. Run algo strategies, bots, and automated systems with no extra fee and no approval process.

No extra fee
No approval required
Any language
REST + WebSocket

What you can build

The API covers the full execution stack. Place, modify, and cancel orders, stream live market data, and read real-time account metrics via WebSocket.

Algo trading engines

Rule-based EAs, systematic strategies, or fully autonomous execution systems. Written in any language.

Signal automation

Connect an external signal feed and route orders directly into your funded account on every trigger.

Real-time risk dashboards

Stream live equity, drawdown, and margin data via WebSocket to monitor account state from your own UI.

AI-assisted execution

Use machine learning models or AI outputs to drive order entry decisions. Treated the same as any other strategy.

Multi-account management

Orchestrate positions across multiple funded accounts from a single execution layer.

Quantitative strategies

Full systematic strategies with defined entry, exit, and sizing logic. No manual intervention required.

From challenge to live API in 4 steps

No separate application or key issuance. API access is available on evaluation and funded accounts as soon as your trading account is issued.

01

Start with any account.

API access is available on every account type, evaluation and funded. There is no separate application, fee, or approval process.
02

Use your trading account credentials.

Your trading account credentials are your API credentials. See the developer docs for token auth and request details.
03

Reference the developer docs.

Use the developer portal and the place-order reference for REST and WebSocket integration details.
04

Trade and withdraw.

Run your strategy live. Request payouts within 24 hours in USDC or USDT on the same schedule as any funded trader.

Developer docs

API integration docs

Use the developer portal for implementation details, authentication flow, order placement, and account-level data. Start with the main portal, then jump directly to the place-order reference when wiring up execution.

Starter example

Place an order

Use the docs on the left for authentication, then send orders to the documented place-order endpoint with your session token.

Place order request
POST https://dx.velotrade.com/dxsca-web/accounts/{accountCode}/orders
Authorization: DXAPI <sessionToken>
Content-Type: application/json

{
  "account": "your_account_code",
  "orderCode": "client-unique-order-id",
  "type": "MARKET",
  "instrument": "BTC/USD",
  "quantity": "0.01",
  "positionEffect": "OPEN",
  "side": "BUY",
  "tif": "GTC"
}

How Velotrade compares

Most prop firms restrict or discourage automated trading. Velotrade is built for traders who run serious systems.

FeatureVelotradeMost firms
Full REST + WebSocket API
Algo and bot trading permittedLimited
No extra fee for API access
No approval process required
AI-assisted execution allowedUnclear
Signal-based automationOften restricted
No mandatory stop-loss per trade
No consistency rule
Help & troubleshooting

Connection & API error reference

The fastest fixes for the errors traders hit most when wiring up the DXtrade REST and WebSocket API. Full details are in the developer portal.

409 SERVICE_ERRORMost reported

Login succeeds, then every call returns 409 SERVICE_ERROR

Login returns a valid session token, but every REST call and the WebSocket handshake afterwards returns 409. In almost every case this is not an access or provisioning problem — a disabled or unentitled account returns 401 or 403, not 409, and would not 409 on /ping. A 409 is a conflict, which points to a session collision or a wrong endpoint path, both of which you can resolve yourself.

Resolution steps

  1. 1Log out of the web platform completely and close any open mobile app session.
  2. 2Wait two to three minutes for the server-side session to clear.
  3. 3Re-authenticate via POST /dxsca-web/login to get a fresh token.
  4. 4Immediately call one lightweight endpoint (e.g. /ping) with the new token, with nothing else running.

Good to know

  • REST does not require a live WebSocket session — the two are independent. You can call REST endpoints without opening a socket first.
  • The streaming interface sits under the same base path as REST. A standalone path such as wss://<host>/ws is not valid and will not connect.

If it persists: If it persists, capture the full 409 response body. Any reason code or message string identifies exactly which server-side guard is firing — send it verbatim when you contact support.

Session timeoutMy session token keeps expiring mid-run.
The session token expires after an idle period (30-minute idle timeout). To keep a long-running bot alive without placing an order, send POST /ping periodically — it resets the session timeout with no side effects. On the WebSocket, the server sends a PingRequest message on an interval and your client must reply with a Ping to prolong the same session; miss it and the socket is torn down.
429Requests suddenly start returning 429 Too Many Requests.
You are over the per-client rate limit. Defaults are 1 login/sec (per IP), 10 read requests/sec, 10 trading requests/sec, and 1/sec for large or historical-data queries (per session). Back off and batch your calls, and poll account metrics over the WebSocket instead of hammering GET endpoints. On the Push API, RequestType = ALL subscriptions are limited to 1 per minute. Contact support if you genuinely need higher limits.
403 · code 99Modifying or cancelling an order returns 403.
PUT and DELETE on orders are conditional requests. You must send an If-Match header carrying the current ETag returned by a prior GET of that order. Omitting If-Match returns 403 with error code 99. Fetch the order first, read its ETag, then send the modify/cancel with If-Match set to that value.
412Order modify returns 412 Precondition Failed.
Your If-Match ETag is stale — the order changed on the server since you last fetched it (a partial fill, a status change, or another modify). Re-fetch the order to get the current ETag, then retry the PUT or DELETE with the fresh value. This is the platform preventing a stale overwrite during concurrent updates.
409 · code 100Placing an order returns 409 with error code 100.
An order with that client orderCode already exists. Client order IDs must be unique — this guard prevents duplicate orders on a retransmission. Generate a fresh, unique orderCode for every new order. If you sent a retry after a network timeout, a code 100 means the original order was already accepted, so reconcile against your open orders rather than resending.
WebSocketThe WebSocket won't connect or keeps closing.
Connect on the correct path: the streaming endpoint sits under the same base URL as REST — business events at the base resource URL, market data at /md — not a standalone wss://<host>/ws. All connections require TLS. Reuse your REST session token in the session field of every message. If the socket closes with code 1013, the server is applying backpressure because your client is not consuming messages fast enough — read and process faster, or reduce the number of active subscriptions.

Still stuck? Capture the full response body and reason code, then reach out — it pinpoints exactly which guard is firing.

Open developer docs

Frequently asked questions

Common questions on API access, automation rules, and how to connect your strategy.

Algo & bot trading guide

Ready to run your system on a funded account?

Pass the challenge, get funded, and connect your API the same day.