# Tickwire > One API for hosted MetaTrader 4 and 5 terminals, with per-account health checks, idempotent orders, an audit log, webhooks and an MCP server for AI agents. Tickwire runs a real MT4 or MT5 terminal for each trading account and serves it over REST and WebSocket. The same endpoints and fields work for both platforms; the few MT5-only calls return `not_supported_on_mt4` on MT4. Orders take an `Idempotency-Key`, so a retry with the same key never places a second order, and an outcome that can't be confirmed is reported as `unknown`. The MCP server for AI apps such as Claude and ChatGPT is at https://api.tickwire.io/mcp. A free sandbox needs no broker account (https://tickwire.io/docs/sandbox.md). Every docs page below is Markdown. The full text of all of them is at https://tickwire.io/llms-full.txt. The OpenAPI document is at https://tickwire.io/openapi.json. ## Product - [Tickwire](https://tickwire.io/): what Tickwire is, for developers and AI agents - [MT5 API](https://tickwire.io/mt5-api/): the MetaTrader 5 REST and WebSocket API - [MT4 API](https://tickwire.io/mt4-api/): the MetaTrader 4 API, and what MT4 can't do - [AI trading agents](https://tickwire.io/ai-agents/): the MCP server, and connecting Claude or ChatGPT - [MetaTrader API alternative](https://tickwire.io/metatrader-api-alternative/): switching from another MetaTrader API: what stays the same - [Pricing](https://tickwire.io/pricing/): plans in USD, per account per month - [Compare](https://tickwire.io/compare/): hosted MetaTrader API providers, feature by feature - [FAQ](https://tickwire.io/faq/): billing, platforms, brokers and AI agents ## Get started - [Tickwire docs](https://tickwire.io/docs/index.md): Read, stream and trade MetaTrader 4 and 5 accounts over one API, with a health check for each account. - [Quickstart](https://tickwire.io/docs/quickstart.md): Your first call in under two minutes, in the free sandbox. Then connect your broker account and run the same calls. - [Sandbox](https://tickwire.io/docs/sandbox.md): Free simulated MT4 and MT5 accounts. No card, no broker login, no terminal boot. Your first call in under two minutes. - [CLI](https://tickwire.io/docs/cli.md): The tickwire command. Sign in, create a sandbox, list accounts, trade (with a reason) and see the result, forward webhooks to localhost, and tail your request log. - [Python SDK](https://tickwire.io/docs/sdk-python.md): The tickwire Python package. Typed sync and async clients for MT4 and MT5 accounts, with idempotent trading, safe retries, resumable streams and webhook verification. ## Concepts - [Authentication](https://tickwire.io/docs/authentication.md): The header forms Tickwire accepts, token kinds, and how to narrow a token's reach. - [MT4 and MT5](https://tickwire.io/docs/platforms.md): One API for both platforms, and the few things MT4 can't do. - [Health](https://tickwire.io/docs/health.md): How Tickwire decides whether an account is working. - [Idempotency and trade outcomes](https://tickwire.io/docs/idempotency.md): How to retry without placing a second order, and what each order result means. - [Time zones and broker time](https://tickwire.io/docs/time-zones.md): Why broker time isn't UTC, how Tickwire labels it, and how to get day boundaries right. ## Guides - [Build a prop risk tool](https://tickwire.io/docs/guides/prop-risk-tool.md): Watch equity on many accounts, enforce daily and maximum drawdown, and flatten on breach. - [Build a trade copier](https://tickwire.io/docs/guides/copier.md): Copy trades from one account to many, with idempotency keys so a retry never fills twice, and handle the ones that can't be confirmed. - [Build a trading journal](https://tickwire.io/docs/guides/journal.md): Sync closed trades read-only with investor passwords, incrementally and without gaps. - [Build a trading bot](https://tickwire.io/docs/guides/trading-bot.md): Stream prices, place orders, and handle disconnects and ambiguous fills correctly. - [Example projects](https://tickwire.io/docs/guides/examples.md): Starter templates to copy. Quickstarts in Python and TypeScript, webhook receivers, a pre-trade guard and an AI assistant over MCP. Sandbox only, MIT licensed. ## Streaming and events - [Streaming](https://tickwire.io/docs/streaming.md): The per-account WebSocket protocol. Full sync, incremental updates, market data, sequence numbers and resume. - [Webhooks](https://tickwire.io/docs/webhooks.md): Signed event delivery, retries for 72 hours, the delivery log, resend, secret rotation and the event catalog. - [Status feed](https://tickwire.io/docs/status-feed.md): The public status feed behind the status page, the RSS, Atom and JSON incident feeds, email updates, and how to read them. ## Operations - [Errors](https://tickwire.io/docs/errors.md): The error envelope, the codes you'll see, and which ones are safe to retry. - [Rate limits](https://tickwire.io/docs/rate-limits.md): The real limits, what each call costs, the headers you get, and how to back off without making things worse. - [Broker onboarding](https://tickwire.io/docs/broker-onboarding.md): Connect an account on any MT4 or MT5 broker, and what to do when we can't find the server. - [Request logs](https://tickwire.io/docs/request-logs.md): Every API call your keys made in the last 14 days, with redacted bodies for errors, in the dashboard and the API. ## Migrate - [Switching from another provider](https://tickwire.io/docs/switching.md): Move an existing MT4/MT5 API integration to Tickwire by changing the base URL and the key, and what differs. ## Reference - [Pagination](https://tickwire.io/docs/pagination.md): Cursor pagination on the native /v1 lists, and which lists keep their upstream shapes. - [Changelog](https://tickwire.io/docs/changelog.md): Changes to the API and docs, newest first. - [Versioning and deprecation](https://tickwire.io/docs/versioning.md): Dated API versions, what we count as a breaking change, and how long you get before anything goes away. - [API changelog](https://tickwire.io/docs/changelog-api.md): Every API version, breaking change and deprecation, newest first. - [API reference](https://tickwire.io/docs/reference.md): every operation, grouped by API family - [Account REST API (/users/current): Accounts and provisioning](https://tickwire.io/docs/reference/provisioning.md): 20 operations - [Account REST API (/users/current): Account state](https://tickwire.io/docs/reference/account-state.md): 7 operations - [Account REST API (/users/current): Market data](https://tickwire.io/docs/reference/market-data.md): 9 operations - [Account REST API (/users/current): History](https://tickwire.io/docs/reference/history.md): 6 operations - [Account REST API (/users/current): Trading](https://tickwire.io/docs/reference/trading.md): 5 operations - [Account REST API (/users/current): Health, snapshot and audit trail](https://tickwire.io/docs/reference/account-health-audit.md): 3 operations - [Account REST API (/users/current): Tokens and discovery](https://tickwire.io/docs/reference/tokens-discovery.md): 10 operations - [Terminal routes and batch orders: MT5 terminal](https://tickwire.io/docs/reference/mt5-terminal.md): 19 operations - [Terminal routes and batch orders: MT4 terminal](https://tickwire.io/docs/reference/mt4-terminal.md): 19 operations - [Terminal routes and batch orders: Batch orders](https://tickwire.io/docs/reference/batch-orders.md): 2 operations - [Native /v1: Sandbox](https://tickwire.io/docs/reference/sandbox.md): 3 operations - [Native /v1: Accounts](https://tickwire.io/docs/reference/accounts.md): 5 operations - [Native /v1: Webhooks and events](https://tickwire.io/docs/reference/webhooks.md): 18 operations - [Native /v1: Read-only keys](https://tickwire.io/docs/reference/keys.md): 6 operations - [Native /v1: Private servers](https://tickwire.io/docs/reference/private-servers.md): 8 operations - [Native /v1: Dedicated IPs and billing](https://tickwire.io/docs/reference/billing.md): 12 operations - [Native /v1: Identity and other routes](https://tickwire.io/docs/reference/native-other.md): 6 operations - [AI agents: Agent API](https://tickwire.io/docs/reference/agent-api.md): 13 operations - [AI agents: Agent keys and kill switches](https://tickwire.io/docs/reference/agent-admin.md): 9 operations - [AI agents: Pre-trade hooks and holds](https://tickwire.io/docs/reference/pretrade.md): 10 operations - [AI agents: Sign in with Tickwire (OAuth) and connected apps](https://tickwire.io/docs/reference/oauth.md): 9 operations - [Guarded execution: Guarded trades](https://tickwire.io/docs/reference/execution.md): 1 operations - [Models](https://tickwire.io/docs/reference/models.md): every schema ## Optional Error codes, one page each: - [accepted](https://tickwire.io/docs/errors/accepted.md): The same request is still being processed. - [AcceptedError](https://tickwire.io/docs/errors/acceptederror.md): Error name for a request that is still being processed (`/users/current/…` routes only). - [access_denied](https://tickwire.io/docs/errors/access_denied.md): OAuth (Sign in with Tickwire): the user pressed Cancel on the consent page (sent to the app's redirect URI). - [account_conflict](https://tickwire.io/docs/errors/account_conflict.md): Used between Tickwire's own services; the public API does not return it. - [account_deploying](https://tickwire.io/docs/errors/account_deploying.md): The account's terminal is starting. - [account_forbidden](https://tickwire.io/docs/errors/account_forbidden.md): This token is scoped to other accounts. - [account_not_deployed](https://tickwire.io/docs/errors/account_not_deployed.md): The account exists but has no running terminal. - [account_not_found](https://tickwire.io/docs/errors/account_not_found.md): No trading account with this id belongs to you. - [account_unreachable](https://tickwire.io/docs/errors/account_unreachable.md): The account's terminal could not be reached. - [admin_disabled](https://tickwire.io/docs/errors/admin_disabled.md): Status page: the admin API is switched off. - [agent_gateway_misconfigured](https://tickwire.io/docs/errors/agent_gateway_misconfigured.md): The agent API is not available right now. - [agent_key_not_found](https://tickwire.io/docs/errors/agent_key_not_found.md): No agent key with this id exists in your organisation. - [already_member](https://tickwire.io/docs/errors/already_member.md): The person is already a member of the organisation. - [already_subscribed](https://tickwire.io/docs/errors/already_subscribed.md): The organisation already has a subscription. - [api_key_expired](https://tickwire.io/docs/errors/api_key_expired.md): The API token that sent this order has expired. - [api_key_revoked](https://tickwire.io/docs/errors/api_key_revoked.md): The API key or token that sent this order was revoked or deleted. - [api_version_unsupported](https://tickwire.io/docs/errors/api_version_unsupported.md): The API version to pin is older than the oldest supported version. - [ApiError](https://tickwire.io/docs/errors/apierror.md): Error name on the `/users/current/…` routes for a client error that has no more specific name. - [approval_belongs_to_the_hook](https://tickwire.io/docs/errors/approval_belongs_to_the_hook.md): Only the pre-trade hook that placed a hold can approve it. - [authorization_server_unreachable](https://tickwire.io/docs/errors/authorization_server_unreachable.md): The MCP endpoint could not reach the Tickwire sign-in service to check the access token. - [authorization_unavailable](https://tickwire.io/docs/errors/authorization_unavailable.md): The Tickwire sign-in service could not check the access token right now. - [backend_error](https://tickwire.io/docs/errors/backend_error.md): The terminal returned an error for this operation; the MetaTrader code is in `code` or `mt5Code`. - [bad_discount_code](https://tickwire.io/docs/errors/bad_discount_code.md): The discount code is unknown or can't be used here. - [bad_gateway](https://tickwire.io/docs/errors/bad_gateway.md): An upstream service gave an invalid answer. - [bad_path](https://tickwire.io/docs/errors/bad_path.md): The request path is malformed. - [bad_request](https://tickwire.io/docs/errors/bad_request.md): The request is malformed. - [bad_response](https://tickwire.io/docs/errors/bad_response.md): The Tickwire API answered the MCP tool without a JSON body. - [bad_signature](https://tickwire.io/docs/errors/bad_signature.md): A billing webhook's signature did not verify. - [body_too_large](https://tickwire.io/docs/errors/body_too_large.md): The request body exceeds the limit for this endpoint. - [broker_offset_unknown](https://tickwire.io/docs/errors/broker_offset_unknown.md): The broker's UTC offset is not known yet, so UTC times can't be given. - [broker_time_unknown](https://tickwire.io/docs/errors/broker_time_unknown.md): The broker's server time is not known yet. - [busy](https://tickwire.io/docs/errors/busy.md): Used between Tickwire's own services; the public API does not return it. - [canary_not_found](https://tickwire.io/docs/errors/canary_not_found.md): Status page: no webhook-delivery canary has this id. - [candle_unavailable](https://tickwire.io/docs/errors/candle_unavailable.md): No candle is available for this symbol and timeframe. - [checkout_unavailable](https://tickwire.io/docs/errors/checkout_unavailable.md): Payments are not available right now. - [component_not_found](https://tickwire.io/docs/errors/component_not_found.md): Status page: no component with this id. - [conflict](https://tickwire.io/docs/errors/conflict.md): The request conflicts with the current state. - [ConflictError](https://tickwire.io/docs/errors/conflicterror.md): Error name for a conflict (409) on the `/users/current/…` routes. - [connected_app_not_found](https://tickwire.io/docs/errors/connected_app_not_found.md): OAuth (Sign in with Tickwire): no such connected app in this organisation. - [consent_token_invalid](https://tickwire.io/docs/errors/consent_token_invalid.md): OAuth (Sign in with Tickwire): the approval did not come from the consent page this session opened (CSRF protection). - [controlplane_unavailable](https://tickwire.io/docs/errors/controlplane_unavailable.md): We could not check your token or route the request. - [controlplane_unreachable](https://tickwire.io/docs/errors/controlplane_unreachable.md): Used between Tickwire's own services; the public API does not return it. - [credential_error](https://tickwire.io/docs/errors/credential_error.md): Used between Tickwire's own services; the public API does not return it. - [dedicated_ip_refused](https://tickwire.io/docs/errors/dedicated_ip_refused.md): The dedicated-IP change can't be made. - [depth_unavailable](https://tickwire.io/docs/errors/depth_unavailable.md): The terminal has no market depth for this symbol. - [discount_too_large](https://tickwire.io/docs/errors/discount_too_large.md): The discount code gives more off than allowed. - [docs_unavailable](https://tickwire.io/docs/errors/docs_unavailable.md): The MCP docs search could not fetch the Tickwire docs. - [driver_error](https://tickwire.io/docs/errors/driver_error.md): Used between Tickwire's own services; the public API does not return it. - [duplicate](https://tickwire.io/docs/errors/duplicate.md): This already exists. - [egress_in_use](https://tickwire.io/docs/errors/egress_in_use.md): Used between Tickwire's own services; the public API does not return it. - [egress_unavailable](https://tickwire.io/docs/errors/egress_unavailable.md): Used between Tickwire's own services; the public API does not return it. - [email_notifications_unavailable](https://tickwire.io/docs/errors/email_notifications_unavailable.md): Status page: email updates are not available yet. - [email_taken](https://tickwire.io/docs/errors/email_taken.md): An account with this email already exists. - [endpoint_deleted](https://tickwire.io/docs/errors/endpoint_deleted.md): A webhook delivery was abandoned because its endpoint was deleted (the delivery's `error`, not an HTTP status). - [endpoint_disabled](https://tickwire.io/docs/errors/endpoint_disabled.md): A webhook delivery was abandoned because its endpoint is disabled (the delivery's `error`, not an HTTP status). - [event_expired](https://tickwire.io/docs/errors/event_expired.md): A webhook delivery was abandoned because the event is past its retention (the delivery's `error`, not an HTTP status). - [event_ingest_unavailable](https://tickwire.io/docs/errors/event_ingest_unavailable.md): Used between Tickwire's own services; the public API does not return it. - [event_scope_mismatch](https://tickwire.io/docs/errors/event_scope_mismatch.md): Used between Tickwire's own services; the public API does not return it. - [event_type_not_allowed](https://tickwire.io/docs/errors/event_type_not_allowed.md): Used between Tickwire's own services; the public API does not return it. - [events_token_invalid](https://tickwire.io/docs/errors/events_token_invalid.md): Used between Tickwire's own services; the public API does not return it. - [execution_unavailable](https://tickwire.io/docs/errors/execution_unavailable.md): A trade sent over streaming could not reach the execution service, so it was not sent (`stringCode` of a streaming `InternalError`). - [forbidden](https://tickwire.io/docs/errors/forbidden.md): Your credential may not do this. - [ForbiddenError](https://tickwire.io/docs/errors/forbiddenerror.md): Error name for a forbidden request (403) on the `/users/current/…` routes. - [gateway_timeout](https://tickwire.io/docs/errors/gateway_timeout.md): An upstream did not answer in time. - [hold_expired](https://tickwire.io/docs/errors/hold_expired.md): A held order expired before a decision; it was not and will not be executed. - [hold_not_found](https://tickwire.io/docs/errors/hold_not_found.md): No such hold. - [hold_rejected](https://tickwire.io/docs/errors/hold_rejected.md): A held order was rejected by the pre-trade hook or the owner; nothing was sent. - [hook_denied](https://tickwire.io/docs/errors/hook_denied.md): The account owner's pre-trade hook denied this order; nothing was sent. - [hook_exists](https://tickwire.io/docs/errors/hook_exists.md): This account or agent key already has a pre-trade hook. - [hook_not_found](https://tickwire.io/docs/errors/hook_not_found.md): No such pre-trade hook. - [hook_not_holding](https://tickwire.io/docs/errors/hook_not_holding.md): This hook did not place this hold. - [hook_unavailable](https://tickwire.io/docs/errors/hook_unavailable.md): The pre-trade hook didn't give a valid answer. The hook fails closed, so the order wasn't sent. - [host_retired](https://tickwire.io/docs/errors/host_retired.md): Used between Tickwire's own services; the public API does not return it. - [http_error](https://tickwire.io/docs/errors/http_error.md): An HTTP error with no more specific code. - [idempotency_conflict](https://tickwire.io/docs/errors/idempotency_conflict.md): This Idempotency-Key was already used with a different request body. - [idempotency_in_flight](https://tickwire.io/docs/errors/idempotency_in_flight.md): A request with this Idempotency-Key is still running. This request was not sent (`sent: false`); the earlier one may still execute. - [idempotency_key_required](https://tickwire.io/docs/errors/idempotency_key_required.md): Every trade needs an Idempotency-Key. - [idempotency_key_reused](https://tickwire.io/docs/errors/idempotency_key_reused.md): This Idempotency-Key was used for a different order, account or batch; this request was not sent. - [idempotency_unavailable](https://tickwire.io/docs/errors/idempotency_unavailable.md): Idempotency can't be guaranteed right now, so nothing was sent. - [incident_closed](https://tickwire.io/docs/errors/incident_closed.md): Status page: the incident or maintenance is already resolved or completed. - [incident_not_closed](https://tickwire.io/docs/errors/incident_not_closed.md): Status page: a postmortem can only be written once the incident is resolved. - [incident_not_found](https://tickwire.io/docs/errors/incident_not_found.md): Status page: no incident with this id. - [insufficient_balance](https://tickwire.io/docs/errors/insufficient_balance.md): The wallet balance does not cover this purchase. - [interaction_required](https://tickwire.io/docs/errors/interaction_required.md): OAuth (Sign in with Tickwire): the user has to approve the app on the consent page (shown on the sign-in error page). - [internal_error](https://tickwire.io/docs/errors/internal_error.md): An unexpected failure inside Tickwire. - [InternalError](https://tickwire.io/docs/errors/internalerror.md): Error name for a server-side failure on the `/users/current/…` routes. - [invalid](https://tickwire.io/docs/errors/invalid.md): The subscription frame on the terminal WebSocket (`/{mt4|mt5}/{id}/ws`) is invalid. - [invalid_actor](https://tickwire.io/docs/errors/invalid_actor.md): X-Actor names a server-assigned identity that is not the calling credential's own. Nothing was changed. - [invalid_agent_key](https://tickwire.io/docs/errors/invalid_agent_key.md): The agent key is missing, invalid or revoked. - [invalid_api_version](https://tickwire.io/docs/errors/invalid_api_version.md): The Tickwire-Version header, or the apiVersion to pin, names no published API version. - [invalid_batch](https://tickwire.io/docs/errors/invalid_batch.md): The batch request is invalid; nothing was sent. - [invalid_client](https://tickwire.io/docs/errors/invalid_client.md): OAuth (Sign in with Tickwire): the client could not be identified or authenticated. - [invalid_client_metadata](https://tickwire.io/docs/errors/invalid_client_metadata.md): OAuth (Sign in with Tickwire): the dynamic client registration request is not acceptable. - [invalid_credentials](https://tickwire.io/docs/errors/invalid_credentials.md): Email or password is wrong. - [invalid_cursor](https://tickwire.io/docs/errors/invalid_cursor.md): The pagination cursor is not one this list issued. - [invalid_egress_ip](https://tickwire.io/docs/errors/invalid_egress_ip.md): Used between Tickwire's own services; the public API does not return it. - [invalid_email](https://tickwire.io/docs/errors/invalid_email.md): The email address is not valid. - [invalid_grant](https://tickwire.io/docs/errors/invalid_grant.md): OAuth (Sign in with Tickwire): the authorization code, refresh token or access token is not valid for this request. - [invalid_hook](https://tickwire.io/docs/errors/invalid_hook.md): The pre-trade hook definition is invalid. - [invalid_hook_url](https://tickwire.io/docs/errors/invalid_hook_url.md): The pre-trade hook URL is not allowed. - [invalid_idempotency_key](https://tickwire.io/docs/errors/invalid_idempotency_key.md): The Idempotency-Key (or `transaction-id` header) is longer than 255 characters or holds non-printable characters. Nothing was changed. - [invalid_incident_status](https://tickwire.io/docs/errors/invalid_incident_status.md): Status page: that status doesn't belong to this kind of event. - [invalid_link](https://tickwire.io/docs/errors/invalid_link.md): The sign-in or invite link is invalid or expired. - [invalid_maintenance](https://tickwire.io/docs/errors/invalid_maintenance.md): Status page: the maintenance window is invalid. - [invalid_message](https://tickwire.io/docs/errors/invalid_message.md): A WebSocket frame is not a valid message (sent as an error frame, not an HTTP status). - [invalid_order](https://tickwire.io/docs/errors/invalid_order.md): The order is invalid; nothing was sent. - [invalid_parameter](https://tickwire.io/docs/errors/invalid_parameter.md): A query or path parameter is invalid; `details` names it. - [invalid_redirect_uri](https://tickwire.io/docs/errors/invalid_redirect_uri.md): OAuth (Sign in with Tickwire): a registered redirect URI is not allowed. - [invalid_request](https://tickwire.io/docs/errors/invalid_request.md): The request body is invalid. - [invalid_scope](https://tickwire.io/docs/errors/invalid_scope.md): OAuth (Sign in with Tickwire): the requested scope is wider than what was granted. - [invalid_signature](https://tickwire.io/docs/errors/invalid_signature.md): A hold release was not signed with the holding hook's secret. - [invalid_subscription](https://tickwire.io/docs/errors/invalid_subscription.md): A market-data subscription is invalid (sent as an error frame). - [invalid_target](https://tickwire.io/docs/errors/invalid_target.md): OAuth (Sign in with Tickwire): the resource parameter is not the Tickwire MCP server. - [invalid_token](https://tickwire.io/docs/errors/invalid_token.md): The token is invalid, expired or revoked. - [invalid_url](https://tickwire.io/docs/errors/invalid_url.md): The webhook URL is not allowed. The message is the same whatever rule refused it. - [ip_allocation_refused](https://tickwire.io/docs/errors/ip_allocation_refused.md): The dedicated-IP operation can't be done in the IP's current state. - [ip_not_allowed](https://tickwire.io/docs/errors/ip_not_allowed.md): The token is valid, but it has an IP allowlist and this request came from an address outside it. The message never shows the allowlist. - [ip_previously_owned](https://tickwire.io/docs/errors/ip_previously_owned.md): This IP has had an owner before; a dedicated IP is never reassigned. - [keyring_missing](https://tickwire.io/docs/errors/keyring_missing.md): Used between Tickwire's own services; the public API does not return it. - [kill_switch_engaged](https://tickwire.io/docs/errors/kill_switch_engaged.md): The kill switch for this account or agent key is engaged; nothing was sent. - [last_owner](https://tickwire.io/docs/errors/last_owner.md): An organisation needs at least one owner. - [length_required](https://tickwire.io/docs/errors/length_required.md): Used between Tickwire's own services; the public API does not return it. - [market_depth_unavailable](https://tickwire.io/docs/errors/market_depth_unavailable.md): The terminal gave no market depth for the symbol (stream error frame). - [method_access](https://tickwire.io/docs/errors/method_access.md): This token may not call this method. - [method_not_allowed](https://tickwire.io/docs/errors/method_not_allowed.md): This HTTP method is not supported on this path. - [missing_agent_key](https://tickwire.io/docs/errors/missing_agent_key.md): The MCP endpoint needs a Tickwire agent key, and none was sent. - [missing_credentials](https://tickwire.io/docs/errors/missing_credentials.md): The MCP endpoint was called without a sign-in or an agent key. - [missing_header](https://tickwire.io/docs/errors/missing_header.md): A required header is missing. - [missing_token](https://tickwire.io/docs/errors/missing_token.md): No token was sent. - [MRPC](https://tickwire.io/docs/errors/mrpc.md): Terminal route error (`/{mt4|mt5}/{id}/…`): the terminal processed the request but the operation failed. - [MRPC_NOT_CONNECTED](https://tickwire.io/docs/errors/mrpc_not_connected.md): Terminal route error (`/{mt4|mt5}/{id}/…`): the terminal has no broker connection right now. - [MRPC_VALIDATION](https://tickwire.io/docs/errors/mrpc_validation.md): Terminal route error (`/{mt4|mt5}/{id}/…`): a parameter is missing or invalid. - [no_org](https://tickwire.io/docs/errors/no_org.md): No organisation is selected. - [no_subscription](https://tickwire.io/docs/errors/no_subscription.md): There is no subscription to manage yet. - [not_connected](https://tickwire.io/docs/errors/not_connected.md): The terminal has no broker connection right now. - [not_found](https://tickwire.io/docs/errors/not_found.md): No such endpoint or resource. - [not_implemented](https://tickwire.io/docs/errors/not_implemented.md): This is not implemented here. - [not_revealable](https://tickwire.io/docs/errors/not_revealable.md): Key values are shown only once, at creation (or rotation), and stored hashed. - [not_subscribed](https://tickwire.io/docs/errors/not_subscribed.md): Unsubscribe without a subscription (stream error frame). - [not_supported](https://tickwire.io/docs/errors/not_supported.md): This terminal backend does not provide the requested stream (stream error frame). - [not_supported_on_mt4](https://tickwire.io/docs/errors/not_supported_on_mt4.md): MetaTrader 4 doesn't support this. - [not_supported_on_mt5](https://tickwire.io/docs/errors/not_supported_on_mt5.md): MetaTrader 5 can't do this. - [NotAuthenticatedError](https://tickwire.io/docs/errors/notauthenticatederror.md): Error name in a streaming error: the account's terminal is not connected, or the account is not subscribed on this connection. - [NotConnectedError](https://tickwire.io/docs/errors/notconnectederror.md): Error name on the `/users/current/…` routes: the terminal is not connected to the broker. - [NotFoundError](https://tickwire.io/docs/errors/notfounderror.md): Error name for a missing resource on the `/users/current/…` routes. - [NotSynchronizedError](https://tickwire.io/docs/errors/notsynchronizederror.md): Error name on the `/users/current/…` routes: the terminal is not synchronized enough to answer (for example the broker time is not known yet). - [oauth_not_configured](https://tickwire.io/docs/errors/oauth_not_configured.md): OAuth (Sign in with Tickwire): sign-in for AI apps is not enabled on this deployment. - [order_not_found](https://tickwire.io/docs/errors/order_not_found.md): No pending order with this id. - [ordering_not_configured](https://tickwire.io/docs/errors/ordering_not_configured.md): Used between Tickwire's own services; the public API does not return it. - [outcome_unknown](https://tickwire.io/docs/errors/outcome_unknown.md): A trade sent over streaming got no answer from the execution service; it may have executed (`stringCode` of a streaming `InternalError`). - [payload_too_large](https://tickwire.io/docs/errors/payload_too_large.md): The request body is too large. - [payment_provider_error](https://tickwire.io/docs/errors/payment_provider_error.md): The payment provider failed the call. - [PaymentRequiredError](https://tickwire.io/docs/errors/paymentrequirederror.md): Error name for a request that needs payment (402) on the `/users/current/…` routes. - [ports_exhausted](https://tickwire.io/docs/errors/ports_exhausted.md): Used between Tickwire's own services; the public API does not return it. - [position_not_found](https://tickwire.io/docs/errors/position_not_found.md): No open position with this id. - [postmortem_not_found](https://tickwire.io/docs/errors/postmortem_not_found.md): Status page: this incident has no postmortem. - [pretrade_unavailable](https://tickwire.io/docs/errors/pretrade_unavailable.md): The pre-trade check (pre-trade hooks) could not be completed, so the order was not sent. - [rate_limited](https://tickwire.io/docs/errors/rate_limited.md): Too many requests. - [read_only_key](https://tickwire.io/docs/errors/read_only_key.md): This key is read-only; it can't trade. - [read_only_token](https://tickwire.io/docs/errors/read_only_token.md): This token is read-only. - [reason_required](https://tickwire.io/docs/errors/reason_required.md): Every trade needs a reason (X-Reason). - [reason_too_long](https://tickwire.io/docs/errors/reason_too_long.md): The reason is too long. - [request_belongs_to_someone_else](https://tickwire.io/docs/errors/request_belongs_to_someone_else.md): OAuth (Sign in with Tickwire): this sign-in request was opened by another signed-in user first. - [request_body_timeout](https://tickwire.io/docs/errors/request_body_timeout.md): The request body did not arrive in time; nothing was forwarded. - [request_expired](https://tickwire.io/docs/errors/request_expired.md): OAuth (Sign in with Tickwire): the sign-in request is older than 10 minutes. - [request_header_fields_too_large](https://tickwire.io/docs/errors/request_header_fields_too_large.md): Used between Tickwire's own services; the public API does not return it. - [request_log_not_found](https://tickwire.io/docs/errors/request_log_not_found.md): There is no request log entry with this id in your organisation. - [request_not_found](https://tickwire.io/docs/errors/request_not_found.md): No trade was recorded under this Idempotency-Key. - [request_not_supported](https://tickwire.io/docs/errors/request_not_supported.md): OAuth (Sign in with Tickwire): request objects (request, request_uri) are not supported (shown on the sign-in error page). - [request_used](https://tickwire.io/docs/errors/request_used.md): OAuth (Sign in with Tickwire): the sign-in request was already answered. - [resend_window_expired](https://tickwire.io/docs/errors/resend_window_expired.md): The webhook event is too old to resend. - [sandbox_account_limit](https://tickwire.io/docs/errors/sandbox_account_limit.md): Your sandbox already holds its maximum number of accounts (5 by default). - [sandbox_key_limit](https://tickwire.io/docs/errors/sandbox_key_limit.md): Your sandbox already holds its maximum number of active credentials of this kind (5 sandbox keys; 20 each of API tokens, read-only keys and agent keys by default). - [sandbox_key_required](https://tickwire.io/docs/errors/sandbox_key_required.md): Server Tickwire-Sandbox is only for sandbox keys; sandbox and live never mix. - [sandbox_key_restricted](https://tickwire.io/docs/errors/sandbox_key_restricted.md): This sandbox key came from anonymous sign-up: it may manage its sandbox accounts, trade, stream and read, nothing else. - [sandbox_server_required](https://tickwire.io/docs/errors/sandbox_server_required.md): A sandbox key can only create simulated accounts. - [server_limit_reached](https://tickwire.io/docs/errors/server_limit_reached.md): The maximum number of private servers is reached. - [service_unavailable](https://tickwire.io/docs/errors/service_unavailable.md): The service is not available right now. - [sign_in_required](https://tickwire.io/docs/errors/sign_in_required.md): This invite link only works once you are signed in with the invited email address. - [slots_full](https://tickwire.io/docs/errors/slots_full.md): Every purchased slot is taken. - [symbol_not_found](https://tickwire.io/docs/errors/symbol_not_found.md): The terminal doesn't know this symbol. - [temporarily_unavailable](https://tickwire.io/docs/errors/temporarily_unavailable.md): The service could not answer just now; nothing was changed. - [terminal_event_value_invalid](https://tickwire.io/docs/errors/terminal_event_value_invalid.md): Used between Tickwire's own services; the public API does not return it. - [terminal_events_disabled](https://tickwire.io/docs/errors/terminal_events_disabled.md): Used between Tickwire's own services; the public API does not return it. - [terminal_timeout](https://tickwire.io/docs/errors/terminal_timeout.md): The terminal did not answer a read in time. - [TICKWIRE_HELD](https://tickwire.io/docs/errors/tickwire_held.md): A pre-trade hook is holding this order; nothing has been sent yet (`stringCode` of a streaming `TradeError`). - [tickwire_no_reply](https://tickwire.io/docs/errors/tickwire_no_reply.md): The MCP tool sent the request but got no reply. If it was a trade, it may have executed. - [tickwire_unreachable](https://tickwire.io/docs/errors/tickwire_unreachable.md): The MCP tool could not reach the Tickwire API, so nothing was sent. - [timeout](https://tickwire.io/docs/errors/timeout.md): No answer in time: a batch leg's status, or a pre-trade hook's `error` in webhook events. For a batch leg the order may have executed. - [TimeoutError](https://tickwire.io/docs/errors/timeouterror.md): Error name in a streaming error: the terminal did not answer in time. - [too_many_attempts](https://tickwire.io/docs/errors/too_many_attempts.md): Too many failed sign-ins or link requests. - [too_many_connections](https://tickwire.io/docs/errors/too_many_connections.md): Too many concurrent WebSockets for this token. - [too_many_requests](https://tickwire.io/docs/errors/too_many_requests.md): All concurrent market-data request slots for this account are in use. - [too_many_sessions](https://tickwire.io/docs/errors/too_many_sessions.md): Too many stream sessions for this account (error frame, then the socket closes). - [TooManyRequestsError](https://tickwire.io/docs/errors/toomanyrequestserror.md): Error name for a rate limit on the `/users/current/…` routes; `metadata.recommendedRetryTime` says when to retry. - [TradeError](https://tickwire.io/docs/errors/tradeerror.md): Error name in a streaming error: the trade was refused or is being held. `stringCode` says which, and `metadata.sent` says whether anything reached the broker. - [unauthorized](https://tickwire.io/docs/errors/unauthorized.md): Missing or invalid credentials. - [UnauthorizedError](https://tickwire.io/docs/errors/unauthorizederror.md): Error name for a missing or invalid token on the `/users/current/…` routes. - [unavailable](https://tickwire.io/docs/errors/unavailable.md): A dependent feature isn't running right now. - [unknown_account](https://tickwire.io/docs/errors/unknown_account.md): An account id in the request is not yours. - [unknown_actor](https://tickwire.io/docs/errors/unknown_actor.md): The original caller of a held order can't be verified; nothing was sent. - [unknown_component](https://tickwire.io/docs/errors/unknown_component.md): Status page: an incident names a component that doesn't exist. - [unknown_event_type](https://tickwire.io/docs/errors/unknown_event_type.md): The webhook event type is not in the event catalog. - [unknown_host](https://tickwire.io/docs/errors/unknown_host.md): No Tickwire service is served at this hostname. - [unknown_platform](https://tickwire.io/docs/errors/unknown_platform.md): Used between Tickwire's own services; the public API does not return it. - [unknown_region](https://tickwire.io/docs/errors/unknown_region.md): This region is not served. - [unreachable_account](https://tickwire.io/docs/errors/unreachable_account.md): Some accounts in the batch have no terminal; nothing was sent. - [unsupported_grant_type](https://tickwire.io/docs/errors/unsupported_grant_type.md): OAuth (Sign in with Tickwire): the token endpoint only supports authorization_code and refresh_token. - [unsupported_media_type](https://tickwire.io/docs/errors/unsupported_media_type.md): The request body has an unsupported content type. - [unsupported_response_type](https://tickwire.io/docs/errors/unsupported_response_type.md): OAuth (Sign in with Tickwire): only response_type=code is supported (shown on the sign-in error page). - [upstream_misconfigured](https://tickwire.io/docs/errors/upstream_misconfigured.md): The account's terminal refused our API. - [upstream_refused](https://tickwire.io/docs/errors/upstream_refused.md): The upstream refused the WebSocket. - [upstream_timeout](https://tickwire.io/docs/errors/upstream_timeout.md): The upstream did not answer in time. For a mutating request the outcome is unknown (`metadata.outcome: unknown`): it may have executed. - [upstream_unavailable](https://tickwire.io/docs/errors/upstream_unavailable.md): A Tickwire service is unreachable; the request was not sent. - [url_not_allowed](https://tickwire.io/docs/errors/url_not_allowed.md): A webhook delivery was not sent because the endpoint's URL failed our egress rules at send time (the delivery's `lastError`, and an endpoint's `disabledReason`; not an HTTP status). - [validation_error](https://tickwire.io/docs/errors/validation_error.md): The request failed validation. - [ValidationError](https://tickwire.io/docs/errors/validationerror.md): Error name for an invalid request on the `/users/current/…` routes; `details` lists the parameters. - [waking_up](https://tickwire.io/docs/errors/waking_up.md): Tickwire was paused to save cost while nobody was using it, and your request started it again. Starting takes about 2 minutes. - [weak_password](https://tickwire.io/docs/errors/weak_password.md): The password is too weak. - [webhook_trigger_sandbox_only](https://tickwire.io/docs/errors/webhook_trigger_sandbox_only.md): On a live key only webhook.test can be triggered; other test events are sandbox-only. - [webhook_unavailable](https://tickwire.io/docs/errors/webhook_unavailable.md): The test event was published, but the webhook pipeline could not store or queue it, so your endpoints will not receive it. - [window_too_large](https://tickwire.io/docs/errors/window_too_large.md): The time window is too large for one call.