Changelog
What changed in the fxapis API, newest first.
2026-11-12
- Answering support by email. When we answer your support ticket by email, you can reply to that email: your answer is added to the same ticket in the console, marked "by email", and we are told as if you had answered in the console. No API change.
- Closing or changing a position that has already closed. If a position was closed at the broker a moment before your request (by its stop loss or take profit, or by another close), closing it or changing its stops now answers 404
POSITION_NOT_FOUNDand nothing is sent. Before, the broker rejected it with MT5 code 10013 "Invalid request". Cancelling a pending order that has already filled, expired or been cancelled at the broker answers 400INVALID_REQUESTthe same way. - Pending orders cancelled or expired outside fxapis. A pending order you cancel in MetaTrader 5 yourself, that your broker cancels, or that expires now moves to
cancelledorexpiredin fxapis within a few minutes while the account is online. Before, it kept showing asworking. - Cancelling an order that is no longer pending.
POST /v1/orders/{id}/cancelon an order that is already cancelled, or has filled, now answers at once with 400INVALID_REQUESTand says what state the order is in — a filled order is a position, so close it instead. Before, the request went to the broker and came back rejected with MT5 code 10013 "Invalid request". No change for orders still waiting at the broker.
2026-11-11
- MarketLabs calendar: Canada, Australia and Japan. Release times with actual and previous figures for Canadian, Australian and Japanese jobs, inflation and GDP, and every Bank of Canada and Reserve Bank of Australia rate decision, each credited to its official publisher. Bank of Japan meetings are not included yet. No API change: the same
GET /v1/marketlabs/eventsfields, withCAD,AUDandJPYincurrencies. - MarketLabs: Today for you. A new page with the next 48 hours of official events for the currencies you hold or watch, your open positions and pending orders against them ("long EURUSD into the ECB rate decision at 13:15"), each pair's research lean, and what changed since yesterday. Open it from the watchlist ticker at the top of MarketLabs; until your watchlist and an MT5 account are set up, the ticker's button takes you to the step that is missing. Market intelligence stays MarketLabs' home page. In the API as
GET /v1/marketlabs/today(positions needtrading:read). - MarketLabs in Claude and ChatGPT. Two new read-only tools:
get_marketlabs_todayandget_marketlabs_snapshot(your watchlist, rates, volatility, positioning and currency strength).get_marketlabs_researchcan include the track record. Research, not trading advice. - Economic calendar. ISM Manufacturing and Services PMI dates are back, shown as not confirmed until the publisher confirms them.
- SDKs. TypeScript SDK 0.3.2 and Python SDK 0.2.3 add price history (
getAccountsByIdCandles,client.accounts.candles(…)), closing and retrying a multi-account order (postExecutionwavesByIdClose/postExecutionwavesByIdRetry,client.waves.close(…)/client.waves.retry(…)), and MarketLabs: today, the economic calendar, headlines, research and its track record (getMarketlabs…methods,client.marketlabs). Nothing existing changed.
2026-11-09
- MarketLabs calendar with figures. Release times for US, euro-area and UK data and every Fed, ECB and Bank of England rate decision, with the source on every event. Actual and previous figures appear for euro-area and UK releases and for the three central banks' decisions; figures for US data (jobs, inflation, GDP, retail sales and more) are being added, and their dates show meanwhile. PMI release dates are listed without figures.
GET /v1/marketlabs/eventsaddskindandimpactfilters and the fieldskind,unit,period,revisedPrevious,status,releasedAtandconfirmed; event ids are now stable per series and period. New read-only MCP tools:get_marketlabs_calendarandget_marketlabs_news. Headlines now show the outlet's name. Gold and silver (XAUUSD, XAGUSD) can be added to a MarketLabs watchlist. - MarketLabs on your phone. The MarketLabs console has a phone layout: pages in a bottom tab bar, the watchlist as tiles you swipe, and the calendar as a list by day. No API change.
2026-11-06
- Pro plan. $29 a month or $290 a year: two live MT5 accounts and one
demo account, 3,000 opening executions a month (refused beyond, never
billed), always-on for $9 per account a month, pending orders,
multi-account orders across your own accounts, webhooks, and up to three
people. A third live account means Production. Plan code
pro. - MarketLabs is included on every plan while it is in beta. What each
plan includes may change. Daily official reference
rates, trading sessions, the official economic calendar, CFTC positioning,
and a daily cited research brief for each pair on your watchlist — a lean
and a confidence per horizon, with a hit rate once a pair and horizon
reaches 30 scored calls. Research, not trading advice: it never places a
trade. Read more in the MarketLabs guide, or call it
from Claude or ChatGPT with the
get_marketlabs_researchtool.
2026-11-05
- Trials started from today. A trial now includes 1,000 opening
executions and 50 hours of terminal time for the whole 14 days. Accounts
come online when you use them and go offline after 10 minutes without
trading; keeping an account online all the time comes with a paid plan.
When the 50 hours are used, accounts stay offline (
402 TRIAL_HOURS_USED); you can still read your accounts and close positions. Trials already running keep their terms. - Restarting an account. An account can be brought online or restarted
up to 3 times in 10 minutes (
429 RESTART_TOO_SOON, withretry-after). Closing positions, cancelling orders and moving stops are never held back by this. - What keeps an account online. On plans where accounts come online when used, opening and closing positions keep an account online, and so does an AI assistant working with that account. Moving a stop or cancelling a pending order does not.
- Invitations. A workspace can send up to 20 invitations a day, 5 during
a trial (
429 INVITATIONS_LIMITED). - Your name. Names can use letters in any alphabet, numbers, spaces and
the usual punctuation, up to 80 characters (
400 INVALID_NAME). - API requests in the console now show what you used this month, without a monthly limit.
- Partner program. Creators, communities, educators and brokers can now apply to partner with fxapis at fxapis.com/partners. People who sign up through a partner's link get a 30-day free trial. No API change.
2026-11-03
- Plan codes for Personal, Production and Business. A plan code can now
put a workspace on one of these plans. It gives what the plan's price
includes — its included accounts, free demo accounts, opening executions
each month and copy-trading followers — for good, with nothing to pay.
Nothing beyond that is billed on a code: connecting more accounts, opening
past the month's executions, more followers, or always-on where the plan
sells it separately is refused (
402 QUOTA_EXCEEDEDor402 FEATURE_NOT_IN_PLAN), saying the included allowance is reached. Closing positions and cancelling orders are always allowed. To go beyond it, subscribe: get in touch and we move the workspace onto a paid plan. - A login that worked and is then refused is tried again for you. Brokers also refuse logins during maintenance and outages, so an account that had connected before is tried again with its stored password after 15 minutes, an hour and four hours before you are asked to change anything. Meanwhile the account says when the next try is, and when other accounts at the same broker were refused at the same time. A login refused the first time it is tried is not retried. The account's detail no longer shows the broker's network address.
- When a trial ends without a plan, its accounts go offline. They are
stopped at once rather than after their idle time, and bringing an account
online with no plan is refused with
402 QUOTA_EXCEEDED, as connecting one already was. Choose a plan in Billing and they come back online; closing positions and cancelling orders are always allowed.
2026-11-02
-
Multi-account orders:
rejectednow means the broker said no. An account whose order never reached the broker (it was not ready or not reachable when the orders went out, trading was switched off, the plan's allowance had run out or a payment was overdue, the broker had no price, or the send provably failed) is nowskipped, withstateDetailsaying why.rejectedis only a refusal from the broker. Leg states. -
Multi-account orders: unresolved accounts follow their order. An account left
unresolvedmoves tofilled,rejectedorskippedonce its order is confirmed with the broker (by our checks or byPOST /v1/accounts/{id}/reconcile), and the order'ssummaryandstateDetailfollow.skippedthere means the broker has no record of the order. A new webhook event,wave.updated, carries the order and its accounts each time this happens after it settled; subscribe to it on Webhooks. -
Close everything a multi-account order opened.
POST /v1/execution-waves/{id}/closecloses the position each filled account opened, every account at once, and reports each account:closed,not_found,rejected,unresolvedorskipped. It needs anIdempotency-Keyand thetrading:reducescope;accountIdscloses only some accounts. Also as the MCP toolclose_multi_account_order. Closing what it opened. -
Retry the accounts a multi-account order did not reach.
POST /v1/execution-waves/{id}/retryplaces a new multi-account order for theskippedaccounts (addrejectedwithinclude), with the same market, side, per-account volumes, stops and comment. The two are linked byretryOfandretriedBy. New error codesWAVE_NOT_ENDEDandNOTHING_TO_RETRY. Retrying. -
Partial fills in multi-account orders. Each account now shows
filledVolumeandpartiallyFilled, andsummary.partiallyFilledcounts the filled accounts that filled only in part. A partly filled account is stillfilled. -
More error codes documented. Errors now lists the codes you can meet when signing in to the console (a wrong email or password, a wrong or reused two-factor code, a pause after too many codes, suspended access, closed sign-ups), when confirming your email address, when connecting or disconnecting an app such as Claude, and on support tickets. It also lists
CHECKOUT_BUSYandPAYMENT_CONFIRMING(a payment already being set up, or already paid and being confirmed: don't pay twice) and the MCP tools'INSTRUMENT_NOT_MAPPED. Accounts now lists everyproblem.codewith what to do about it. No API change. -
Easier to find your way around the docs. The API reference sidebar now lists every section, including Instruments, Market data, Copy trading, Alerts, Webhooks and Events. Links to the market-data reference pages are fixed. The guides index has cards for the read-only connector and the Claude plugin, whose skill-upload steps now match Claude's current menus. Code samples use server names from several brokers. No API change.
2026-11-01
- New guides. Quotes and recent candles covers live quotes by REST and up to 1,000 recent bars from the account's broker, and what is not offered (no stream, no tick history, no deep archive). n8n without an EA shows the HTTP Request templates and how to keep an n8n retry from placing a second order. Native MCP versus hosted MCP compares the terminal's own MCP with the hosted server. No API change.
- Updated guides. Security has a table of what each credential can do. Linux and macOS maps what works from a Mac or Linux machine, including quotes and candles. Migrate from MetaApi now describes quotes and recent candles, Webhooks links each endpoint's reference page, and the API reference opens with a list of every endpoint. No API change.
2026-10-29
-
Unread support replies. The console's Support item now shows a count when a ticket has a staff reply you have not opened yet — emailed or not — and your ticket list bolds and dots those tickets. It is tracked per member, so it follows you across devices, and clears the moment you open the ticket. No API change.
-
Support replies are formatted. Our answers to a support ticket now show headings, lists, links and code in the console's Support page and in the email, which comes from "fxapis support" with the ticket's reference in the subject (for example
[#4DE4690E]), a "View this conversation" button back to the ticket, and replies to it going to [email protected]. The reference also shows on the ticket's page. No API change. -
Price history is available now.
GET /v1/accounts/{id}/candlesand the MCPget_price_historytool (on/mcpand/mcp/insights) no longer wait on a maintenance window — every account's terminal now supports it. An account whose terminal has not been updated yet, which should be rare, still answers501 CAPABILITY_UNAVAILABLE. No API change. -
An account that cannot reconnect says what to do. When an account's terminal loses its connection and cannot get it back, the account reaches a state that says what to do:
- a login the broker refuses again after it had worked becomes
invalid_credentials(problemLOGIN_REFUSED), with a detail saying what to check — the trading (not investor) password, and the server the login was opened on; brokers also delete demo accounts after a while. It is not retried until you enter the password again; - a terminal that stopped and could not reconnect goes
offlinewith the reason. Always-on accounts are restarted automatically, waiting a little longer each time if the terminal keeps stopping before it is ready; other accounts come back at their next order or when you bring them online; - a login that has never connected and whose server never answered goes to
error(problemCONNECTION_FAILED), naming the broker's other servers to switch to. It is not retried on its own; bring it online to try again.
Each of these shows in the console's alerts with the same detail. No API change.
- a login the broker refuses again after it had worked becomes
2026-10-28
- A webhook endpoint can't point at fxapis itself.
POST /v1/webhooksandPATCH /v1/webhooks/{id}refuse a URL on fxapis.com or any of its subdomains (400 INVALID_REQUEST), with a message saying what to enter instead — for n8n, the Production URL of your Webhook node. Events sent there could only fail.
2026-10-27
filledPricewaits for the broker's price. Some brokers report no price when a market order fills. The order'sfilledPriceis thennulluntil the real price is known, and is filled in from the broker's deal or from the position the order opened, usually within a few minutes.- MCP servers ask for sign-in first.
https://api.fxapis.com/mcpand/mcp/insightsnow ask you to sign in before anything else, so Claude shows Sign in now when you add fxapis as a custom connector, and the first sign-in asks for read access only. Connections you already have, and agents that use an API key, are unaffected. Clients that listed the tools without signing in now get a sign-in prompt (401) first. Steps: MCP server. - Paying from a phone. The checkout and billing's "Update card and pay" were reworked for phones and tablets: the Pay button stays pinned in reach, fits the screen and has the terms right under it; your bank's 3-D Secure check fills only the visible part of the screen (its own buttons are no longer hidden under the browser bar) and has a "Cancel / try again" way out; a yearly price reads "$90/year", not per month; on a trial, billing starts with a "Pay for" button for the plan you are trying (e.g. "Pay for Production — $99/month"), and the console banner's "Keep Production" opens its checkout; invoices show as a list on phones with the amount and status in view; fields no longer zoom on iPhone, and buttons are at least 44 px tall. No API change.
2026-10-26
- Docs in Spanish. The getting-started path and the reference guides are
now also in Spanish, under
/es: the overview, quickstart, SDKs, authentication, accounts, trading, instruments, errors and security, and the guides to connecting accounts, broker compatibility, Linux and macOS, idempotent orders, TradingView alerts, the MCP server, the read-only connector and the Claude plugin. Each page has a language switch, and pages not yet translated show the English text. The API reference and this changelog stay in English. A Spanish index for language models is at/es/llms.txt. No API change. - Broker compatibility page. A new guide, Broker compatibility, says what fxapis works with (any MT5 broker or prop firm, demo or live), what you need to connect, how the server search works, and what varies by broker. Linked from the console's connect form. No API change.
- A free trial of the plan you pick. Every plan card on the pricing page
starts a 14-day free trial of that plan: its features and limits (accounts,
executions, webhooks and event history, copy trading), demo accounts only,
no card. Signing up without picking one tries Production; Enterprise is
not trialled. The console banner and the reminder emails name the plan;
paying for it keeps it and lets live accounts connect, and a trial that
ends unpaid leaves no plan. Trials already running finish as they are.
GET /v1/billing/usagenames it (planName, e.g. "Production trial");planstaystrial. No other API change. Demo accounts on a trial of a plan are capped at 5, whatever the plan's own allowance: Personal's trial is unaffected (2), Production's and Business's are now 5 instead of 7 and 260. Trials already running are held to the same cap from today; paying for the plan still unlocks its full allowance. - No free plans. Free and Personal Demo are no longer offered: the free thing is the 14-day trial a new workspace gets. A trial that ends without a plan now leaves the workspace with no plan (closing positions and cancelling orders always work), not on Free. Workspaces already on Free keep it for 30 days after we email them the date, with a console banner saying when it ends. No API change.
- Connect an account from the console. Owners and admins can connect an
MT5 account on the Accounts page (Connect an account): pick the broker
server from a search, enter the login and trading password, an optional
label and the mode. No API key is needed. It is the same
POST /v1/accounts, with the same plan limits and errors; the account is brought online and its page shows it connecting. No API change. - Price history (candles).
GET /v1/accounts/{id}/candlesreturns open, high, low and close bars with tick volume and spread for one symbol or instrument from the account's own broker: timeframes M1 to MN1, up to 1,000 bars, times in UTC. The MCP servers (/mcpand the read-only/mcp/insights) gainget_price_history, so Claude and ChatGPT can analyse recent price action, for example XAUUSD on H1. Until the maintenance of 2026-10-29 it answered501 CAPABILITY_UNAVAILABLE; it is available now (see 2026-10-29).
2026-10-25
- Personal and Personal Demo. Two plans for trading with Claude and
ChatGPT on your own MT5 account: Personal ($9 a month or $90 a year: one
live and one demo account, 1,000 opening executions a month, always-on +$12)
and Personal Demo (free: one demo account, 200 a month). One per person,
owner only. New error code
PERSONAL_PLAN_USED(409). - Connector calls keep a terminal up. On every plan, a call from Claude, ChatGPT or another MCP client that reads an account (or the workspace, while the account's terminal runs) now counts as use, like an order. A warm-on-demand terminal stays up while an assistant is reading it, rather than stopping after 15 minutes with no orders. No API change.
- Clearer quota message. On plans that do not bill overage,
QUOTA_EXCEEDEDnow says opening executions are refused until the 1st (UTC). The code is unchanged. - Every marketing page as Markdown. fxapis.com pages are now also served as
Markdown at the page's URL followed by
.md(/index.mdfor the home page), and to any client that asks forAccept: text/markdown. The docs already did this (.mdx). No API change. - MCP server card. The hosted MCP server describes itself at
https://api.fxapis.com/mcp/server-cardand/.well-known/mcp/server-cards.json(SEP-2127). No API change.
2026-10-23
- New error code
NO_PRICE(422) for orders the broker cannot price. When the account's broker has no current price for the symbol (its market is closed, or this broker does not offer it), the order is now answered422 NO_PRICEinstead of503 SEND_FAILED. Nothing was sent, as before.SEND_FAILEDmeant "retry now", which could not help here. Retry once the symbol is quoting; the sameIdempotency-Keymay be reused. The SDKs no longer retry these on their own. Copy trading records them asmarket_closed. - Support from the console. A new Support page in the console lets anyone signed in to a workspace open a ticket and follow the conversation. We answer there and by email. If a card payment fails at checkout or when updating a card, the message links to it. No API change.
2026-10-22
- A server name MetaTrader cannot find is reported as such. The account
goes to
errorwithproblem.codeSERVER_NOT_FOUND, and the console's alert bell says "The broker server could not be found", naming the server. Check the exact server name in the broker's welcome email or MetaTrader's File → Login dialog, then update the account. We stop its terminal until you do, and an always-on account is not retried meanwhile. No API change. - More broker servers in the server search. About 820 MT5 servers of widely used brokers and prop firms (IC Markets, Pepperstone, Exness, XM, HFM, Vantage, VT Markets, Bybit, FTMO, The5ers, Deriv and more) are now offered as you type, by their exact names.
2026-10-20
- Always-on accounts come back by themselves. If an always-on account's terminal stops — after maintenance, a crash or a start that failed — it is brought back online within minutes, with no call from you. A refused login, a second factor, a certificate or trading disabled at the broker still waits for you: retrying those is how a broker locks an account.
- When the problem is ours, accounts say so. If accounts cannot come
online because of a problem on our side, an account on its way online
carries
problem.codePLATFORM_ISSUEwith no actions, and a failedPOST /v1/accounts/{id}/warmsays the same: your login is fine and retrying will not help. status.fxapis.com has updates. - An account coming online says
starting. A new account you bring online now showsstartinginstead of stayingcreated, and if its terminal stops before it is ready it showsofflinewith the reason. - The status page's Trading engine reflects whether accounts can come online, not only whether our servers are running.
- New
billing:readscope. Reading the subscription, invoices, usage charges, agreement, standing and daily usage now needsbilling:read. Keys made before 21 October 2026 that holdaccounts:readkeep reading them. See Authentication. - Checkout and coupon limits. Starting a checkout is limited to 5 per
workspace and 10 per owner's email a day (
429 CHECKOUT_LIMIT), and a coupon is not redeemed while a card payment for a plan is being set up (409 CHECKOUT_PENDING). - Copy trading (coming soon): resetting a subscription that
was paused when it stopped returns it to
paused, and thecopy.subscription_stoppedevent lists every reason a subscription can stop.
2026-10-17
- Card payments show up straight away, even if you close the checkout. Opening billing or a checkout page now checks your card payment with our payment provider, and we check by ourselves every few minutes while a new plan waits for its first payment. Every renewal that goes through appears in your invoices, with a receipt by email. Console only; no API change.
- Confirm a usage charge with your bank, in the console. If your bank asks you to confirm a month-end usage charge (3-D Secure), you get an email and a notice on every console page, and you confirm it on Billing — your bank's check opens over the page, and nothing is charged until you confirm.
- Pay with another card when a renewal fails. If your card is declined at renewal, your plan stays on while we retry it, and Billing now shows Update card and pay: enter another card on the page (your bank's check, if any, opens over it) and it pays for your plan from today and renews it from then on. We cancel the renewal that failed, and if the old card is still charged for it, that charge is refunded automatically. The email about the failed payment and a notice in the console point you there.
- Your trial, on every console page. While your trial runs, a banner shows the days left and when it ends, with Choose a plan (members who are not the owner are asked to ask the owner). You can hide it for the rest of the day, except in the last three days. We also email you a week, three days and a day before the trial ends, as well as when it has ended.
- What an ended trial or plan means, said plainly. Once a trial ends, every console page says so: opening new trades is paused until a plan is chosen, open positions can still be closed and orders cancelled, and your accounts, keys, history and settings are kept — with Start your membership. A paid plan that ended says the same with Choose a plan. These notices can be hidden for a day at a time.
- Always-on accounts follow the plan. When a trial ends, or a plan ends or
changes to one without always-on accounts, those accounts are switched to
warm_on_demand: they connect when an order needs them and go offline when idle. We tell you by email (the trial-ended email lists them) and in the console. A copy-trading strategy's master is switched too, and goes offline when idle like any account, so its strategy copies nothing until a plan with always-on accounts and copy trading is chosen and the account is switched back toalways_on. Each switch is listed in the account's events (GET /v1/accounts/{id}/events) as "Connection mode changed". - Card payments: Visa and Mastercard. The checkout no longer lists Amex, which our card provider does not take. Plans are paid by card for now.
- Starter and Scale are no longer sold. They were replaced by Production
and Business, and checkout now refuses them by name too:
POST /v1/billing/checkoutanswersPLAN_NOT_PURCHASABLEfor them, as a new purchase, a change of plan or a payment for the plan you are on. A workspace already on Starter or Scale keeps it, and its card keeps renewing it, until it changes to a plan fromGET /v1/plans. - Unbilled usage grows with what you've paid. On a per-account plan,
usage beyond the plan's price — extra accounts, always-on accounts and
extra followers — is billed after the month. How much of it a workspace can
run at once is the plan's price a month ($99 on Production), plus what it
has paid in renewals and usage charges in the last 90 days, so it grows as
payments go through. Connecting, reconnecting or switching an account to
always_on, or subscribing, resuming or resetting a copy-trading follower, past it answers402 CREDIT_LIMITwith the limit in plain words; nothing you already run is changed. Changing to a plan that would leave you above its limit answers409 REDUCE_USAGE_FIRST, saying what to switch off or disconnect first; if you add usage between starting the change and paying for it, always-on accounts are switched towarm_on_demanduntil you are within the new limit, and we email you which.GET /v1/plansshows each plan'spricing.creditLimit. - An unpaid usage charge pauses opening, never closing. If a month's usage
charge still can't be collected after a week of daily retries (or isn't
confirmed with your bank within a month), opening orders, multi-account
orders, connecting new accounts and switching to
always_onanswer402 PAYMENT_OVERDUEuntil it's paid. Closing positions, cancelling orders and moving stops always work, a disconnected account can still be reconnected to close what it holds, and your plan, accounts and history are kept. We email you, every console page says so, and Billing has Try the card again (up to 3 times an hour); opening resumes as soon as the charge is paid.
2026-10-16
- Managed copy trading. Mark an always-on account as a strategy and subscribe followers in the same workspace: fxapis copies opens, closes, partial closes and stop moves, server-side, about every second. Five sizing modes, reversal, symbol filters and mapping, lateness and price limits, risk limits that stop a subscription (and can close its positions), a drift check, and a log of every copy with its reason.
/v1/copy/strategies,/v1/copy/subscriptions,/v1/copy/executions; in both SDKs; and Copy trading in the console. Hedging accounts only.- Copying is coming soon. Until it starts, making a strategy, subscribing, resuming and reset answer
503 COPY_TRADING_PAUSED; reading, settings, pausing and deleting work, nothing is copied and no follower is billed.GET /v1/copy/statussays whether copy trading is paused. - Webhooks:
copy.executed,copy.skipped,copy.failed,copy.subscription_stopped,copy.drift_corrected,copy.master_disconnected. - Plans: on Trial (3 followers), Production ($8 a follower a month) and Business (25 included, then $6); Enterprise by agreement. Followers are billed by the day.
- Multi-account orders made by copy trading appear in
GET /v1/execution-waves, labelledCopy: <strategy>. - See Copy trading.
- Copying is coming soon. Until it starts, making a strategy, subscribing, resuming and reset answer
- SDKs. TypeScript SDK 0.3.0 and Python SDK 0.2.0 add the copy trading client.
- Connect Claude and ChatGPT by signing in. The MCP server (
https://api.fxapis.com/mcp) now takes sign-in (OAuth 2.1 with PKCE) as well as API keys.- Add it to claude.ai, Claude Desktop, Claude Code or ChatGPT developer mode, and choose read-only, or trading on the accounts you pick. Trading needs two-factor turned on — your session already proved it at sign-in, so there is no code to enter on the consent screen.
- Everything a connected app changes — opening, closing, stops, cancelling, bringing online and taking offline — is limited to the accounts you pick; it can still read every account. A write on another account answers
403 KEY_LIMIT_EXCEEDED. API keys are unchanged: theiraccountIdslimits only what they open. - Every connected app is listed on the API keys page, and revoked there at once.
tools/listnow answers without a credential. A tool call without one gets401with aWWW-Authenticatechallenge that points at/.well-known/oauth-protected-resource/mcp.- No
/v1endpoint changed: connected apps are managed in the console, so there is no SDK change. - See MCP server.
- MCP tool results are smaller.
- The data comes once, as compact JSON, beside a one-line summary.
- Read tools take
response_format(conciseby default, ordetailed). list_accounts,list_positions,list_account_instruments(now withquery) andlist_multi_account_orderspage withlimitandcursor.- Every list now answers
{ items, next_cursor, total }in place ofaccounts,positions,ordersand so on. - Two new tools answer a whole question at once:
get_account_overviewandget_symbol_snapshot.
- A read-only connector,
https://api.fxapis.com/mcp/insights, for the Claude and ChatGPT directories. See Read-only connector. - A Claude Code plugin and a skill.
/plugin marketplace add FXapis/fxapis-claude-plugins. See Claude plugin and skill. - Account alerts in the console. A bell on every console page counts the accounts that need you (a refused login, two-factor, a certificate, trading disabled, or an error lasting over two minutes), and Notifications lists them with the fix. They close by themselves when the account recovers. In-app only; no API change.
- Live prices and figures on every account. Live prices, fresh figures
and the position ticket from the fill are now available for every online
account (figures refresh every 15 s;
creditandprofitfilled). - Pending orders that trigger move to
filled. A limit or stop order that fills at the broker moves tofilled(orpartially_filled) once its fill deal or its position is seen, withbrokerPositionId, and sends oneorder.filledwebhook withpreviousState: "working".filledPriceandfilledVolumearenullwhen only a netting position is known, until the fill deal arrives. - A member's step-up now lasts two hours, up from ten minutes. Creating an API key asks you to
confirm it's you only when the key can move money or accounts
(
trading:execute,trading:reduceoraccounts:write) — a read-only key, or one that only manages webhooks, is created without one. Re-scoping or re-limiting an existing key asks only when it widens the key to one of those scopes or changes the limits on a key that already has them; narrowing scopes and renaming never ask.
2026-10-15
- Balance, equity and margin. Every account response carries
balance,equity,margin,freeMargin,marginLevel,credit,profitandfiguresObservedAt, as decimal strings, read from the account's terminal while it is online — every 60 seconds at first, every 15 seconds once the account's terminal had its update (now every account — see 2026-10-16).GET /v1/accounts/{id}/figuresanswers them alone;?fresh=trueasks the terminal now. At first,fresh=trueanswered501 CAPABILITY_UNAVAILABLEuntil your account's terminal was updated (now live for every account), and409 ACCOUNT_NOT_READYunless the account isready.creditandprofitwerenulluntil the terminal was updated (now filled for every account).marginLevelisnullwhile no margin is used.marginModenow readsnettingorhedging, in the API and in webhooks (where it is usuallynullfor now).- Webhooks do not carry figures.
- Live prices.
GET /v1/accounts/{id}/quotesanswers up to 20 broker symbols or instruments, from the account's own broker. At first it returned501 CAPABILITY_UNAVAILABLEuntil your account's terminal was updated (now live for every account).- Each quote carries
time,brokerTime,ageMs,marketOpen,stale(only while open and over 60 s old) andtradeMode. A closed market answers its last price. - Calls that reach an account's terminal (live quotes and fresh figures) are
limited to 300 a minute + 50 per account, across every caller; shared and
cached answers are free. Past that:
429 RATE_LIMITEDwithretry-after.
- Each quote carries
- Stop checks use live prices. When a quote was read for the account recently, an order's stops are checked against it: the ask for a buy, the bid for a sell. Otherwise an open position's price, as before. The order never waits for a price.
- The position an order opened. An opening order now carries
brokerPositionId, the ticket to close it by — pending orders that fill later included. It is linked from the broker's positions and deals, usually within a few minutes; once your account's terminal is updated, it is set from the fill itself (now true for every account). Closes and stop changes are unchanged. - SDKs. The TypeScript SDK has
getAccountsByIdFiguresandgetAccountsByIdQuotes. The Python SDK hasclient.accounts.figures(…),client.quotes.get(…)andCapabilityUnavailableError. - MCP. Two new tools:
get_account_figuresandget_quotes. - Admin keys. The workspace owner can make an admin key (
fx_admin_…) in the console. It manages the workspace's API keys and nothing else, so issuing and rotating keys can be automated.- An IP allowlist and an expiry are optional.
- At most five can be active.
- Other
/v1routes answer403 ADMIN_KEY_NOT_ALLOWED; routes outside/v1, including/mcp, answer401 UNAUTHENTICATED. - An owner's admin keys are revoked when the owner is suspended or moved to another role. The keys those admin keys made keep working.
- The owner is emailed whenever one is made or revoked.
- Ordinary keys can no longer call
/v1/api-keys(403 ADMIN_KEY_REQUIRED). This includes keys holdingadmin. Use an admin key instead, or the console, which is unchanged. - Workspace management left the SDKs. The member and invitation endpoints are console-only. The API reference now says so, and they are no longer in the SDKs or the Postman collection.
- TypeScript SDK 0.2.0 removes those methods and moves key management to
fx.admin.keys(list,create,get,update,revoke). It needs an admin key. - Python SDK 0.1.6 adds
client.admin.keys. - Console sessions last seven days and end after a day unused, and are no longer extended by use. Anyone signed in for more than seven days when this shipped signs in again once.
- Confirm it's you before sensitive changes. Making a key or changing its
scopes or limits, inviting, changing roles or removing people, and plan or
payment changes ask for your authenticator code (or password, without
two-factor) if you have not given it in the last ten minutes:
403 STEP_UP_REQUIRED. API keys are not affected. - See and end your sessions, and change your password, under Security in the console. A changed password always signs every other session out.
- Removing or suspending a member revokes the API keys they made, and the
owner is emailed the list. API keys now show who made them (
createdBy). - Demoting an admin to member revokes the API keys they made, audited and
emailed to the owner the same way.
PATCH /v1/members/{id}returnskeysRevoked, andGET /v1/membersshows each person'skeysCreated. - Two-factor belongs to the session. Turning it on or off, or new backup codes, sign out every other session; turning it off needs the current code. Lost your phone? A backup code stands in for the code wherever one is asked for — signing in, confirming it's you, turning two-factor off — once each.
2026-10-14
- Catch up after downtime with the event list.
GET /v1/events?after=<last listed id>returns every event after the last one you read from the list, oldest first, exactly as webhooks deliver them — so a client that was down catches up by itself. Filter bytype,account_id, time, ordelivery_status=failed. Events are kept 7 days on Production, 30 on Business, 90 on Enterprise; reading needshistory:read. See Catch up after downtime. - Replay what an endpoint missed.
POST /v1/webhooks/{id}/replay(or Replay events in the console) sends only the events an endpoint did not receive — given up on, or recorded while it was off.include: "all"re-sends everything in the window. A paused or switched-off endpoint now keeps its waiting deliveries and resumes them when turned back on. - Webhook delivery logs in full, kept 30 days on every plan: each attempt's
request as sent and your endpoint's answer;
GET /v1/webhooks/{id}/deliveries/{deliveryId}. - Kinder retries. Retries are spread out, honour
Retry-After, and410 Goneswitches an endpoint off at once. One slow endpoint no longer delays anyone else's deliveries. - Python SDK. Adds
events.list/iter/getandwebhooks.deliveries/delivery/replay. - API key limits. A key can carry a maximum lot size per order, the symbols
or instruments it may open, the accounts it may open on, and a number of
opening orders per UTC day — enforced on every opening order the key places,
including multi-account orders, TradingView hooks it created and MCP. A
refusal is
403 KEY_LIMIT_EXCEEDED. Closing is never limited. See Limits. - Revoking a key stops what it set up. Its multi-account orders not yet sent are abandoned, and TradingView hooks it created stop trading. A multi-account order counts toward a key's daily limit on the day it was made, once.
- Multi-account orders take an
instrument. Sendinstrument(e.g.XAUUSD) instead ofsymboland each account trades its own broker's symbol for it, shown on each leg aslegs[].symbol. If any account cannot trade it, the order is refused whole with422 INSTRUMENT_UNAVAILABLE. The MCPplace_multi_account_ordertool takesinstrumenttoo, and the Python SDK'swaves.create(instrument=...). See multi-account orders.
2026-10-11
- The SDKs check webhook signatures.
fxapis0.1.4 on npm addsverifyWebhook(), which checks a delivery'sfxapis-signatureheader and returns the event, and a method for every/v1/webhooksendpoint.fxapis0.1.3 on PyPI addsfxapis.webhooks.verify(). See SDKs and verifying the signature. - Webhooks have their own section in the API reference and in the Postman collection.
2026-10-08
- Webhooks. Register an HTTPS endpoint and get a signed
POSTwhen an order fills, is rejected, goes unresolved or is resolved, a pending order is cancelled, a position opens or closes, an account changes state, or a multi-account order finishes. Retried over about 44.6 hours (jittered), with a delivery log, redelivery and secret rotation. An endpoint is switched off only after 20 failures in a row spanning at least 15 minutes, and the workspace owner is emailed. See Webhooks. - Multi-account orders take up to 1,000 accounts in one request, within your plan's limit (Business 1,000, Production 250). It was 500.
- Stops on new orders are checked for direction. A stop loss past its take
profit, or a pending order's stops on the wrong side of its own price, is
refused with
400 INVALID_REQUESTbefore anything is sent; a market order's stops are also checked against a recent market price when there is one. - A partial close that would leave less than the symbol's minimum is refused before anything is sent, instead of leaving a remainder too small to trade.
- Idempotency keys are released after 24 hours. A key reused after its window starts a new order instead of replaying the old one.
- An order's deals are listed for every order, not only for one that was
settled from
unknown:GET /v1/orders/{id}/dealsand each deal'sorderIdnow cover normal fills too. - A body that is not valid JSON answers
400 INVALID_REQUEST, like every other bad request, instead of a framework error code.
2026-10-07
- Broker server search.
GET /v1/brokers/servers?q=finds the exact MT5 server name for a broker as someone types, including brokers no account here has used yet. See Accounts. - Accounts say what is wrong and how to fix it. An account's
problemgives the cause, likely servers (otherServers) and the actions that fix it;GET /v1/accounts/{id}/eventslists what happened to it; andPOST /v1/accounts/{id}/servermoves an account added under the wrong server name, trying the stored password there.
2026-10-06
- New plans. New workspaces start a 14-day trial with demo accounts. The
plans on sale are Production and Business, billed monthly or yearly, and
Enterprise by agreement — see pricing. On a
trial,
402 DEMO_ONLYand402 TRIAL_ACCOUNT_USEDcan answer a connect.
2026-10-05
- Two-factor sign-in for the console, with an authenticator app and backup codes.
2026-10-02
- Instruments. Name a market once with
instrumenton an order, and each account trades its own broker's symbol for it.GET /v1/instrumentslists them;GET /v1/accounts/{id}/instrumentsshows how each maps on an account. See Instruments. - Market hours.
GET /v1/accounts/{id}/sessions: whether a market is open now on an account's broker, and its weekly sessions. - Failures of ours answer 503, not 502 — the codes (
SEND_FAILED,ORDER_UNRESOLVED, …) are unchanged; retry by code, not status. A broker refusal carrying its return code (market closed, no money, a requote) is nowORDER_REJECTED, notORDER_UNRESOLVED. - Order comments fit MT5. Order comments are cut to what MT5 accepts.
2026-10-01
DELETE /v1/accounts/{id}. Remove an account and its history.disconnectstill erases the password and keeps the history.
2026-09-30
- TradingView alerts. A hook URL per strategy turns alerts into MT5 orders. See TradingView.
- A hosted MCP server at
https://api.fxapis.com/mcp, for AI agents on a scoped key. See MCP. /openapi.json. The API description, atapi.fxapis.com/openapi.json.- Plan codes. The workspace owner redeems a plan code under Billing in the console, which puts the workspace on that plan for good, without payment.
2026-09-29
POST /v1/accounts/prepare. Bring up to 200 accounts online in one call, for signals and click-to-trade. See Signals and click-to-trade.- Idle accounts go offline on their own. A
warm_on_demandaccount now goes offline after a quiet period with no orders. GET /v1/workspace. Your workspace's plan, and whether trading is switched off.- API keys are issued as
fx_live_…/fx_test_…. Keys issued asow_…keep working exactly as issued. - New API address. The API is served at
https://api.fxapis.com.