MerQube · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the MerQube API

10 actions 10 updates documentation extends openapi/merqube-api-openapi.json
Derived by API Evangelist Built from the contracts MerQube publishes. MerQube did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

componentssecurityenumx-api-evangelist-notex-spec-locationsx-support-contactx-response-envelopex-concurrency

Targets 4

$
$.components.schemas.CountryCode
$.info
$.servers

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the MerQube API
  version: 1.0.0
extends: openapi/merqube-api-openapi.json
x-provenance:
  generated: '2026-08-25'
  method: generated
  source: >-
    Authored by API Evangelist against MerQube's own published contract
    (https://api.merqube.com/api, OpenAPI 3.1, info.version 4.40.0). Every action below either
    encodes a fact MerQube states in prose but omits from the contract, or repairs a defect that is
    demonstrably present in the published document. Nothing here invents behaviour. The original
    specification is never mutated.
actions:
- target: $
  description: >-
    Declare the API-key security scheme. MerQube's Authentication document specifies an
    Authorization header carrying "APIKEY {key}", but the published contract has no
    components.securitySchemes at all, so a generated client has no way to authenticate.
  update:
    components:
      securitySchemes:
        apiKeyAuth:
          type: apiKey
          in: header
          name: Authorization
          description: >-
            MerQube API key. Send as `Authorization: APIKEY {your_api_key}` - note the literal
            "APIKEY " prefix, not "Bearer". Keys are issued by support@merqube.com after
            registering at https://merqube.com/register. Requests without a key are accepted and
            resolve to the world-readable `default` namespace only.
            Source: https://merqube.stoplight.io/docs/api/p6s6m4p35ehfv-authentication
- target: $
  description: >-
    Apply the scheme as an OPTIONAL default. An empty requirement object is included first because
    MerQube genuinely serves anonymous callers - dropping it would misrepresent the public read
    surface as gated.
  update:
    security:
    - {}
    - apiKeyAuth: []
- target: $.components.schemas.CountryCode
  description: >-
    Repair a YAML 1.1 boolean coercion defect. The published enum contains a JSON `false` where the
    ISO 3166-1 alpha-2 code for Norway, "NO", belongs - the source YAML at
    https://api.merqube.com/api-raw writes it unquoted. As published, Norway is unrepresentable and
    every generated client emits a boolean enum member. This overlay restores "NO"; the fix in
    MerQube's source is simply to quote it.
  update:
    enum:
    - AE
    - AR
    - AT
    - AU
    - BD
    - BE
    - BG
    - BH
    - BR
    - BW
    - CA
    - CH
    - CI
    - CL
    - CN
    - CO
    - CY
    - CZ
    - DE
    - DK
    - EC
    - EG
    - ES
    - FI
    - FR
    - GB
    - GR
    - HK
    - HR
    - HU
    - ID
    - IE
    - IL
    - IN
    - IS
    - IT
    - JP
    - KH
    - KR
    - KW
    - LK
    - LU
    - MX
    - MY
    - NL
    - 'NO'
    - NZ
    - PE
    - PH
    - PK
    - PL
    - PT
    - QA
    - RU
    - SA
    - SE
    - SG
    - SI
    - SK
    - TH
    - TN
    - TR
    - TT
    - TW
    - US
    - VN
    - ZA
    - ZM
    x-api-evangelist-note: >-
      Only the boolean `false` member is replaced with the string "NO"; every other member is
      reproduced verbatim from the published enum.
- target: $.info
  description: >-
    Record the canonical, machine-readable locations of this contract, which MerQube states in its
    SDK Overview but not in the document itself.
  update:
    x-spec-locations:
      resolved: https://api.merqube.com/api
      raw: https://api.merqube.com/api-raw
      rendered: https://www.merqube.com/api
      docs: https://merqube.stoplight.io/
    x-support-contact: support@merqube.com
- target: $.info
  description: >-
    Document the response envelope, which is uniform across the API but described nowhere.
  update:
    x-response-envelope:
      results: array of the requested resource
      error_codes: >-
        array of {code, message} carrying PARTIAL failures on an HTTP 200 - e.g. code "00001"
        message "RESULTS_WERE_FILTERED" when namespace permissions withheld rows
      deprecation_warnings: array reserved for in-band deprecation notices; observed empty
      linked_resources: object of related resource references
      x-observed: '2026-08-25 on GET https://api.merqube.com/index'
- target: $.info
  description: >-
    Encode the concurrency contract. MerQube's SDK Overview states the `status` block must be sent
    on PUT/PATCH and the write is rejected unless it matches storage - a compare-and-set that no
    reader of the OpenAPI alone would discover.
  update:
    x-concurrency:
      mechanism: compare-and-set
      token_field: status
      required_on:
      - PUT
      - PATCH
      on_mismatch: write rejected
      idempotency_key_header: null
      duplicate_create: HTTP 409 on a duplicate (name, namespace)
      lock_field: status.locked_after
      source: https://github.com/merqube/merqube-client-lib/blob/main/docs/Overview.md
- target: $.info
  description: >-
    Encode the authorization model - namespaces, not scopes - so an agent can reason about why a
    result set is short.
  update:
    x-authorization-model:
      primitive: namespace
      public_namespace: default
      anonymous_access: true
      scopes: none
      partial_filtering_signal: error_codes[].code == "00001"
      grant_process: request namespace access from support@merqube.com
- target: $.servers
  description: >-
    Note that the staging host named in MerQube's Stoplight-hosted copy of this spec
    (staging.api.merqube.com) is stale; the live document names api.staging.merqube.com, which
    responds. Recorded so a reader of the docs portal is not sent to a dead host.
  update:
  - url: https://api.merqube.com
    description: Production server
    x-verified: '2026-08-25 - GET /api returned 200'
  - url: https://api.staging.merqube.com
    description: Testing server for next generation features
    x-verified: '2026-08-25 - GET /api returned 200 with the same document'
    x-superseded-alias: https://staging.api.merqube.com
- target: $
  description: >-
    Flag the two path keys published without a leading slash. They are invalid against the OpenAPI
    path-templating rules and they are why MerQube's own Stoplight Prism mock refuses to start
    (422 UNPROCESSABLE_ENTITY, "Malformed path 'index/{uuid}/identifier/{provider}'"). The repair
    is to rename each key with a leading "/"; that is a key rename rather than a value patch, so it
    is recorded here as a finding rather than applied.
  update:
    x-api-evangelist-findings:
      malformed_path_keys:
      - index/{uuid}/identifier/{provider}
      - index/{uuid}/identifier/{provider}/{identifier_name}
      impact: >-
        Breaks the hosted mock at https://stoplight.io/mocks/merqube/api/445185098 and any strict
        OpenAPI 3.1 validator.
      fix: prefix each key with "/"
      x-observed: '2026-08-25'
- target: $
  description: >-
    Declare the tags MerQube uses on operations but does not define, so a rendered reference groups
    correctly instead of dropping operations into an untitled bucket.
  update:
    tags:
    - name: index
      description: Index manifests, their portfolios, documents, data collections and run state.
    - name: identifier
      description: >-
        Vendor dissemination tickers binding an index to Bloomberg, Reuters, Morningstar, FactSet,
        Nasdaq or Wind.
    - name: security
      description: SecAPI - security metrics, levels and statistics.
    - name: security_list
      description: Named, permissioned collections of securities.
    - name: portfolio_handler
      description: Target-portfolio selection, validation, locking and dissemination policy.
    - name: options
      description: Listed-option pricing, strike solving and availability.
    - name: legacy_equity_security
      description: >-
        Superseded equity metric endpoints under /security/equity_legacy/. Named "legacy" by
        MerQube but not marked deprecated and carrying no sunset date.
    - name: helper
      description: >-
        Server-side index templating and solvers. These render a complete index manifest WITHOUT
        creating it - the closest thing this API has to a dry-run.
    - name: api
      description: Self-description - GET /api returns this OpenAPI document.

Work with this as data

Every overlay here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/merqube-api-openapi-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.