{
  "name": "Broker API Hub: Capability grid",
  "licence": "CC BY 4.0",
  "cite": "Broker API Hub, Capability grid, openbrokerapi.com/data",
  "note": "The state not-recorded means this site holds no record. It does not mean the broker or platform lacks the capability. No state is decided by a program interpreting a sentence: see the rule on each capability. Where decidedBy is register, a person read the record's own sentence (the quote) and entered the state in the capability facts register, with the reason as text, what the state covers as scope, and the date of that reading as readOn. Such a cell takes its status, source and checked date from the record it was read from, never from the reading, and a build check fails if that record's words change afterwards. For streaming, covers lists what a record says in words is streamed (prices, account); null means the record does not say. The status of a cell is the status of the record that supports it, and every value it can take is explained under statuses: a cell that counts this site's own records has the status site-records, and a cell with nothing recorded has a null status.",
  "states": [
    {
      "state": "yes",
      "label": "Yes",
      "means": "A record on this site says so: a structured field, a record that exists, or a sentence in a record that was read and entered in the capability facts register, with the reason printed beside it."
    },
    {
      "state": "partial",
      "label": "Partial",
      "means": "A sentence in a record gives part of it: one route and not another, or a demo of the platform and not of the API. The reading is a row of the capability facts register, and the reason and the scope are printed beside it."
    },
    {
      "state": "no",
      "label": "No",
      "means": "A record on this site says no: a structured field set to false, or a sentence in a record that says so, read and entered in the capability facts register."
    },
    {
      "state": "not-recorded",
      "label": "Not recorded",
      "means": "This site holds no yes or no for it. That is a gap in this dataset. It is not a statement that the broker or platform lacks the capability."
    }
  ],
  "statuses": [
    {
      "status": "verified",
      "means": "The supporting record carries a source and the date that source was checked."
    },
    {
      "status": "conflicting",
      "means": "The supporting record holds two readings from the vendor's own pages that disagree."
    },
    {
      "status": "unverified",
      "means": "The supporting record has no source that was opened, so the state is not confirmed."
    },
    {
      "status": "superseded",
      "means": "The supporting record has been replaced by a later reading."
    },
    {
      "status": "site-records",
      "means": "The cell counts records this site publishes (basis is site). Its source is a page of this site, not a vendor's page, and its checked date is the newest among the records counted. It says that the records exist here. It is not a verification of any one of them: each carries its own status, source and checked date on the page given as the source."
    },
    {
      "status": null,
      "means": "Nothing is recorded (basis is none), so there is no record whose status could be given."
    }
  ],
  "capabilities": [
    {
      "slug": "own-api",
      "name": "Own API",
      "explanation": "Some brokers publish an API of their own, so your code talks to the broker's servers directly. Others publish none, and an account there can only be automated through a platform API.",
      "rule": "The state is the record's nativeApi field: true is yes and false is no. The words and the source beside it are the record's own statement of how you get access. Where the field is empty, the state is a row of the capability facts register if the record's sentence about access settles it: the row gives the reason, and its status, source and date are that sentence's. With neither, the row is not recorded. Where the field and the sentence disagree, trust the sentence and its source over the field: the field is then the part of the record that needs correcting. Platform records are left out, because a platform record is itself an API.",
      "appliesTo": [
        "broker"
      ],
      "states": [
        "yes",
        "no",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/own-api"
    },
    {
      "slug": "documentation",
      "name": "Documentation link",
      "explanation": "The provider's own documentation is the page to trust when anything else disagrees with it, this site included. A link to it is the first thing to look for before you write code.",
      "rule": "Yes means the record holds a documentation address in its docsUrl field. The date is the newest date on which a source at exactly that address was checked in the same record. Where the record holds the address but no dated reading of it, the row is labelled unverified.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/documentation"
    },
    {
      "slug": "demo",
      "name": "Demo or sandbox",
      "explanation": "A demo or sandbox account trades virtual money, so a mistake in your code costs nothing there. Whether the API works on the demo at all, and on what terms, differs from one provider to the next.",
      "rule": "Each record holds a sentence about demo access, not a yes or no field. A person read each sentence and entered yes, partial or no in the capability facts register only where the sentence's own words settle it. The reason is printed in this site's words, the scope says what the demo is of, and the sentence itself is quoted under it. A demo of a trading platform is not a demo of an API: where the sentence describes only a platform demo, the state is partial and the scope says so. The status, the source and the date are the sentence's own, so a reading of an unverified sentence is unverified. A sentence that settles nothing stays at not recorded.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "partial",
        "no",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/demo"
    },
    {
      "slug": "streaming",
      "name": "Streaming",
      "explanation": "Streaming pushes each price or account update to you over a connection that stays open, so a program does not have to ask again and again. Providers do it over different protocols.",
      "rule": "Each record holds a sentence about streaming, not a yes or no field. A person read each sentence and entered yes, partial or no in the capability facts register only where the sentence's own words settle it. Yes means the record describes a connection that pushes data to you. It does not by itself say what is pushed: each row also says whether the record names prices, account updates, both or neither, and where an endpoint or error record names one, that record is cited. Partial means streaming on one route and not another. The status, the source and the date are the sentence's own. A sentence that settles nothing stays at not recorded.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "partial",
        "no",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/streaming"
    },
    {
      "slug": "authentication",
      "name": "Authentication described",
      "explanation": "Authentication is how an API knows a request is yours: a key or token sent with every request, a login call that returns a session token, or OAuth. You need to know which before you can make a first call.",
      "rule": "Each record holds a sentence about authentication, not a yes or no field. A person read each sentence and entered a state in the capability facts register only where its own words settle it. Yes means the sentence names how a request is authenticated, which includes a platform whose code runs inside a terminal that is already logged in. Partial means it names part of it. No means the record says there is no authentication route, for example because the API was withdrawn. The status, the source and the date are the sentence's own. A record with no such sentence, or one that says the method could not be read, stays at not recorded.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "partial",
        "no",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/authentication"
    },
    {
      "slug": "rate-limits",
      "name": "Published rate limits",
      "explanation": "A rate limit is the number of requests an API accepts in a period before it refuses more. A published limit lets you pace a program before it is refused, instead of finding the ceiling by hitting it.",
      "rule": "Yes means the limits register holds at least one limit record for it: a figure or a wording, with its scope, read on the source shown. Where there is no limit record, the state is a row of the capability facts register if a sentence or an error record settles it. No means the record says no limit is published, which is not a statement that the API has no limit. Partial means a limit is documented for part of the API, or the record says limits exist and are served at runtime with no published figure. Any other sentence is printed and the state stays at not recorded.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "partial",
        "no",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/rate-limits"
    },
    {
      "slug": "official-sdk",
      "name": "Official SDK or library",
      "explanation": "An SDK or client library wraps an API so you call functions instead of building each request by hand. An official one is published by the provider itself, as opposed to one written by the community.",
      "rule": "Yes means the record lists at least one library, sample or tool marked official, meaning published by the broker or platform itself. The languages are as the record words them. A record that lists only community libraries, or none, is not recorded: this site holding no official entry is not evidence that none exists.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/official-sdk"
    },
    {
      "slug": "python-library",
      "name": "Python library",
      "explanation": "A Python library lets you call an API from Python without writing the HTTP requests yourself. Python is the language most people learn first for this kind of work.",
      "rule": "Yes means the record lists at least one library whose language field names Python, official or community. Each is shown as official or community, as the record marks it. A record that lists no Python library is not recorded, which is not evidence that none exists. The finder on /compare reads this same cell for its Python library tick, so the two give one answer.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/python-library"
    },
    {
      "slug": "official-mcp-server",
      "name": "Official MCP server",
      "explanation": "An MCP server lets an AI assistant use an API through a standard set of tools. An official one is published by the broker or platform itself. An assistant with order tools can place real trades, so read what a server can do before you connect one.",
      "rule": "Yes means the MCP server register holds a server marked official whose owner is this record. Anything else is not recorded. A server that was looked for and not found is still not recorded here, because not finding one on the pages opened is not proof that none exists.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/official-mcp-server"
    },
    {
      "slug": "community-mcp-server",
      "name": "Community MCP server",
      "explanation": "A community MCP server is written by someone other than the broker or platform. It is not the provider's product, so read its code before you give it a key, and start with a demo account.",
      "rule": "Yes means the MCP server register holds a server not marked official whose owner is this record. Anything else is not recorded, which is not evidence that none exists.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/community-mcp-server"
    },
    {
      "slug": "platform-apis",
      "name": "Platform APIs reachable",
      "explanation": "A platform API belongs to a trading platform rather than to a broker. Where a broker offers such a platform, an account there can be automated through the platform even if the broker publishes no API of its own.",
      "rule": "Each broker record lists platforms with an available field. Yes means at least one is marked true. No means every listed platform is marked false. Anything else, including a record that lists none, is not recorded. Platform records are left out.",
      "appliesTo": [
        "broker"
      ],
      "states": [
        "yes",
        "no",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/platform-apis"
    },
    {
      "slug": "endpoints",
      "name": "Endpoints documented here",
      "explanation": "An endpoint is one address in an API that does one job, such as listing positions or placing an order. An endpoint page on this site gives the method, the path, the parameters and the source they were read on.",
      "rule": "Yes means this site publishes at least one endpoint record for it, and the count is of those records. Not recorded means this site has documented none yet. It says nothing about how many endpoints the API has.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/endpoints"
    },
    {
      "slug": "error-codes",
      "name": "Error codes decoded here",
      "explanation": "An error code is what an API sends back when it refuses a request. A decoded error page on this site gives what the code means, the usual cause and the source it was read on.",
      "rule": "Yes means this site publishes at least one error record for it, and the count is of those records. Not recorded means this site has decoded none yet. It says nothing about which errors the API can return.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/error-codes"
    },
    {
      "slug": "openapi-file",
      "name": "OpenAPI file here",
      "explanation": "An OpenAPI file describes an API in a form that tools can read, so you can generate a client or load it into an API explorer. The files on this site are unofficial descriptions generated here from the endpoint records, not files issued by a broker.",
      "rule": "Yes means this site generates an OpenAPI file for it from its endpoint records. Not recorded means this site publishes no such file. It says nothing about whether the provider publishes an OpenAPI file of its own.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/openapi-file"
    },
    {
      "slug": "quickstart",
      "name": "Quickstart here",
      "explanation": "A quickstart walks from getting access to making a first call, one step at a time. It is the shortest route to finding out whether an API will do what you need.",
      "rule": "Yes means this site publishes a quickstart record for it. Not recorded means this site has written none yet.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/quickstart"
    },
    {
      "slug": "dated-changes",
      "name": "Dated changes recorded",
      "explanation": "APIs change: endpoints are added, retired or altered, and limits move. A dated change record says what changed, when, and the page it was read on.",
      "rule": "Yes means this site's change log holds at least one dated entry for it, and the count is of those entries. Not recorded means the change log holds none. It does not mean the API has not changed.",
      "appliesTo": [
        "broker",
        "platform"
      ],
      "states": [
        "yes",
        "not-recorded"
      ],
      "url": "https://openbrokerapi.com/capabilities/dated-changes"
    }
  ],
  "records": [
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "own-api",
      "state": "no",
      "text": "The record's nativeApi field is false. How the record says you get access:",
      "quote": "Platform access only, on the pages opened. Axi's UK site lists the Axi Trading Platform, MetaTrader 4, MetaTrader 5 and Axi Copy Trading, and its platforms page presents Expert Advisors on MetaTrader as the way to automate.",
      "quoteShortened": true,
      "source": "https://www.axi.com/uk/trading-platforms",
      "sourceTitle": "Trading platforms, Axi UK",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.axi.com/uk",
      "sourceTitle": "Axi UK",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record describes a free demo account on MetaTrader 4 or MetaTrader 5, and says it is a demo of the platform and not of an API. Scope: Platform demo only. The record describes no Axi API to have a demo of.",
      "quote": "Platform demo only: a free demo account on MetaTrader 4 or MetaTrader 5 with USD 50,000 in virtual funds, created in the Axi Client Portal, which expires after 30 consecutive days without a trade.",
      "quoteShortened": true,
      "source": "https://www.axi.com/uk/demo-account",
      "sourceTitle": "Demo account, Axi UK",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Platform demo only. The record describes no Axi API to have a demo of.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "The record holds no statement about streaming.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "The record holds no statement about authentication.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "Unverified. The Axi help article this was read on in September 2026 answered 404 on 12 Oct 2026, and Axi's help centre is now a portal that does not render without scripts.",
      "quoteShortened": true,
      "source": "https://www.axi.com/uk/trading-platforms",
      "sourceTitle": "Trading platforms, Axi UK",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.axi.com/uk/trading-platforms",
      "sourceTitle": "Trading platforms, Axi UK",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "axi",
      "name": "Axi",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "1 dated change in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Log in to the Bitget website and create an API key under API Key Management. Each key set is an API key, a secret key and a passphrase you choose, with read or read and write permissions, and one UID can hold up to 50 key sets.",
      "quoteShortened": true,
      "source": "https://www.bitget.com/docs/uta/quick-start",
      "sourceTitle": "Bitget API quick start",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.bitget.com/docs/uta/Introduction",
      "sourceTitle": "Bitget API introduction",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says demo trading with virtual funds works over REST with a demo API key and a paptrading header, and over WebSocket on separate addresses. Scope: API demo, REST and WebSocket.",
      "quote": "Yes: demo trading with virtual funds. Switch the account to Demo mode on the website, create a Demo API key there, then send REST requests to the usual host with the header paptrading set to 1.",
      "quoteShortened": true,
      "source": "https://www.bitget.com/docs/uta/quick-start",
      "sourceTitle": "Bitget API quick start, Demo Trading",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo, REST and WebSocket.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record describes a WebSocket with a public channel and a private channel that needs a login message. Recorded as streamed: prices, from the function or message record ticker; account updates, from the function or message record account.",
      "quote": "WebSocket, with a public channel and a private channel that needs a login message.",
      "quoteShortened": true,
      "source": "https://www.bitget.com/docs/uta/quick-start",
      "sourceTitle": "Bitget API quick start, WebSocket",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says every REST request carries four access headers, with a signature made by HMAC SHA256 or with an RSA private key.",
      "quote": "Signed requests. Every REST request carries the headers ACCESS-KEY, ACCESS-SIGN, ACCESS-TIMESTAMP and ACCESS-PASSPHRASE.",
      "quoteShortened": true,
      "source": "https://www.bitget.com/docs/uta/quick-start",
      "sourceTitle": "Bitget API quick start, Header and Signature",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "6 limit records in the limits register, each with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://bitgetlimited.github.io/apidoc/en/spot/",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: bitget-java-sdk-api (Java), bitget-python-sdk-api (Python), bitget-node-sdk-api (Node.js), bitget-golang-sdk-api (Go) and bitget-php-sdk-api (PHP).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.bitget.com/docs/uta/sdk/overview",
      "sourceTitle": "bitget-java-sdk-api",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: bitget-python-sdk-api (official).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.bitget.com/docs/uta/sdk/overview",
      "sourceTitle": "bitget-python-sdk-api",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: Bitget Agent Hub MCP server.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.bitget.com/docs/uta/agent-hub",
      "sourceTitle": "Bitget Agent Hub",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "The record lists no platform links.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "bitget",
      "name": "Bitget",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Enable 2FA, then Settings > API integrations > Generate new key, with a custom key password.",
      "quoteShortened": false,
      "source": "https://open-api.capital.com/",
      "sourceTitle": "Capital.com Public API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://open-api.capital.com/",
      "sourceTitle": "Capital.com: public API docs",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says there is a separate demo base URL for the API. Scope: API demo.",
      "quote": "Yes: separate demo base URL.",
      "quoteShortened": false,
      "source": "https://open-api.capital.com/",
      "sourceTitle": "Capital.com Public API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record gives a WebSocket address, with up to 40 epics per subscription. Recorded as streamed: prices, from the function or message record marketdata-subscribe. Not recorded either way: whether account updates are streamed.",
      "quote": "WebSocket wss://api-streaming-capital.backend-capital.com/connect, maximum of 40 epics per subscription; the session lasts 10 minutes and is kept alive with ping.",
      "quoteShortened": false,
      "source": "https://open-api.capital.com/",
      "sourceTitle": "Capital.com Public API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says a POST to /session with the API key header and login credentials returns two session tokens that are sent on later calls.",
      "quote": "POST /session with the X-CAP-API-KEY header plus login credentials returns CST and X-SECURITY-TOKEN, sent on later calls. The session expires after 10 minutes of inactivity.",
      "quoteShortened": false,
      "source": "https://open-api.capital.com/",
      "sourceTitle": "Capital.com Public API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://open-api.capital.com/",
      "sourceTitle": null,
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: capital-api-postman (Postman) and api-java-samples (Java).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/capital-com-sv/capital-api-postman",
      "sourceTitle": "capital-api-postman",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: capital-mcp (community) and capitalcom-python (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/capital-com-sv/capital-mcp",
      "sourceTitle": "capital-mcp",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: capital-mcp.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/capital-com-sv/capital-mcp",
      "sourceTitle": "capital-com-sv/capital-mcp",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the community, not by the broker or platform: capitalcom-mcp-server.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/SimonTarara62/capitalcom-mcp-server",
      "sourceTitle": "SimonTarara62/capitalcom-mcp-server",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://capital.com/en-gb/trading-platforms/mt4",
      "sourceTitle": "Capital.com UK MT4",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "36 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/capital-com/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "24 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/capital-com",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/capital-com.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 7 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/capital-com/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-18",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "capital-com",
      "name": "Capital.com",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "9 dated changes in this site's change log, the newest dated 23 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-23",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "own-api",
      "state": "no",
      "text": "The record's nativeApi field is false. How the record says you get access:",
      "quote": "Platform access only for retail clients, on the pages opened. CMC's UK platforms page offers its own web platform, its mobile app and MetaTrader 4, and the MT4 page presents Expert Advisors as the way to automate.",
      "quoteShortened": true,
      "source": "https://www.cmcmarkets.com/en-gb/trading-platforms",
      "sourceTitle": "CMC Markets UK trading platforms",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.cmcmarkets.com/en-gb/trading-platforms/metatrader-4",
      "sourceTitle": "CMC Markets UK MetaTrader 4",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record describes an MT4 demo account and says it is a demo of the platform, not of an API. Scope: Platform demo only. The record says the CMC Connect page does not say whether a test FIX session is offered.",
      "quote": "Platform demo only: an MT4 demo account with GBP 10,000 of virtual funds, which stays open as long as you log in to MT4 at least once every 30 days. It is a demo of the platform, not of an API.",
      "quoteShortened": true,
      "source": "https://www.cmcmarkets.com/en-gb/trading-platforms/metatrader-4",
      "sourceTitle": "CMC Markets UK MetaTrader 4",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Platform demo only. The record says the CMC Connect page does not say whether a test FIX session is offered.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "The record holds no statement about streaming.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "The record holds no statement about authentication.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "No retail API on the pages opened. CMC Connect offers market data and execution through the FIX protocol to institutional clients, and its connectivity page states no rate limit (re-read 12 Oct 2026).",
      "quoteShortened": true,
      "source": "https://www.cmcmarkets.com/en/connect/solutions/connectivity",
      "sourceTitle": "CMC Connect connectivity",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.cmcmarkets.com/en-gb/trading-platforms/metatrader-4",
      "sourceTitle": "CMC Markets UK MetaTrader 4",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "cmc-markets",
      "name": "CMC Markets",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "not-recorded",
      "text": "This site's change log holds no entry for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record says access is through an OAuth 2.0 app or a Personal Access Token app, with the user signing in or generating the token at Deriv itself.",
      "quote": "Two kinds of app. With an OAuth 2.0 app the user signs in and consents at Deriv, and the app exchanges the code it gets back for an access token.",
      "quoteShortened": true,
      "source": "https://developers.deriv.com/docs/intro/authentication/",
      "sourceTitle": "Deriv API: authentication",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://developers.deriv.com/docs/limits",
      "sourceTitle": "Deriv API: limits",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says each user gets a default demo account at signup and that there is a separate demo WebSocket endpoint. Scope: API demo.",
      "quote": "Yes: the overview says each user gets a default demo account at signup, and there is a separate demo WebSocket endpoint.",
      "quoteShortened": false,
      "source": "https://developers.deriv.com/docs/intro/api-overview/",
      "sourceTitle": "Deriv API: API overview",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says a WebSocket carries trading and market data. Scope: Market data and trading over WebSocket. Recorded as streamed: prices; account updates, from the function or message record balance.",
      "quote": "WebSocket carries trading and market data, on a public endpoint and on demo and real endpoints opened with a one time password fetched over REST. Each connection can send 10 pings a second, outside the call budgets.",
      "quoteShortened": false,
      "source": "https://developers.deriv.com/docs/intro/api-overview/",
      "sourceTitle": "Deriv API: API overview",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Market data and trading over WebSocket.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says an OAuth 2.0 app or a Personal Access Token is used, and that either way the token is sent as a bearer token.",
      "quote": "Two routes: an OAuth 2.0 app, or a Personal Access Token the user generates and pastes into the app. Either way the token is sent as a bearer token. With a Personal Access Token, REST requests also need a Deriv-App-ID header.",
      "quoteShortened": false,
      "source": "https://developers.deriv.com/docs/intro/authentication/",
      "sourceTitle": "Deriv API: authentication",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://developers.deriv.com/docs/limits/",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: deriv-api (JavaScript) and python-deriv-api (Python).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/deriv-com/deriv-api",
      "sourceTitle": "deriv-api",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: python-deriv-api (official).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/deriv-com/python-deriv-api",
      "sourceTitle": "python-deriv-api",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: Deriv hosted MCP (deriv-api-plugin).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/deriv-com/deriv-api-plugin",
      "sourceTitle": "deriv-com/deriv-api-plugin",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "The record lists no platform links.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "5 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/deriv/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "10 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/deriv",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/deriv.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 9 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/deriv/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "deriv",
      "name": "Deriv",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Two routes of Dukascopy's own. The JForex API is a Java client library, shipped as the JForex SDK, that connects straight to Dukascopy's trade servers without the JForex platform running.",
      "quoteShortened": true,
      "source": "https://www.dukascopy.com/swiss/english/forex/api/jforex-api/",
      "sourceTitle": "Dukascopy JForex API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.dukascopy.com/swiss/english/forex/api/jforex-api/",
      "sourceTitle": "Dukascopy JForex API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record says the JForex SDK example programs run in demo mode, and that no demo is stated for the FIX API. Scope: JForex API only. Not stated for the FIX API.",
      "quote": "Partial: yes for the JForex API, where Dukascopy's wiki says every example program in the JForex SDK is written to run in demo mode and gives a separate connection address for live mode.",
      "quoteShortened": true,
      "source": "https://www.dukascopy.com/wiki/en/development/get-started-api/use-jforex-sdk/live-mode/",
      "sourceTitle": "Dukascopy wiki, JForex SDK LIVE mode",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "JForex API only. Not stated for the FIX API.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says live data arrives through the JForex client once instruments are subscribed, and that the FIX API has a connection for the data feed. Scope: JForex API and the FIX data feed. Recorded as streamed: prices. Not recorded either way: whether account updates are streamed.",
      "quote": "JForex API: live data arrives through the client once you subscribe to instruments explicitly, and the subscription is asynchronous. FIX API: two FIX connections per client, one for the data feed and one for trading.",
      "quoteShortened": true,
      "source": "https://www.dukascopy.com/wiki/en/development/get-started-api/use-jforex-sdk/sdk-client/",
      "sourceTitle": "Dukascopy wiki, JForex SDK client",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "JForex API and the FIX data feed.",
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says the JForex API connects with a username and password, and the FIX API with a Logon message over an SSL socket from an agreed IP address.",
      "quote": "JForex API: the client connects with the platform's connection address, a username and a password. In live mode a connection from an IP address that is not registered also has to answer a captcha image for a PIN.",
      "quoteShortened": true,
      "source": "https://www.dukascopy.com/wiki/en/development/get-started-api/use-jforex-sdk/live-mode/",
      "sourceTitle": "Dukascopy wiki, JForex SDK LIVE mode",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "3 limit records in the limits register, each with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.dukascopy.com/media-storage/3000474271/o/",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: JForex SDK (Java).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.dukascopy.com/wiki/en/development/get-started-api/use-jforex-sdk/",
      "sourceTitle": "JForex SDK",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists libraries, but none whose language field names Python.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: Dukascopy MCP server.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://ai.dukascopy.com/",
      "sourceTitle": "Dukascopy, trade with AI",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "The record lists no platform links.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dukascopy",
      "name": "Dukascopy",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "1 dated change in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Settings > Trading > API Key Management > Create New Key; choose Read or Write, optional IP whitelist and expiry.",
      "quoteShortened": false,
      "source": "https://api-portal.etoro.com/core/getting-started/authentication.md",
      "sourceTitle": "eToro API portal: authentication",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://api-portal.etoro.com/",
      "sourceTitle": "eToro API portal",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says an API key is bound to Demo or Real when it is created, so a key can be made for the demo environment. Scope: API demo.",
      "quote": "Yes: the environment is bound to the key when it is created, Demo or Real, and each key supports one environment only.",
      "quoteShortened": false,
      "source": "https://builders.etoro.com/faq",
      "sourceTitle": "eToro Builders FAQ",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record gives a WebSocket address and an AsyncAPI document whose Subscribe message takes instrument topics and the private topic. Recorded as streamed: prices, from the function or message record instrument-rates; account updates, from the function or message record private.",
      "quote": "WebSocket at wss://ws.etoro.com/ws, described by an AsyncAPI 3.0 document that eToro publishes.",
      "quoteShortened": true,
      "source": "https://api-portal.etoro.com/api-reference/asyncapi.json",
      "sourceTitle": "eToro WebSocket API, AsyncAPI document",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says requests carry the x-api-key, x-user-key and x-request-id headers, or an OAuth 2.0 bearer token in place of the key headers.",
      "quote": "Headers x-api-key, x-user-key and x-request-id on every request, or an OAuth 2.0 bearer token instead of the key headers. eToro now states the exclusivity itself rather than leaving it to be inferred: a request presenting both is rejected.",
      "quoteShortened": false,
      "source": "https://api-portal.etoro.com/core/getting-started/authentication.md",
      "sourceTitle": "eToro API portal: authentication",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://api-portal.etoro.com/core/getting-started/rate-limits.md",
      "sourceTitle": null,
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: eToro Public API MCP.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://builders.etoro.com/tools/mcp",
      "sourceTitle": "eToro builders, MCP page and terms",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "no",
      "text": "Every platform the record lists is marked not available: MetaTrader 4 (MQL4), MetaTrader 5 (Python package and MQL5), cTrader Open API, TradeLocker API, Match-Trader Platform API and DXtrade APIs. Not every one of those entries is verified.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://brokerchooser.com/broker-reviews/etoro-review/etoro-metatrader",
      "sourceTitle": "Does eToro support MetaTrader? (BrokerChooser, third party)",
      "checked": "2026-09-18",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "51 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/etoro/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "16 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/etoro",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/etoro.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 8 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/etoro/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-19",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "etoro",
      "name": "eToro",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "15 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record says, as a carry over that was not confirmed, that an API key is generated in the Exness Personal Area. Scope: Rests on an unverified sentence.",
      "quote": "Unverified. Exness' help centre answered 403 Forbidden to automated reading on 12 Oct 2026, so the Exness API help article could not be re-read.",
      "quoteShortened": true,
      "source": "https://get.exness.help/hc/en-us/articles/27866287512476-Exness-API",
      "sourceTitle": "Exness API help article (did not open on 12 Oct 2026)",
      "checked": "2026-09-23",
      "status": "unverified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Rests on an unverified sentence.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://get.exness.help/hc/en-us/articles/27866287512476-Exness-API",
      "sourceTitle": "Exness API help article (did not open on 12 Oct 2026)",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "demo",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about a demo or sandbox: the capability facts register holds no reading of it as a yes, a partial or a no, and it does not itself open with one of those words.",
      "quote": "Unverified. When the Exness API help article was read on 23 Sep 2026 it did not say whether a demo account can use the API. The article answered 403 Forbidden on 12 Oct 2026, so it could not be read again.",
      "quoteShortened": false,
      "source": "https://get.exness.help/hc/en-us/articles/27866287512476-Exness-API",
      "sourceTitle": "Exness API help article (did not open on 12 Oct 2026)",
      "checked": "2026-09-23",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says there is a WebSocket, throttled to roughly 100 to 500 ms. Not recorded either way: whether prices or account updates are streamed.",
      "quote": "Websocket, throttled to roughly 100 to 500 ms.",
      "quoteShortened": false,
      "source": "https://get.exness.help/hc/en-us/articles/27866287512476-Exness-API",
      "sourceTitle": "Exness help centre: Exness API",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says authentication is an API Key plus a Secret Key. Scope: The record names the two keys and nothing about headers or signing.",
      "quote": "An API Key plus a Secret Key.",
      "quoteShortened": false,
      "source": "https://get.exness.help/hc/en-us/articles/27866287512476-Exness-API",
      "sourceTitle": "Exness help centre: Exness API",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "The record names the two keys and nothing about headers or signing.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "partial",
      "text": "The record says Exness publishes no figure and tells clients to read their limits at runtime from getRateLimits. Scope: No published figure. Limits are served at runtime. The limits register holds no limit record.",
      "quote": "Not published. Exness tells clients to read them at runtime from getRateLimits rather than hardcoding any figure.",
      "quoteShortened": false,
      "source": "https://get.exness.help/hc/en-us/articles/27866287512476-Exness-API",
      "sourceTitle": "Exness help centre: Exness API",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "No published figure. Limits are served at runtime.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "The record lists no platform links.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "exness",
      "name": "Exness",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "not-recorded",
      "text": "This site's change log holds no entry for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Open and fund a standard account, then request API access from support; an AppKey is emailed if accepted.",
      "quoteShortened": false,
      "source": "https://www.forex.com/en/trading-tools/api-trading/",
      "sourceTitle": "FOREX.com API Trading",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.labs.gaincapital.com/",
      "sourceTitle": "StoneX API documentation host",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record says a Pre-Production environment exists beside Live, and that only some users are given access to it. Scope: Pre-Production API environment, by user type. The record says the documentation does not say that a retail demo account can use the API.",
      "quote": "Partial: the StoneX API documentation describes two environments, Live and Pre-Production, each with its own API and streaming address.",
      "quoteShortened": true,
      "source": "https://docs.labs.gaincapital.com/Content/Getting%20Started/Getting%20Started.htm",
      "sourceTitle": "StoneX API documentation, Getting Started",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Pre-Production API environment, by user type. The record says the documentation does not say that a retail demo account can use the API.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says streams run over Lightstreamer and cover prices, news headlines, client account margin, orders and quotes. Scope: Lightstreamer over long lived HTTP connections, not WebSocket. Recorded as streamed: prices; account updates.",
      "quote": "Lightstreamer, a third party streaming protocol, over long lived HTTP connections and not WebSocket as documented. Streams cover prices, news headlines, client account margin, orders and quotes, grouped into adapters.",
      "quoteShortened": true,
      "source": "https://docs.labs.gaincapital.com/Content/Getting%20Started/CIAPI%20Arky.htm",
      "sourceTitle": "StoneX API documentation, architecture",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Lightstreamer over long lived HTTP connections, not WebSocket.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says a POST to /v2/Session with user name, password and AppKey returns a session token that is sent with every request.",
      "quote": "A session token. POST your user name, password and the AppKey you were issued to /v2/Session, then send the returned session token and your user name with every request as the request headers Session and UserName.",
      "quoteShortened": true,
      "source": "https://docs.labs.gaincapital.com/Content/Getting%20Started/CIAPI%20Basics.htm",
      "sourceTitle": "StoneX API documentation, API basics",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.labs.gaincapital.com/Content/Getting%20Started/CIAPI%20Basics.htm",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record marks no library as official. It lists 2 community libraries.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: pygcapi (community) and forexcom (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/forexcom/",
      "sourceTitle": "forexcom",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.forex.com/en-uk/trading-platforms/",
      "sourceTitle": "FOREX.com UK trading platforms",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "forex-com-city-index",
      "name": "FOREX.com / StoneX Trading (City Index)",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "3 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Free SDKs from FXCM GitHub; sign the EULA and apply for a demo account. Support at api@fxcm.com.",
      "quoteShortened": false,
      "source": "https://github.com/fxcm/ForexConnectAPI",
      "sourceTitle": "GitHub fxcm/ForexConnectAPI",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.fxcm.com/markets/algorithmic-trading/api-trading/",
      "sourceTitle": "API trading, FXCM",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says ForexConnect connects to demo as well as real Trading Station accounts. Scope: ForexConnect. The record does not say for the FIX API or the Java API.",
      "quote": "Yes: ForexConnect connects to demo and real Trading Station accounts.",
      "quoteShortened": false,
      "source": "https://github.com/fxcm/ForexConnectAPI",
      "sourceTitle": "GitHub fxcm/ForexConnectAPI",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "ForexConnect. The record does not say for the FIX API or the Java API.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says ForexConnect pushes live prices. Scope: ForexConnect. The record says the legacy REST API that streamed over Socket.IO is retired. Recorded as streamed: prices. Not recorded either way: whether account updates are streamed.",
      "quote": "ForexConnect pushes live prices; the retired legacy REST API streamed over Socket.IO.",
      "quoteShortened": false,
      "source": "https://fxcm-rest.readthedocs.io/en/latest/socketrestapispecs.html",
      "sourceTitle": "FXCM Socket REST API spec",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "ForexConnect. The record says the legacy REST API that streamed over Socket.IO is retired.",
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about authentication: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "FIX, the Java API and ForexConnect only. No REST API is listed on FXCM's current API pages, so the legacy REST token flow this site described is recorded as no longer listed rather than retired.",
      "quoteShortened": false,
      "source": "https://fxcm-rest.readthedocs.io/en/latest/socketrestapispecs.html",
      "sourceTitle": "FXCM Socket REST API spec",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "no",
      "text": "The record says no rate limits are published, and that no REST API is listed to publish limits for. Not published is not the same as no limit.",
      "quote": "Not published. No REST API is listed, so there is nothing to publish limits for.",
      "quoteShortened": false,
      "source": "https://fxcm-rest.readthedocs.io/en/latest/socketrestapispecs.html",
      "sourceTitle": "FXCM Socket REST API spec",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: ForexConnectAPI (C++, C#, Java, VB, Python), forexconnect (Python), JavaAPI (Java), MarketData (Not stated) and FIXAPI (FIX).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/forexconnect/",
      "sourceTitle": "forexconnect",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: ForexConnectAPI (official), forexconnect (official) and fxcmpy (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/forexconnect/",
      "sourceTitle": "forexconnect",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.fxcm.com/uk/platforms/metatrader-4/",
      "sourceTitle": "FXCM UK MetaTrader 4",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxcm",
      "name": "FXCM",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "7 dated changes in this site's change log, the newest dated 9 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "own-api",
      "state": "no",
      "text": "The record's nativeApi field is false. How the record says you get access:",
      "quote": "Unverified. FxPro's site answered 403 Forbidden to automated reading on 12 Oct 2026 (the platform comparison page and the prime brokerage page), so no FxPro page was opened and nothing could be confirmed either way.",
      "quoteShortened": true,
      "source": "https://www.fxpro.com/trading-platforms/comparison",
      "sourceTitle": "FxPro platform comparison (did not open on 12 Oct 2026)",
      "checked": "2026-09-21",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.fxpro.com/trading-platforms/comparison",
      "sourceTitle": "FxPro platform comparison (did not open on 12 Oct 2026)",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record describes an Open Demo Account button on the platform comparison page, and says it is a platform demo that says nothing about an API. Scope: Platform demo only.",
      "quote": "Unverified. The platform comparison page carried an Open Demo Account button when read on 21 Sep 2026, which is a platform demo and says nothing about an API.",
      "quoteShortened": true,
      "source": "https://www.fxpro.com/trading-platforms/comparison",
      "sourceTitle": "FxPro platform comparison (did not open on 12 Oct 2026)",
      "checked": "2026-09-21",
      "status": "unverified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Platform demo only.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "The record holds no statement about streaming.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "The record holds no statement about authentication.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "No retail API. FxPro Prime offers FIX via PrimeXM XCore, MT5 bridge via Ultency and cTrader FIX via cBroker, for institutions; no limit stated (read 22 Sep 2026).",
      "quoteShortened": false,
      "source": "https://www.fxpro.com/primebrokerage",
      "sourceTitle": "FxPro Prime brokerage",
      "checked": "2026-09-22",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available but unverified: MetaTrader 4 (MQL4), MetaTrader 5 (Python package and MQL5) and cTrader Open API.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.fxpro.com/trading-platforms/comparison",
      "sourceTitle": "FxPro platform comparison",
      "checked": "2026-09-18",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "fxpro",
      "name": "FxPro",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "not-recorded",
      "text": "This site's change log holds no entry for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "API keys are only issued to existing live account holders: generate one in My IG > Settings > API keys.",
      "quoteShortened": false,
      "source": "https://www.ig.com/uk/trading-platforms/trading-apis/how-to-use-ig-api",
      "sourceTitle": "How to use IG API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://labs.ig.com/",
      "sourceTitle": "IG Labs",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record says the API works on demo, but that a standalone demo account gets no key unless it is linked to a live account. Scope: API demo, with a key that needs a live account.",
      "quote": "Partial: demo API works, but no key from a standalone demo account unless it is linked to a live account.",
      "quoteShortened": false,
      "source": "https://www.ig.com/uk/trading-platforms/trading-apis/how-to-use-ig-api",
      "sourceTitle": "How to use IG API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo, with a key that needs a live account.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record describes streaming over Lightstreamer, with up to 40 subscriptions on each connection by default. Recorded as streamed: prices, from the function or message record price; account updates, from the function or message record account.",
      "quote": "Streaming runs on Lightstreamer: IG's Streaming API Guide starts by sending you to the Lightstreamer client library, and the server address to connect to comes back from the /session call.",
      "quoteShortened": true,
      "source": "https://labs.ig.com/streaming-api-guide.html",
      "sourceTitle": "IG Labs Streaming API Guide",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says an API key with a username and password returns two session tokens, and that a v3 login returns OAuth tokens. Scope: The method is recorded. The record holds two readings of how long a session token lasts.",
      "quote": "API key plus username and password returns CST and X-SECURITY-TOKEN, valid 12 hours on a rolling basis with each call resetting the clock on the IG Labs FAQ, while IG's REST trading API guide says 6 hours at first, extended up to a maximum of 72 hours: a disagreement between two IG pages that the blocked reference page could not settle on 23 Sep 2026.",
      "quoteShortened": true,
      "source": "https://labs.ig.com/rest-trading-api-guide.html",
      "sourceTitle": "IG Labs REST trading API guide",
      "checked": "2026-10-12",
      "status": "conflicting",
      "basis": "record",
      "decidedBy": "register",
      "scope": "The method is recorded. The record holds two readings of how long a session token lasts.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "5 limit records in the limits register, each with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://labs.ig.com/faq.html",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: ig-webapi-java-sample (Java), ig-webapi-dotnet-sample (C#) and ig-webapi-javascript-sample (JavaScript).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/IG-Group/ig-webapi-java-sample",
      "sourceTitle": "ig-webapi-java-sample",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: trading-ig (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/ig-python/trading-ig",
      "sourceTitle": "trading-ig",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: IG Trading: CFD Assistant.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.financemagnates.com/forex/ig-australia-launches-mcp-server-opens-its-trading-platform-to-chatgpt/",
      "sourceTitle": "Finance Magnates on IG Australia",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the community, not by the broker or platform: ig-trading-mcp.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/kea0811/ig-trading-mcp",
      "sourceTitle": "kea0811/ig-trading-mcp",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.ig.com/uk/trading-platforms/metatrader-4",
      "sourceTitle": "IG UK MetaTrader 4",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "49 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/ig/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "132 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/ig",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/ig.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 7 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/ig/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-25",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ig",
      "name": "IG",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "11 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "No key: run TWS or IB Gateway (TWS API) or the Client Portal Gateway and log in via browser (Web API).",
      "quoteShortened": false,
      "source": "https://www.interactivebrokers.com/docs/tws-api/doc/architecture/the-trader-workstation/the-ib-gateway",
      "sourceTitle": "IBKR TWS API documentation, the IB Gateway",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.interactivebrokers.com/docs/tws-api/doc/introduction",
      "sourceTitle": "IBKR TWS API documentation, introduction",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record says paper trading accounts are supported, and that demo accounts cannot subscribe to data. Scope: Paper trading accounts. Demo accounts cannot subscribe to market data.",
      "quote": "Partial: paper trading accounts are supported and the Web API is logged in to with a separate paper username; demo accounts cannot subscribe to data.",
      "quoteShortened": false,
      "source": "https://www.interactivebrokers.com/docs/web-api/authentication/paper",
      "sourceTitle": "IBKR Web API documentation, using a paper account",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Paper trading accounts. Demo accounts cannot subscribe to market data.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says the TWS API is event driven over its socket, and that the Web API has a websocket capped by market data lines. Scope: TWS API socket and Web API websocket. Recorded as streamed: prices; account updates, from the error record 2100-account-data-unsubscribed.",
      "quote": "TWS API is event driven over the socket.",
      "quoteShortened": true,
      "source": "https://www.interactivebrokers.com/docs/web-api/v1/ws/introduction",
      "sourceTitle": "IBKR Web API v1.0 documentation, websockets introduction",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "TWS API socket and Web API websocket.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says the TWS API uses a local socket to a logged in TWS or Gateway, and the Web API a browser login through the Client Portal Gateway.",
      "quote": "TWS API: local socket to a TWS or IB Gateway the user has logged in to by hand.",
      "quoteShortened": true,
      "source": "https://www.interactivebrokers.com/docs/tws-api/doc/architecture/the-trader-workstation/the-ib-gateway",
      "sourceTitle": "IBKR TWS API documentation, the IB Gateway",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "6 limit records in the limits register, each with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.ibkrcampus.com/campus/ibkr-api-page/webapi-doc/",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: TWS API (ibapi) (Python, Java, C++, C#, VB) and IBKR MCP public endpoint (Any MCP client).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.interactivebrokers.com/docs/tws-api/doc/introduction",
      "sourceTitle": "TWS API (ibapi)",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: TWS API (ibapi) (official), ib_async (community) and ibeam (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.interactivebrokers.com/docs/tws-api/doc/introduction",
      "sourceTitle": "TWS API (ibapi)",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: Interactive Brokers MCP connector.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.interactivebrokers.com/en/general/about/mediaRelations/7-28-26.php",
      "sourceTitle": "IBKR media release, 28 July 2026",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "No platform is marked available, and the record does not say either way for MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "23 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/ibkr/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-09-18",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "511 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/ibkr",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/ibkr.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 6 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/ibkr/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-25",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ibkr",
      "name": "Interactive Brokers",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "19 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Account Management Portal > My Services > Manage API Access, accept licence, generate personal access token.",
      "quoteShortened": false,
      "source": "https://developer.oanda.com/rest-live-v20/introduction/",
      "sourceTitle": "OANDA v20 Introduction",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://developer.oanda.com/rest-live-v20/introduction/",
      "sourceTitle": "OANDA: v20 REST introduction",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says there is an fxTrade Practice environment with its own token. Scope: API demo.",
      "quote": "Yes: fxTrade Practice environment with its own token.",
      "quoteShortened": false,
      "source": "https://developer.oanda.com/rest-live-v20/development-guide/",
      "sourceTitle": "OANDA Development Guide",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says streaming is HTTP chunked transfer encoding carrying JSON objects, with at most 20 active streams. Scope: HTTP streaming, not WebSocket. Recorded as streamed: prices, from the endpoint record pricing-stream; account updates, from the endpoint record transactions-stream.",
      "quote": "HTTP chunked transfer encoding carrying JSON objects, not WebSocket. The development guide states at most 20 active streams, with requests above that rejected, and no more than 2 new connections a second.",
      "quoteShortened": true,
      "source": "https://developer.oanda.com/rest-live-v20/development-guide/",
      "sourceTitle": "OANDA Development Guide",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "HTTP streaming, not WebSocket.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says a personal access token is sent as a bearer token.",
      "quote": "Bearer personal access token, generated in the Account Management Portal after accepting the API licence.",
      "quoteShortened": false,
      "source": "https://developer.oanda.com/rest-live-v20/introduction/",
      "sourceTitle": "Introduction, OANDA v20 REST API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://developer.oanda.com/rest-live-v20/development-guide/",
      "sourceTitle": null,
      "checked": "2026-10-03",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: v20 (Python).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/oanda/v20-python",
      "sourceTitle": "v20",
      "checked": null,
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: v20 (official) and oandapyV20 (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/hootnot/oanda-api-v20",
      "sourceTitle": "oandapyV20",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the community, not by the broker or platform: oanda-mcp-server.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/BJLG-92/oanda-mcp-server",
      "sourceTitle": "BJLG-92/oanda-mcp-server",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.oanda.com/uk-en/trading/platforms/metatrader-4/",
      "sourceTitle": "OANDA UK MetaTrader 4",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "33 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/oanda/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "242 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/oanda",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/oanda.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 7 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/oanda/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-25",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "oanda",
      "name": "OANDA",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "10 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "API by application. You need a live Pepperstone account, then you email support to request one of two routes. The Standard API: once approved you generate an API key to connect your software.",
      "quoteShortened": true,
      "source": "https://pepperstone.com/en/platforms/tools/api-trading",
      "sourceTitle": "Pepperstone API trading",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pepperstone.com/en/platforms/tools/api-trading",
      "sourceTitle": "Pepperstone API trading",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record says a FIX demo environment can be requested by account holders who meet a monthly volume threshold, and that no demo is stated for the Standard API. Scope: FIX API only, on request and by volume. The record says the platform demo is not an API demo.",
      "quote": "Partial: Pepperstone's API trading page says an account holder who meets the 160 million euro monthly volume can request access to a FIX demo environment, to test a FIX integration before going live.",
      "quoteShortened": true,
      "source": "https://pepperstone.com/en/platforms/tools/api-trading",
      "sourceTitle": "Pepperstone API trading",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "FIX API only, on request and by volume. The record says the platform demo is not an API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about streaming: the capability facts register holds no reading of it as a yes, a partial or a no, and it does not itself open with one of those words.",
      "quote": "Unverified. The API trading page, re-read 12 Oct 2026, says software can receive live pricing data and depth of market, but describes no streaming transport, host or limit for either route.",
      "quoteShortened": false,
      "source": "https://pepperstone.com/en/platforms/tools/api-trading",
      "sourceTitle": "Pepperstone API trading",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "authentication",
      "state": "partial",
      "text": "The record says only that the Standard API uses an API key generated after approval, with no header, signature or token lifetime named. Scope: Standard API only. Nothing is recorded for the FIX route.",
      "quote": "Unverified beyond one phrase. Pepperstone's API trading page, re-read 12 Oct 2026, says only that the Standard API uses an API key generated after approval.",
      "quoteShortened": true,
      "source": "https://pepperstone.com/en/platforms/tools/api-trading",
      "sourceTitle": "Pepperstone API trading",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Standard API only. Nothing is recorded for the FIX route.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "Unverified. The API trading page, re-read 12 Oct 2026, states no rate limit for either route, and it links to no API documentation. That is not evidence that there is no limit.",
      "quoteShortened": false,
      "source": "https://pepperstone.com/en/platforms/tools/api-trading",
      "sourceTitle": "Pepperstone API trading",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5). Recorded as available but unverified: cTrader Open API.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pepperstone.com/en-gb/trading-platforms/",
      "sourceTitle": "Pepperstone UK trading platforms",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "pepperstone",
      "name": "Pepperstone",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Create a developer portal account for SIM (24 hour token or registered app); apply for live app credentials after testing.",
      "quoteShortened": false,
      "source": "https://www.developer.saxo/openapi/learn",
      "sourceTitle": "Saxo OpenAPI Learn",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.developer.saxo/openapi/learn",
      "sourceTitle": "Getting started, Saxo OpenAPI",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says there is a SIM environment, with 24 hour portal tokens that work in SIM only. Scope: API demo.",
      "quote": "Yes: SIM environment; 24 hour portal tokens work in SIM only.",
      "quoteShortened": false,
      "source": "https://www.developer.saxo/openapi/learn/environments",
      "sourceTitle": "Saxo Environments",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says there is WebSocket streaming on the SIM and live hosts. Scope: WebSocket. Recorded as streamed: prices, from the endpoint record prices-subscribe; account updates, from the endpoint record balances-subscribe.",
      "quote": "WebSocket streaming (SIM and live hosts).",
      "quoteShortened": true,
      "source": "https://www.developer.saxo/openapi/learn/environments",
      "sourceTitle": "Saxo Environments",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "WebSocket.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says the OAuth 2.0 authorization code flow is used, with or without PKCE, and that refresh tokens rotate.",
      "quote": "OAuth 2.0 authorization code (with or without PKCE); app key and secret for live. Refresh tokens rotate: each is invalidated on use and replaced. Certificate-based auth is for select partners only, not retail.",
      "quoteShortened": false,
      "source": "https://www.developer.saxo/openapi/learn",
      "sourceTitle": "Saxo OpenAPI Learn",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.developer.saxo/openapi/learn/rate-limiting",
      "sourceTitle": null,
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: openapi-samples-js (JavaScript), openapi-samples-csharp (C#) and openapi-clientlib-js (JavaScript).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/SaxoBank",
      "sourceTitle": "openapi-clientlib-js",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: saxo_openapi (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/saxo-openapi/",
      "sourceTitle": "saxo_openapi",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the community, not by the broker or platform: saxo-mcp.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/SirAdlerBD/saxo-mcp",
      "sourceTitle": "SirAdlerBD/saxo-mcp",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "no",
      "text": "Every platform the record lists is marked not available: MetaTrader 4 (MQL4), MetaTrader 5 (Python package and MQL5), cTrader Open API, TradeLocker API, Match-Trader Platform API and DXtrade APIs. Not every one of those entries is verified.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.help.saxo/hc/en-us/articles/360022686632-Does-Saxo-offer-the-MetaTrader-platform",
      "sourceTitle": "Does Saxo offer the MetaTrader platform? (Saxo help centre)",
      "checked": "2026-09-18",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "68 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/saxo/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "143 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/saxo",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/saxo.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 7 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/saxo/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-19",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "saxo",
      "name": "Saxo OpenAPI",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "6 dated changes in this site's change log, the newest dated 22 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-22",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record's nativeApi field is true. How the record says you get access:",
      "quote": "Swissquote's APIs are presented on its institutional pages, which you reach by contacting a Swissquote office, not through a self service key.",
      "quoteShortened": true,
      "source": "https://www.swissquote.com/en/institutional/solutions/technology/apis/securities-cryptos",
      "sourceTitle": "Swissquote institutional, securities and cryptos via an API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.swissquote.com/en/institutional/solutions/technology/apis",
      "sourceTitle": "Swissquote institutional APIs",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says the FAQ on Swissquote's institutional securities API page offers a demo environment to validate an API integration. Scope: Institutional securities API. The record says the private client platform demo is not stated to cover the FIX API.",
      "quote": "Yes: the FAQ on Swissquote's institutional securities API page says a demo environment is offered to validate an API integration.",
      "quoteShortened": true,
      "source": "https://www.swissquote.com/en/institutional/solutions/technology/apis/securities-cryptos",
      "sourceTitle": "Swissquote institutional, securities and cryptos via an API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Institutional securities API. The record says the private client platform demo is not stated to cover the FIX API.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "streaming",
      "state": "partial",
      "text": "The record says the forex FIX connections list streaming as their liquidity channel and digital assets have a FIX market data session, while no market data is available over FIX for securities. Scope: FIX for leveraged forex and digital assets. None for securities. Recorded as streamed: prices. Not recorded either way: whether account updates are streamed.",
      "quote": "The institutional Forex API page lists the liquidity channel of its FIX connections as streaming, with request for stream and request for quote also listed for the Integral connection.",
      "quoteShortened": true,
      "source": "https://www.swissquote.com/en/institutional/solutions/technology/apis/forex",
      "sourceTitle": "Swissquote institutional Forex APIs",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "FIX for leveraged forex and digital assets. None for securities.",
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about authentication: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "Unverified. The pages opened on 12 Oct 2026 do not describe how a session is authenticated.",
      "quoteShortened": true,
      "source": "https://www.swissquote.com/en/institutional/solutions/technology/apis/forex",
      "sourceTitle": "Swissquote institutional Forex APIs",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "Unverified. No page opened on 12 Oct 2026 states a request or order limit: not the institutional API overview, the Forex API page or the securities API page.",
      "quoteShortened": true,
      "source": "https://www.swissquote.com/en/institutional/solutions/technology/apis/forex",
      "sourceTitle": "Swissquote institutional Forex APIs",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.swissquote.com/en-uk/private/trade/platforms/forex-cfds",
      "sourceTitle": "Swissquote UK, forex and CFD platforms",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "swissquote",
      "name": "Swissquote",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "not-recorded",
      "text": "This site's change log holds no entry for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "own-api",
      "state": "no",
      "text": "The record's nativeApi field is false. How the record says you get access:",
      "quote": "Unverified.",
      "quoteShortened": true,
      "source": "https://www.thinkmarkets.com/uk/",
      "sourceTitle": "ThinkMarkets UK (did not open on 12 Oct 2026)",
      "checked": "2026-09-21",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://support.thinkmarkets.com/hc/en-gb/articles/11613215353745-Spread-betting-account",
      "sourceTitle": "ThinkMarkets support: Spread betting account",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "demo",
      "state": "partial",
      "text": "The record describes a Try demo button and a Demo Account option on the UK site, and says they are a platform demo that says nothing about an API. Scope: Platform demo only.",
      "quote": "Unverified. The UK site showed a Try demo button and a Demo Account option when read on 21 Sep 2026, which is a platform demo and says nothing about an API.",
      "quoteShortened": true,
      "source": "https://www.thinkmarkets.com/uk/",
      "sourceTitle": "ThinkMarkets UK (did not open on 12 Oct 2026)",
      "checked": "2026-09-21",
      "status": "unverified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Platform demo only.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "The record holds no statement about streaming.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "The record holds no statement about authentication.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "No retail API. Institutional page offers API solutions through vendors with no protocol, documentation or limit stated (read 22 Sep 2026).",
      "quoteShortened": false,
      "source": "https://www.thinkmarkets.com/en/institutional-sales/",
      "sourceTitle": "ThinkMarkets institutional sales",
      "checked": "2026-09-22",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: ChelseaAI.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.tradingview.com/news/financemagnates:68d0db3ca094b:0-exclusive-thinkmarkets-launches-mcp-server-ai-can-execute-trades-but-not-access-funds/",
      "sourceTitle": "Finance Magnates interview, via TradingView",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://support.thinkmarkets.com/hc/en-gb/articles/11613215353745-Spread-betting-account",
      "sourceTitle": "ThinkMarkets support: Spread betting account",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "thinkmarkets",
      "name": "ThinkMarkets",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 20 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-22",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "own-api",
      "state": "no",
      "text": "The record's nativeApi field is false. How the record says you get access:",
      "quote": "Platform access for most clients. Tickmill's UK site offers MetaTrader 4 and MetaTrader 5, with Expert Advisors available.",
      "quoteShortened": true,
      "source": "https://www.tickmill.com/about/faq/do-you-offer-fix-api-connection",
      "sourceTitle": "Tickmill FAQ: FIX API connection",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.tickmill.com/uk",
      "sourceTitle": "Tickmill UK",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "demo",
      "state": "no",
      "text": "The record says Tickmill's FAQ states there is no demo version of its FIX API connection. Scope: FIX API. The same record describes a platform demo for MetaTrader 4 and MetaTrader 5.",
      "quote": "No: Tickmill's FAQ says there is no demo version of its FIX API connection. The demo account on its site is a platform demo for MetaTrader 4 and MetaTrader 5 with virtual funds, which expires after 7 days without a login attempt.",
      "quoteShortened": false,
      "source": "https://www.tickmill.com/about/faq/do-you-offer-fix-api-connection",
      "sourceTitle": "Tickmill FAQ: FIX API connection",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "FIX API. The same record describes a platform demo for MetaTrader 4 and MetaTrader 5.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "The record holds no statement about streaming.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "The record holds no statement about authentication.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "No retail API. A FIX API is offered to large private and institutional clients (minimum balance 500,000, minimum monthly commission 5,000, no demo version), and the FAQ that describes it states no limit (re-read 12 Oct 2026).",
      "quoteShortened": true,
      "source": "https://www.tickmill.com/about/faq/do-you-offer-fix-api-connection",
      "sourceTitle": "Tickmill FAQ: FIX API connection",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "yes",
      "text": "Recorded as available, with a source: MetaTrader 4 (MQL4) and MetaTrader 5 (Python package and MQL5).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.tickmill.com/uk",
      "sourceTitle": "Tickmill UK",
      "checked": "2026-09-18",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tickmill",
      "name": "Tickmill",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "1 dated change in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "own-api",
      "state": "yes",
      "text": "The record says an API key is generated in Trading 212's own web or mobile app, under Settings and then API (Beta).",
      "quote": "On the web or in the app: menu, Settings, API (Beta), Generate API key. A risk warning must be accepted first. You then name the key, choose its permissions and choose whether to restrict it to given IP addresses.",
      "quoteShortened": true,
      "source": "https://helpcentre.trading212.com/hc/en-us/articles/14584770928157-Trading-212-API-key",
      "sourceTitle": "Trading 212 help centre: Trading 212 API key",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.trading212.com/api/section/rate-limiting",
      "sourceTitle": "Trading 212 API docs: rate limiting",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "demo",
      "state": "yes",
      "text": "The record says the documentation names a paper trading environment on its own host beside the live host. Scope: API demo.",
      "quote": "Yes: the docs name a paper trading (demo) environment on its own host, demo.trading212.com, beside the live host. Documented paths start /api/v0 on both.",
      "quoteShortened": false,
      "source": "https://docs.trading212.com/api/section/general-information/api-environments",
      "sourceTitle": "Trading 212 API docs: API environments",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about streaming: the capability facts register holds no reading of it as a yes, a partial or a no, and it does not itself open with one of those words.",
      "quote": "None documented. REST plus polling only.",
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says HTTP Basic authentication is used, with the API key and secret in the Authorization header.",
      "quote": "HTTP Basic: Authorization header of Basic base64(API_KEY:API_SECRET).",
      "quoteShortened": false,
      "source": "https://docs.trading212.com/api/section/authentication",
      "sourceTitle": "Trading 212 API docs: authentication",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "yes",
      "text": "1 limit record in the limits register, with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.trading212.com/api/section/rate-limiting",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: Trading 212 Agent Skill.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/trading212-labs/agent-skills",
      "sourceTitle": "trading212-labs/agent-skills",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the community, not by the broker or platform: trading212-mcp.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/t0knight/trading212-mcp",
      "sourceTitle": "t0knight/trading212-mcp",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "The record lists no platform links.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "endpoints",
      "state": "yes",
      "text": "16 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/trading-212/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "error-codes",
      "state": "yes",
      "text": "8 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/trading-212",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/trading-212.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 11 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/brokers/trading-212/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "trading-212",
      "name": "Trading 212",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "1 dated change in this site's change log, the newest dated 12 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "own-api",
      "state": "no",
      "text": "The record's nativeApi field is false. How the record says you get access:",
      "quote": "None. XTB no longer offers API access.",
      "quoteShortened": false,
      "source": "https://www.xtb.com/cy/help-center/our-platforms/does-xtb-offer-investment-automation-tools",
      "sourceTitle": "XTB help centre: Does XTB offer investment automation tools?",
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.xtb.com/cy/help-center/our-platforms/does-xtb-offer-investment-automation-tools",
      "sourceTitle": "XTB help centre: Does XTB offer investment automation tools?",
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "demo",
      "state": "no",
      "text": "The record's sentence about demo access is the single word No.",
      "quote": "No",
      "quoteShortened": false,
      "source": "https://www.xtb.com/cy/help-center/our-platforms/does-xtb-offer-investment-automation-tools",
      "sourceTitle": "XTB help centre: Does XTB offer investment automation tools?",
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "streaming",
      "state": "no",
      "text": "The record says API access was discontinued on 14 March 2025 and that streaming was part of that API.",
      "quote": "Not applicable. XTB's help centre states that API access was discontinued on 14 March 2025, and streaming was part of that API. The page read on 9 Oct 2026 does not name the former streaming host. Last looked for 9 Oct 2026.",
      "quoteShortened": false,
      "source": "https://www.xtb.com/cy/help-center/our-platforms/does-xtb-offer-investment-automation-tools",
      "sourceTitle": "XTB help centre: Does XTB offer investment automation tools?",
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "authentication",
      "state": "no",
      "text": "The record says API access was discontinued on 14 March 2025, so there is no authentication route left to document.",
      "quote": "Not applicable. XTB's help centre states that API access is no longer available and that the service was discontinued on 14 March 2025, so there is no authentication route left to document. Last looked for 9 Oct 2026.",
      "quoteShortened": false,
      "source": "https://www.xtb.com/cy/help-center/our-platforms/does-xtb-offer-investment-automation-tools",
      "sourceTitle": "XTB help centre: Does XTB offer investment automation tools?",
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "rate-limits",
      "state": "no",
      "text": "The record says no published limits apply, because there is no live API. Not published is not the same as no limit.",
      "quote": "Not applicable. No live API, so no published limits apply. Last looked for 9 Oct 2026.",
      "quoteShortened": false,
      "source": "https://www.xtb.com/cy/help-center/our-platforms/does-xtb-offer-investment-automation-tools",
      "sourceTitle": "XTB help centre: Does XTB offer investment automation tools?",
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "platform-apis",
      "state": "not-recorded",
      "text": "The record lists no platform links.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "xtb",
      "name": "XTB",
      "kind": "broker",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 9 Oct 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://help.ctrader.com/open-api/",
      "sourceTitle": "cTrader Open API documentation",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "demo",
      "state": "yes",
      "text": "The record says there is a separate demo endpoint, with the demo and live environments fully separated. Scope: API demo.",
      "quote": "Yes: separate demo endpoint; demo and live environments are fully separated.",
      "quoteShortened": false,
      "source": "https://help.ctrader.com/open-api/proxies-endpoints/",
      "sourceTitle": "Proxies and endpoints",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "API demo.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says spot quotes, depth of market and execution events arrive on the same connection. Scope: Execution events are the account side. Recorded as streamed: prices; account updates.",
      "quote": "Yes: spot quotes, depth of market and execution events on the same connection, at 50 requests a second per connection (5 for historical data) with a heartbeat every 10 seconds.",
      "quoteShortened": true,
      "source": "https://help.ctrader.com/open-api/messages/",
      "sourceTitle": "Messages",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Execution events are the account side.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says the OAuth 2.0 authorisation code flow is used, with an access token that lasts 30 days.",
      "quote": "OAuth 2.0 authorisation code flow: the auth code lives 1 minute, the access token 30 days. Scopes are accounts, which is read only, and trading, which is full.",
      "quoteShortened": false,
      "source": "https://help.ctrader.com/open-api/account-authentication/",
      "sourceTitle": "Account authentication",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "yes",
      "text": "2 limit records in the limits register, each with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://help.ctrader.com/open-api/",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: OpenApiPy (ctrader-open-api) (Python), OpenAPI.Net (C#), cTrader MCP server (MCP), cTrader Remote and Local MCP servers (Any MCP client) and spotware/ctrader-skills (Agent Skills) (Agent Skills).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/ctrader-open-api/",
      "sourceTitle": "OpenApiPy (ctrader-open-api)",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: OpenApiPy (ctrader-open-api) (official).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/ctrader-open-api/",
      "sourceTitle": "OpenApiPy (ctrader-open-api)",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: cTrader AI Agent Connect.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://mcp.spotware.com/",
      "sourceTitle": "mcp.spotware.com",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "error-codes",
      "state": "yes",
      "text": "53 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/ctrader",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 7 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/platforms/ctrader/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-18",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "ctrader",
      "name": "cTrader Open API",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "yes",
      "text": "5 dated changes in this site's change log, the newest dated 23 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-23",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, but no dated reading of that exact address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://demo.dx.trade/developers/#/",
      "sourceTitle": null,
      "checked": null,
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "demo",
      "state": "no",
      "text": "The record says Devexperts offers no demo to traders: the demo on the DXtrade website is for brokers and prop firms. Scope: From the platform vendor only. The record says to ask your broker for a demo account.",
      "quote": "No trader demo from Devexperts: the demo on the DXtrade website is for brokers and prop firms to trial the software. Ask your broker for a demo account.",
      "quoteShortened": false,
      "source": "https://dx.trade/traders-faq/",
      "sourceTitle": "DXtrade: Traders FAQ",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "From the platform vendor only. The record says to ask your broker for a demo account.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says there is a Push API over WebSockets for account and market data updates. Scope: WebSocket Push API. Recorded as streamed: prices; account updates.",
      "quote": "Push API over WebSockets for account and market data updates.",
      "quoteShortened": false,
      "source": "https://devexperts.com/blog/dxtrade-api-for-seamless-integration-with-brokerage-infrastructure/",
      "sourceTitle": "Devexperts blog: DXtrade API suite",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "WebSocket Push API.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "authentication",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about authentication: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "Unverified. The DXtrade developer portal at demo.dx.trade/developers returned only a page title without scripts on 12 Oct 2026, as it did in September, so the authentication scheme could not be read.",
      "quoteShortened": true,
      "source": "https://demo.dx.trade/developers/",
      "sourceTitle": "DXtrade developer portal (content did not render)",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "partial",
      "text": "An error record for the Push API says the vendor documents a rate limit on subscriptions with RequestType ALL, with a default of 1 per minute for each user and subscription name. Scope: Push API subscriptions only. No limit is recorded for the REST API. The limits register holds no limit record.",
      "quote": "DXtrade Push API: the vendor says that if the access rate is exceeded, a Reject message \"429 Too Many Requests\" is sent.",
      "quoteShortened": true,
      "source": "https://demo.dx.trade/developers/#/DXtrade-Push-API",
      "sourceTitle": null,
      "checked": "2026-10-09",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Push API subscriptions only. No limit is recorded for the REST API.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "endpoints",
      "state": "yes",
      "text": "21 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/platforms/dxtrade/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "error-codes",
      "state": "yes",
      "text": "79 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/dxtrade",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/dxtrade.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "dxtrade",
      "name": "DXtrade APIs",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 18 Mar 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.match-trade.com/docs/match-trader-api-documentation/",
      "sourceTitle": "Match-Trader API documentation index",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "demo",
      "state": "partial",
      "text": "The record describes a demo platform at demo.match-trader.com, and says no page states whether the API can be used against it. Scope: Platform demo only. Use of the API on it is not stated.",
      "quote": "Unverified. Match-Trade's Platform API page, re-read 12 Oct 2026, links a Try demo platform at demo.match-trader.com.",
      "quoteShortened": true,
      "source": "https://match-trader.com/platform-api/",
      "sourceTitle": "Match-Trader Platform API",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Platform demo only. Use of the API on it is not stated.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says there is a WebSocket with STOMP for real-time market data and account updates. Scope: WebSocket with STOMP. Recorded as streamed: prices; account updates.",
      "quote": "Yes: WebSocket with STOMP for real-time market data and account updates.",
      "quoteShortened": false,
      "source": "https://match-trader.com/technology/platform-api/",
      "sourceTitle": "Platform API",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "WebSocket with STOMP.",
      "covers": "prices; account",
      "readOn": "2026-10-12"
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says a login call with email, password and broker id sets cookies, and that trading calls also need an Auth-trading-api header.",
      "quote": "POST email, password and brokerId to /manager/co-login, or manager/login/co/with-token for a one time token.",
      "quoteShortened": true,
      "source": "https://docs.match-trade.com/wp-content/uploads/2024/05/MTR-Match-TraderPlatformAPI.pdf",
      "sourceTitle": "Match-Trader Platform API PDF (2024)",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "no",
      "text": "The record's sentence about rate limits is the two words Not published. Not published is not the same as no limit.",
      "quote": "Not published",
      "quoteShortened": false,
      "source": "https://docs.match-trade.com/wp-content/uploads/2024/05/MTR-Match-TraderPlatformAPI.pdf",
      "sourceTitle": "Match-Trader Platform API PDF (2024)",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "endpoints",
      "state": "yes",
      "text": "17 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/platforms/match-trader/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "error-codes",
      "state": "yes",
      "text": "3 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/match-trader",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/match-trader.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "match-trader",
      "name": "Match-Trader Platform API",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "yes",
      "text": "2 dated changes in this site's change log, the newest dated 17 Feb 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://metaapi.cloud/docs/client/",
      "sourceTitle": "MetaApi documentation, overview",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "demo",
      "state": "yes",
      "text": "The record says a demo MetaTrader account can be added to the service and used through the same API. Scope: A demo MetaTrader account on the same API. The record says there is no separate demo API environment.",
      "quote": "Yes: MetaApi's FAQ says you can add a demo MetaTrader account to the service to try it without real trades, or give the investor password for read only access.",
      "quoteShortened": true,
      "source": "https://metaapi.cloud/docs/client/faq/",
      "sourceTitle": "MetaApi documentation, FAQ",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "A demo MetaTrader account on the same API. The record says there is no separate demo API environment.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says a WebSocket API on the socket.io protocol pushes terminal state changes, quotes, candles, ticks and order book data in real time. Scope: The record names terminal state changes, and does not name account updates as such. Recorded as streamed: prices. Not recorded either way: whether account updates are streamed.",
      "quote": "Yes: a WebSocket API on the socket.io protocol that pushes terminal state changes, quotes, candles, ticks and order book data in real time. MetaApi recommends it over REST for automated trading.",
      "quoteShortened": true,
      "source": "https://metaapi.cloud/docs/client/",
      "sourceTitle": "MetaApi documentation, overview",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "The record names terminal state changes, and does not name account updates as such.",
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says an authorisation token is sent in the auth-token header of every REST request.",
      "quote": "An authorisation token sent in the auth-token header of every REST request. You take the token from the MetaApi web application. An invalid token returns HTTP 401.",
      "quoteShortened": false,
      "source": "https://metaapi.cloud/docs/client/restApi/auth/",
      "sourceTitle": "MetaApi documentation, authentication and authorisation",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "yes",
      "text": "6 limit records in the limits register, each with its scope.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://metaapi.cloud/docs/client/rateLimiting/",
      "sourceTitle": null,
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: metaapi.cloud-sdk (Node.js and browser JavaScript), metaapi-cloud-sdk (Python) and metaapi-java-sdk (Java).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://metaapi.cloud/sdks",
      "sourceTitle": "metaapi.cloud-sdk",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: metaapi-cloud-sdk (official).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://metaapi.cloud/sdks",
      "sourceTitle": "metaapi-cloud-sdk",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "endpoints",
      "state": "yes",
      "text": "17 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/platforms/metaapi/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/metaapi.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metaapi",
      "name": "MetaApi",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "not-recorded",
      "text": "This site's change log holds no entry for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.metacopier.io/",
      "sourceTitle": "MetaCopier documentation",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "demo",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about a demo or sandbox: the capability facts register holds no reading of it as a yes, a partial or a no, and it does not itself open with one of those words.",
      "quote": "Unverified. The MetaCopier documentation pages opened on 12 Oct 2026 (the REST API, SDK, access policy and Socket API pages) describe no demo or sandbox environment and do not say whether a demo trading account can be connected.",
      "quoteShortened": true,
      "source": "https://docs.metacopier.io/rest-api/api",
      "sourceTitle": "MetaCopier documentation, REST API",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "streaming",
      "state": "yes",
      "text": "The record says a Socket API over STOMP and WebSocket gives real time updates of account information, history and open positions. Scope: Account updates. The record names no price stream. Recorded as streamed: account updates. Not recorded either way: whether prices are streamed.",
      "quote": "Yes: a Socket API that speaks STOMP over a standard WebSocket connection, for real time updates of account information, history and open positions.",
      "quoteShortened": true,
      "source": "https://docs.metacopier.io/socket-api/api",
      "sourceTitle": "MetaCopier documentation, Socket API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Account updates. The record names no price stream.",
      "covers": "account",
      "readOn": "2026-10-12"
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says API keys are used, at project level or at account level, and that the Socket API takes the same key.",
      "quote": "API keys, of two kinds. A project level key, created under Projects then API Keys, reaches every account in the project. An account key is generated automatically when an account is created and reaches only that account.",
      "quoteShortened": true,
      "source": "https://docs.metacopier.io/rest-api/api",
      "sourceTitle": "MetaCopier documentation, REST API",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "not-recorded",
      "text": "The limits register holds no limit record. No state is taken from the record's sentence about rate limits: the capability facts register holds no reading of it as a yes, a partial or a no.",
      "quote": "Unverified. The REST API, access policy and Socket API pages of MetaCopier's documentation, opened on 12 Oct 2026, state no request rate limit. The endpoint reference is a Swagger page that was not opened.",
      "quoteShortened": true,
      "source": "https://docs.metacopier.io/rest-api/api",
      "sourceTitle": "MetaCopier documentation, REST API",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: MetaCopier API client packages (C#, Java, TypeScript, Python, Go).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.metacopier.io/rest-api/sdk/usage",
      "sourceTitle": "MetaCopier API client packages",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: MetaCopier API client packages (official).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.metacopier.io/rest-api/sdk/usage",
      "sourceTitle": "MetaCopier API client packages",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: MetaCopier MCP server.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.metacopier.io/ai/ai",
      "sourceTitle": "MetaCopier documentation, AI assistant",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "error-codes",
      "state": "not-recorded",
      "text": "This site has decoded no error codes for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metacopier",
      "name": "MetaCopier",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "not-recorded",
      "text": "This site's change log holds no entry for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://docs.mql4.com/",
      "sourceTitle": "MQL4 reference",
      "checked": "2026-09-23",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "demo",
      "state": "yes",
      "text": "The record says demo accounts can be opened from within the terminal. Scope: Demo trading accounts in the terminal.",
      "quote": "Yes: demo accounts can be opened from within the terminal.",
      "quoteShortened": false,
      "source": "https://www.metatrader4.com/en/trading-platform/help/userguide/open_an_account",
      "sourceTitle": "Opening of accounts (MT4 help)",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Demo trading accounts in the terminal.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "streaming",
      "state": "partial",
      "text": "The record says code in the terminal receives events such as a new tick, and that there is no external streaming API. Scope: In-terminal events only. Recorded as streamed: prices. Not recorded either way: whether account updates are streamed.",
      "quote": "In-terminal events only (new tick, timer, depth changes); no external streaming API.",
      "quoteShortened": false,
      "source": "https://docs.mql4.com/",
      "sourceTitle": "MQL4 Reference",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "In-terminal events only.",
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says no API key is used: code runs inside a terminal that is already logged in to a trading account. Scope: No separate API login. The terminal's own login is the authentication.",
      "quote": "No API keys: code runs inside a terminal already logged in to a trading account.",
      "quoteShortened": false,
      "source": "https://docs.mql4.com/",
      "sourceTitle": "MQL4 Reference",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "No separate API login. The terminal's own login is the authentication.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "no",
      "text": "The record's sentence about rate limits is the two words Not published. Not published is not the same as no limit.",
      "quote": "Not published",
      "quoteShortened": false,
      "source": "https://docs.mql4.com/",
      "sourceTitle": "MQL4 Reference",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "python-library",
      "state": "not-recorded",
      "text": "The record lists no library of any kind.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "error-codes",
      "state": "yes",
      "text": "161 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/mt4",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-4",
      "name": "MetaTrader 4 (MQL4)",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "yes",
      "text": "4 dated changes in this site's change log, the newest dated 23 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-23",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.mql5.com/en/docs/python_metatrader5",
      "sourceTitle": "MQL5: Python integration reference",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "demo",
      "state": "yes",
      "text": "The record says demo accounts can be opened from within the terminal. Scope: Demo trading accounts in the terminal.",
      "quote": "Yes: demo accounts can be opened from within the terminal.",
      "quoteShortened": false,
      "source": "https://www.metatrader5.com/en/terminal/help/startworking/acc_open",
      "sourceTitle": "Opening an account (MT5 help)",
      "checked": "2026-09-21",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "Demo trading accounts in the terminal.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "streaming",
      "state": "partial",
      "text": "The record says MQL5 Expert Advisors get tick events, while the Python package has no push API and polls ticks and bars. Scope: MQL5 in the terminal only. Python polls. Recorded as streamed: prices. Not recorded either way: whether account updates are streamed.",
      "quote": "No push API in Python: poll ticks and bars; market_book_add subscribes the terminal to depth events. MQL5 EAs get tick events.",
      "quoteShortened": false,
      "source": "https://www.mql5.com/en/docs/python_metatrader5",
      "sourceTitle": "MetaTrader for Python",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "MQL5 in the terminal only. Python polls.",
      "covers": "prices",
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says no API key is used: initialize() connects to the local terminal, optionally with an account login, password and server. Scope: No separate API key. The connection is to the local terminal.",
      "quote": "No API keys: initialize() connects to the local terminal, optionally with account login, password and server.",
      "quoteShortened": false,
      "source": "https://www.mql5.com/en/docs/python_metatrader5/mt5initialize_py",
      "sourceTitle": "initialize",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "No separate API key. The connection is to the local terminal.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "no",
      "text": "The record says no rate limit is published, and that the Python page states none. Not published is not the same as no limit.",
      "quote": "Not published. The Python page states none, carries no version and no date, and gives no consolidated error list beyond last_error() (read 22 Sep 2026).",
      "quoteShortened": false,
      "source": "https://www.mql5.com/en/docs/python_metatrader5",
      "sourceTitle": "MetaTrader for Python",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: MetaTrader5 (Python).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/MetaTrader5/",
      "sourceTitle": "MetaTrader5",
      "checked": "2026-10-04",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: MetaTrader5 (official) and Community Python MCP server (MQL5 article 21905) (community).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/MetaTrader5/",
      "sourceTitle": "MetaTrader5",
      "checked": "2026-10-04",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the broker or platform itself: MetaTrader 5 native MCP.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://www.metatrader5.com/en/releasenotes/terminal/2447",
      "sourceTitle": "MetaTrader 5 release notes",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "yes",
      "text": "Recorded as published by the community, not by the broker or platform: metatrader-mcp-server and MQL5 community FastMCP server.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://github.com/ariadng/metatrader-mcp-server",
      "sourceTitle": "ariadng/metatrader-mcp-server",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "endpoints",
      "state": "not-recorded",
      "text": "This site has documented no endpoints for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "error-codes",
      "state": "yes",
      "text": "311 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/mt5",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "not-recorded",
      "text": "This site publishes no OpenAPI file for it.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "quickstart",
      "state": "yes",
      "text": "A quickstart with 6 steps is published on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/platforms/metatrader-5/quickstart",
      "sourceTitle": "This site",
      "checked": "2026-09-25",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "metatrader-5",
      "name": "MetaTrader 5 (Python package and MQL5)",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "yes",
      "text": "10 dated changes in this site's change log, the newest dated 5 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-22",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "documentation",
      "state": "yes",
      "text": "The record holds a documentation address, and a dated reading of that address.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://public-api.tradelocker.com/",
      "sourceTitle": "TradeLocker: public API docs",
      "checked": "2026-09-24",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "demo",
      "state": "yes",
      "text": "The record says there is a separate demo environment at demo.tradelocker.com.",
      "quote": "Yes: separate demo environment at demo.tradelocker.com.",
      "quoteShortened": false,
      "source": "https://public-api.tradelocker.com/",
      "sourceTitle": "Getting Started with TradeLocker Public API",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "streaming",
      "state": "not-recorded",
      "text": "No state is taken from the record's sentence about streaming: the capability facts register holds no reading of it as a yes, a partial or a no, and it does not itself open with one of those words.",
      "quote": "Unverified. TradeLocker's public API documentation, re-read 12 Oct 2026, describes a request and response REST API only, and its index of pages lists no streaming page.",
      "quoteShortened": true,
      "source": "https://public-api.tradelocker.com/docs/getting-started",
      "sourceTitle": "TradeLocker public API, getting started",
      "checked": "2026-10-12",
      "status": "unverified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "authentication",
      "state": "yes",
      "text": "The record says a POST of email, password and server returns a JWT that is sent as a bearer token, with refresh tokens issued.",
      "quote": "POST email, password and server to /auth/jwt/token; send the JWT as Bearer token; refresh tokens issued. /trade/* routes also need the accNum header (not the accountId).",
      "quoteShortened": false,
      "source": "https://public-api.tradelocker.com/",
      "sourceTitle": "Getting Started with TradeLocker Public API",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": null,
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "rate-limits",
      "state": "partial",
      "text": "The record says limits are per route and served at runtime by the /trade/config route, and that the documentation publishes no fixed figure. Scope: No published figure. The record adds that a request for more than 20,000 historical bars is rejected. The limits register holds no limit record.",
      "quote": "Per route limits only, served at runtime by the /trade/config route as a number of requests per interval of seconds or minutes.",
      "quoteShortened": true,
      "source": "https://public-api.tradelocker.com/docs/getting-started",
      "sourceTitle": "TradeLocker public API, getting started",
      "checked": "2026-10-12",
      "status": "verified",
      "basis": "record",
      "decidedBy": "register",
      "scope": "No published figure. The record adds that a request for more than 20,000 historical bars is rejected.",
      "covers": null,
      "readOn": "2026-10-12"
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "official-sdk",
      "state": "yes",
      "text": "Marked official in the record: tradelocker (Python).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/tradelocker/",
      "sourceTitle": "tradelocker",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "python-library",
      "state": "yes",
      "text": "Python libraries in the record: tradelocker (official).",
      "quote": null,
      "quoteShortened": false,
      "source": "https://pypi.org/project/tradelocker/",
      "sourceTitle": "tradelocker",
      "checked": "2026-09-20",
      "status": "verified",
      "basis": "record",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "official-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no official server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "community-mcp-server",
      "state": "not-recorded",
      "text": "The MCP server register holds no community server for this record.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "endpoints",
      "state": "yes",
      "text": "23 endpoints documented on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/platforms/tradelocker/endpoints",
      "sourceTitle": "This site",
      "checked": "2026-10-12",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "error-codes",
      "state": "yes",
      "text": "5 error codes decoded on this site.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/errors/tradelocker",
      "sourceTitle": "This site",
      "checked": "2026-10-09",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "openapi-file",
      "state": "yes",
      "text": "An OpenAPI file is published on this site. It is this site's own unofficial description, not a file issued by the provider.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/specs/tradelocker.json",
      "sourceTitle": "This site",
      "checked": null,
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "quickstart",
      "state": "not-recorded",
      "text": "This site has no quickstart for it yet.",
      "quote": null,
      "quoteShortened": false,
      "source": null,
      "sourceTitle": null,
      "checked": null,
      "status": null,
      "basis": "none",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    },
    {
      "record": "tradelocker",
      "name": "TradeLocker API",
      "kind": "platform",
      "capability": "dated-changes",
      "state": "yes",
      "text": "4 dated changes in this site's change log, the newest dated 23 Sep 2026.",
      "quote": null,
      "quoteShortened": false,
      "source": "https://openbrokerapi.com/changes",
      "sourceTitle": "This site",
      "checked": "2026-09-23",
      "status": "site-records",
      "basis": "site",
      "decidedBy": null,
      "scope": null,
      "covers": null,
      "readOn": null
    }
  ]
}