Skip to main content
Developers

Changelog

Additive changes within v1 are listed here as they ship. Breaking changes come as a new version, announced here in advance.

2026-11-13 — Your AI assistant can link the part of a help article that answers the question

  • read_help_article gives each of the article's sections with its own link (sections, each with its title and url), so your assistant can send you straight to the part that answers your question.
  • Its updated is now a date, YYYY-MM-DD; it was written out, such as “13 November 2026”.

2026-11-13 — Your AI assistant can see what your keys did

  • New MCP tool get_activity, on every key: what the account's keys did, newest first. Every REST, stream and MCP call, refusals included, with when, which key, what it was, a summary (instrument, side, volume, ticket: never prices or anything written) and how it ended. A key that can read the account sees every key's calls; one that can't, its own.
  • The Developers page lists the same under Activity: the latest 100, or one key's. Repeats of the same read or refusal within 15 minutes share a row with their count. Rows are kept 180 days; see Activity.

2026-11-13 — Your AI assistant can ask JAFX for what it can't do yet, and hears the answer

  • New MCP tool request_feature, on every key: when you want something JAFX can't do yet, your assistant asks whether to send it, then sends JAFX's team what you wanted and why. JAFX's team reads every request and answers it; nothing is promised. At most 5 a day per account (429 feature_request_limit).
  • New MCP tool list_feature_requests: the account's requests with their status (new, considering, planned, done, declined) and JAFX's reply. When JAFX answers, every account that asked gets a notification (feature_request_answered, feature_request_merged).
  • The Developers page lists your requests under Feature requests, below Notifications.
  • Over MCP, a tool the server doesn't have answers 404 tool_not_found as a tool error (it was a protocol error), and inputs a tool doesn't take 422 invalid_request as a problem document (it was plain text), each with a next line (see Errors).

2026-11-13 — AI apps connect with just the MCP address and a JAFX sign-in

  • Claude (on the web, the desktop app and phones), ChatGPT, Claude Code, Cursor and VS Code connect to the MCP server with just its address and a JAFX sign-in (OAuth 2.1 with PKCE): the app opens a JAFX page where you sign in with your trading account, choose what it may do and its limits, and press Allow. No key to make or paste, and no mcp-remote bridge for Claude Desktop.
  • On live accounts an app can read, or propose trades that wait for your Confirm; trading without asking is for demo accounts only. Connected apps show on the Developers page under Connected apps, with the same limits and switches as keys, and Disconnect stops one within seconds.
  • New code invalid_token (MCP only): an app's sign-in has expired or was ended. REST and the stream still take API keys only.

2026-11-13 — Your AI assistant is told what changed, and your account's state, when it connects

  • New MCP tool get_changelog, on every key: this page's entries, each with a note written for the assistant, that the key hasn't read yet (or all of them, with all). When there is something new, the assistant is told as it connects, and get_limits says so too.
  • When an assistant connects, the server's instructions open with the account's state while it matters: the API session ends within 2 hours (with around-the-clock trading off) or has ended, JAFX has paused API trading, live API trading is off, the key expires within 7 days, or the daily loss stop is reached. Each line says what to tell you.
  • The MCP tool get_limits also returns those lines (account_state), the key's expires_at, today's loss against the daily loss stop (daily_loss) and what's new (notices). REST's GET /me is unchanged.

2026-11-13 — Your AI assistant hears what happened while it was away

  • New MCP tool get_notifications, on every key: what happened on the account while the assistant wasn't connected, newest first. A proposal confirmed (and what its order did), rejected or expired; a key's daily loss stop reached or reset; a key suspended, resumed, revoked, given a new secret or about to expire; the API session ending or ended, and why; JAFX pausing or limiting API trading, or switching it back on; an order whose outcome was unknown, settled.
  • When an assistant connects, the first line of the server's instructions says how many notifications are new, and get_limits carries the same line in its new field notices.
  • The Developers page lists the account's latest 20 under Notifications, with a dot on those you haven't seen there.

2026-11-13 — Your AI assistant reads JAFX's help centre and these docs, and has three checklists

  • New MCP tools search_help and read_help_article, on every key: JAFX's help centre at jafx.com/help, for questions about deposits, withdrawals, verification, accounts and fees. The assistant is told to search it first and give you the article's link, never to guess about money or verification. Article text comes as untrusted_content.
  • New MCP tool get_docs, on every key: a page of these docs as text, by topic, as published for the version you are connected to.
  • Three MCP prompts, which clients such as Claude Code show as commands (/jafx:check-before-trade): check-before-trade, review-my-account and connect-a-bot. They check risks and report facts; none suggests a trade.
  • The MCP tool get_symbols takes symbols, to read only those instruments.
  • Two new codes, from these tools only: 503 help_centre_unavailable and 404 help_article_not_found (see Errors).

2026-11-13 — Your AI assistant sees its proposals, can stop API trading, and is told what to do after a refusal

  • New MCP tool list_proposals: the account's proposals, newest first, with the request_id each order tool answered and what became of it (pending, executed, rejected, expired …). The same list as GET /accounts/{account}/proposals; a key that can read the account sees every key's.
  • New MCP tool stop_api_trading, on every key: Stop API trading now, as on the Developers page. No tool starts trading again: that stays a sign-in to JAFX Terminal, or Renew.
  • Every problem an MCP tool returns carries next, one plain sentence on what to do next. REST answers are unchanged.
  • 409 order_busy: retry with a new Idempotency-Key. The old one keeps the broker's refusal, so a retry with it gets the same answer (the docs said only "retry").

2026-11-04 — Keep your bots trading around the clock, and lock keys to your bot's address

  • New on the Developers page: Keep my bots trading around the clock, off by default. With it on, JAFX keeps your trading password encrypted and signs your keys' session in again by itself, so they keep trading past the 24 hours. See Around the clock.
  • GET /me and the MCP tool get_limits show session.renews_automatically. A new session.ended_reason, password_refused: the trading account refused the saved password, so around-the-clock trading stopped.
  • Creating a key that can trade or propose now says plainly who can use a key that leaks, recommends locking it to your bot's IP addresses (Only allow these IP addresses, next to that warning), and needs a tick to leave it open to any address. The key list shows each key's IP lock. See Keeping your key safe. Nothing changes for existing keys.

2026-11-04 — Orders go through your account's own session

  • Your keys' orders now go through your account's own trading session, the way JAFX Terminal places a manual trade, so the broker records them as your own requests. Proposals you confirm in the terminal do too.
  • A key trades for 24 hours after each sign-in to JAFX Terminal (or Renew on its Developers page), whether or not the terminal stays open. After that, orders answer the new code 409 sign_in_required and nothing is sent; retry with the same Idempotency-Key after signing in. See Trading sessions.
  • GET /me and the MCP tool get_limits show the session under session (active, expires_at). GET /status lists per server what needs the sign-in (sign_in_needed_for), and a server's state can be ready.
  • The Developers page shows until when your keys can trade, with Renew and Stop API trading now.
  • 429 broker_throttled now frees the Idempotency-Key: the broker kept nothing, so the same key goes through after Retry-After.

2026-11-03 — Retries stay safe even if JAFX loses track of the first call

  • Every attempt under one Idempotency-Key now reaches the broker as the same request. So a retry gets the original order back from the broker even when JAFX lost its own record of the first call, for example in a server crash, instead of relying on that record alone. That answer has a new request_id and no Idempotent-Replayed header, but the original ticket. Nothing changes in what you send.
  • A key stays bound to its answer for 72 hours; after that, the same key places a new order. See Idempotency.

2026-10-31 — Every error is a problem document

  • Requests refused before they reach the API used to get an HTML page. They now get a problem document with an X-Request-Id header and a request_id, like every other answer: a body over 64 KB (413 invalid_request), too many requests from one IP address (429 rate_limited), and the few seconds while the API restarts (503 service_unavailable).
  • New code service_unavailable (503, with Retry-After): the Trading API is restarting, for example for an update, cannot be reached, or did not answer in time. Wait for Retry-After and retry the same call; retry a write with the same Idempotency-Key.
  • More than 50 requests a second from one IP address (bursts of 100, all keys together) now answer 429 rate_limited with Retry-After, instead of a 503 without it. See Limits.
  • Request IDs are opaque strings starting with req_; their length can vary.

2026-10-31 — Keys for Live Server and Demo Server accounts

  • Keys are created for accounts on the Live Server and the Demo Server. A key's mode follows its account's server: jafx_demo_… for Demo Server accounts, jafx_live_… for Live Server accounts.
  • GET /me and the MCP tool get_limits name the key's server (live or demo).
  • GET /status shows the broker connection of each server under broker.servers.
  • The instrument list, quotes, candles and streams no longer show the load-test instruments (“Load test pair …”).

2026-10-31 — Fixes

  • Streaming: resubscribing with since_seq now replays the order events that happened while you were disconnected, for up to 5 minutes, or answers resync_required. Before, a program whose only connection had dropped got neither.
  • Streaming: order event sequence numbers are now 13-digit numbers that keep growing across server restarts, so a seq from before a restart can't be taken for a newer one. Store them as 64-bit integers.
  • A request body that is not JSON (400) or is over 64 KB (413) now gets an X-Request-Id header and a request_id, like every other answer.
  • 503 broker_unavailable now always comes with a Retry-After header.

2026-10-13 — v1

The first version of the API.

  • REST API https://terminal.jafx.com/trading-api/v1: instruments, quotes and candles; account summary, positions, pending orders, closed trades and balance operations; market and pending orders, stop and target changes, full and partial closes, cancels; request status and proposals.
  • Streaming wss://terminal.jafx.com/trading-api/v1/stream: quotes, candles, account and order channels, with replay after reconnecting.
  • MCP server https://terminal.jafx.com/trading-api/mcp: 14 tools for AI agents, filtered by the key's scopes.
  • API keys: scopes, per-key limits, proposals (confirm mode), rolling and revocation, created in the web terminal under Developers.
  • Demo and live accounts; live keys start with tight limits and confirm mode on.

Automated and AI-driven trading can lose money quickly; nothing in these docs is investment advice.

JAFX (PTY) LTD · FSCA FSP No. 52058 · Trading leveraged derivatives with JAFX carries a high risk of losing money rapidly. It is not suitable for everyone.