MerQube Security API

securities

Operations 8

GET /security Returns the list of security types
GET /security/{type} get one or more metrics for one or more securities
POST /security/{type} Insert new securities
POST /security/{type}/data Insert new security metrics
POST /security/{type}/data/delete Mark existing security metrics as deprecated
GET /security/{type}/metrics Get the metrics defined for a set of securities
DELETE /security/{type}/{secid} Delete a security
GET /security/{type}/{secid}/metrics Get the metrics defined for a givenn security by id

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/merqube-security-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

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

OpenAPI Specification

merqube-security-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Merqube Security API
  version: 4.40.0
  contact:
    email: support@merqube.com
    name: API Support
    url: https://www.merqube.com/contact
  description: 'Operations tagged security across 3 of this provider''s published API definitions: merqube-api-openapi.json, merqube-api-raw.yaml, merqube-stoplight-docs-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- description: Production server
  url: https://api.merqube.com
- description: Testing server for next generation features
  url: https://api.staging.merqube.com
- url: https://staging.api.merqube.com
  description: Testing server for next generation features
tags:
- description: securities
  name: security
paths:
  /security:
    get:
      description: Returns the list of security types (note - equity is not currently under this)
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  properties:
                    name:
                      type: string
                  type: object
                type: array
          description: list of security types
      summary: Returns the list of security types
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
  /security/{type}:
    parameters:
    - $ref: '#/components/parameters/sectypeParam'
    get:
      description: get one or more metrics for one or more securities
      parameters:
      - $ref: '#/components/parameters/nameParam'
      - $ref: '#/components/parameters/namesParam'
      - description: single id to pull
        in: query
        name: id
        schema:
          type: string
      - $ref: '#/components/parameters/idsParam'
      - description: comma delimited list of metrics
        example: Level,Portfolio
        in: query
        name: metrics
        schema:
          type: string
      - description: "a tiny query language that allows filtering securities by their metric values.\nFor example, 'get all futures contracts with expiry < x and root == Y'.\n\nThis is not a row-level filter.\nThis is intended for 'metadata' like metrics and not for metrics with many values, as the results could be surprising.\nFor example, 'get me prices for this week for all stocks that have ever closed above 1000' will contain this weeks results, and those prices may be < 1000;\n  however, given this filter, those stocks *at one point* closed > 1000.\n\nParenthesis and logicl ors between clauses are not currently supported.\nAn arbitrary number of and clauses is supported, and or within a clause is supported, IE 'root = X or Y'\n\nThe supported value oeprators are '!=', '==', '>=', '<=', '<', '>'\n\nThe first parsed operator in each `^` seperated clause is used as the operator - no additional checking is performed, so something like\n`==<=` will be parsed as \"is equal to `<=`\" which is probably not what you want (and is likely to return an empty result set).\n\nThe supported logical operators are '^' (and, since & conflicts with URL query args) and ',' (or)\n\nWhen the target value is a list (contains ','), the only two valid operators are != and ==. IE you cannot use <=X,Y etc.\n\nWhen the operator is '==' and the value is '*', it means \"the security has this metric defined at least once\" (ie, we don't care about the value, just that the row exists)\n\nExamples -\n\n  futures_contract...&securityfilter=root==BTC,B6 - all contracts with root euql to BTC or B6\n\n  futures_contract...&securityfilter=root==BTC^expiry.merq>=2022-01-01T00:00:00 - all contracts with BTC root expiring in 2022 or later\n\n  futures_root...&securityfilter=cme_limit_scaling_factor!=1.0 - all roots with a special/custom scaling factor such as cents\n\nIt can also replace the names= parameter, e.g.,\n\n   futures_root...&securityfilter=name==A6,B6 - get the roots named either A6 or B6 (returns 2 records)\n"
        in: query
        name: securityfilter
        schema:
          type: string
      - description: only return securities in this namespace
        example: mybank
        in: query
        name: namespace
        schema:
          type: string
      - $ref: '#/components/parameters/startDateParam'
      - $ref: '#/components/parameters/endDateParam'
      - $ref: '#/components/parameters/formatParam'
      - description: view the database as_of a certain timestamp; data corrections that were backdated but inserted after this timestamp are ignored
        in: query
        name: as_of
        schema:
          description: should be a date-time as a string; YYYY-mm-dd HH-mm-ss
          type: string
      - description: view only data that was received since this timestamp. Note that because data could be corrected for previous days (eff_ts), this does not necessarily mean that eff_ts >= the since date. This will obtain data that was known about on or after the since date, but that data could be a correction for previous days.
        in: query
        name: since
        schema:
          description: should be a date-time as a string; YYYY-mm-dd HH-mm-ss
          type: string
      - description: only applies when format!=csv. Includes additional information about the raw security api records, such as the provider timestamp and the source of the data. This is an employee only feature.
        in: query
        name: raw
        schema:
          type: boolean
      - description: Shows the full history of records including corrected records (that is, no `max(prov_ts)`)). This is an employee only feature. Also implies raw=true automatically. NOTE, this breaks the typical unique index of `id/eff_ts/metric` because if there were corrections, the metric may have changed multiple times - the new unique index includes `prov_ts` in this case.
        in: query
        name: show_full_history
        schema:
          type: boolean
      - description: turns on debugging information by injecting a debug section at the top level
        in: query
        name: debug
        required: false
        schema:
          enum:
          - 'true'
          type: string
      - description: Only return records that have been validated by internal data quality system. Defaults to false
        in: query
        name: validated_only
        schema:
          type: boolean
      - $ref: '#/components/parameters/preferReadReplicaParam'
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  error_codes:
                    $ref: '#/components/schemas/ErrorCodes'
                  results:
                    items:
                      $ref: '#/components/schemas/SecurityMetrics'
                    type: array
                type: object
            text/csv:
              example: ts,index,Level,Portfolio 2021-07-21T00:00:00,XXX,1,[...]
          description: ok
        '403':
          description: not authorized
      summary: get one or more metrics for one or more securities
      tags:
      - security
    post:
      description: Insert new securities
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewSecurity'
        description: some of this is a WIP RE initial metrics etc. Making a contract may have fields rem
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SecurityCreationResponse'
          description: OK
        '400':
          description: bad request
        '403':
          description: unauthorized
        '409':
          description: duplicate, e.g., name already exists
      summary: Insert new securities
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
  /security/{type}/data:
    post:
      description: Insert new security metrics
      parameters:
      - $ref: '#/components/parameters/sectypeParam'
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/SecurityMetrics'
              type: array
      responses:
        '200':
          description: ok
        '400':
          description: data in request body is malformed or not of the expected format
        '403':
          description: not authorized
      summary: Insert new security metrics
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
  /security/{type}/data/delete:
    post:
      description: 'Mark existing security metrics as deleted - not really RESTful, more of an RPC endpoint, that allows the bulk (soft) deletion of records.

        Records are not hard-deleted; as in "as_of" queries are preserved, but they are marked with a sentinel that causes them not to be served with more recent or non-as of queries.

        Note -  if the goal is to insert *a correction* - as in, there *should be a metric for this id/eff_ts, but the current value is wrong*, this method is NOT for that case.

        That case should be handled by doing a normal insert with a higher prov_ts.

        This delete is for the case where data should not have existed (or "was NULL") for an eff_ts as known by a given prov_ts.

        Prov_ts is optional on this method.

        If prov_ts is supplied, the deletion will take effect if theres no data with a higher prov_ts, but will not take effect if new inserts have a higher prov_ts. This [optional] acceptance of prov_ts is to support replaying data in any order, where data is added at prov_ts1, deleted at at prov_ts2, but then re-added (After the delete) by the provider at prov_ts3 - we want the results to be consistent regardless of what order these are replayed in.

        If prov_ts is not supplied, it is set to episolon greater than the current max prov_ts, and will take effect until newer data with a higher prov_ts comes in.

        It is reccomended that prov_ts is supplied unless the goal is absolutely to null out whatever the latest value is.

        '
      parameters:
      - $ref: '#/components/parameters/sectypeParam'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                records:
                  items:
                    $ref: '#/components/schemas/SecurityMetricsDeletion'
                  type: array
              required:
              - records
              type: object
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  successful_deletions:
                    type: number
                type: object
          description: ok
        '400':
          description: data in request body is malformed or not of the expected format
        '403':
          description: not authorized
      summary: Mark existing security metrics as deprecated
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
  /security/{type}/metrics:
    get:
      description: Get the metrics defined for a set of securities, however this only currently supports getting exactly one by name - more to come. That is, this allows you to query the metric definitions of a security by name rather than by id.
      parameters:
      - $ref: '#/components/parameters/sectypeParam'
      - $ref: '#/components/parameters/nameParam'
      - $ref: '#/components/parameters/preferReadReplicaParam'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MetricsSchema'
                type: array
          description: 200 response
      summary: Get the metrics defined for a set of securities
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
  /security/{type}/{secid}:
    delete:
      description: Delete a security. It can be remade with the same name after - but this destroys all metrics, and as_of and since.
      parameters:
      - $ref: '#/components/parameters/sectypeParam'
      - description: id of the security for which the data is requested
        in: path
        name: secid
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 response
        '403':
          description: not authorized
        '404':
          description: security does not exist
      summary: Delete a security
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
  /security/{type}/{secid}/metrics:
    get:
      description: Get the metrics defined for a given security by id
      parameters:
      - $ref: '#/components/parameters/sectypeParam'
      - description: id of the security for which the data is requested
        in: path
        name: secid
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/preferReadReplicaParam'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MetricsSchema'
                type: array
          description: 200 response
        '403':
          description: not authorized
        '404':
          description: security does not exist
      summary: Get the metrics defined for a givenn security by id
      tags:
      - security
    servers:
    - description: Production server
      url: https://api.merqube.com
    - description: Testing server for next generation features
      url: https://api.staging.merqube.com
components:
  parameters:
    sectypeParam:
      description: the type of security (futures_root, intraday_index etc)
      in: path
      name: type
      required: true
      schema:
        type: string
    endDateParam:
      description: End date for the results/computation
      in: query
      name: end_date
      required: false
      schema:
        $ref: '#/components/schemas/MerqTimestamp'
    nameParam:
      description: Taken as an *Exact* name to find a resource by
      in: query
      name: name
      required: false
      schema:
        example: MQUSTB20
        type: string
    preferReadReplicaParam:
      description: Opt into replica/cache-tolerant reads. Defaults to false, which keeps DB reads on the writer and bypasses SecAPI full-query caches for stronger read-after-write consistency.
      in: query
      name: prefer_read_replica
      required: false
      schema:
        default: false
        type: boolean
    startDateParam:
      description: Start date for the results/computation
      in: query
      name: start_date
      required: false
      schema:
        $ref: '#/components/schemas/MerqTimestamp'
    formatParam:
      description: choose csv (Default json)
      in: query
      name: format
      required: false
      schema:
        enum:
        - csv
        type: string
    namesParam:
      description: Taken as a comma delimited list of *Exact* names to find a list if resources by
      in: query
      name: names
      required: false
      schema:
        example: MQUSTB20,MQUSTRAV
        type: string
    idsParam:
      description: Taken as a comma delimited list of ids to pull. ignored if ?names is specified.
      in: query
      name: ids
      required: false
      schema:
        example: abcd1234,wxyz4567
        type: string
    nameParam_2:
      name: name
      in: query
      description: Taken as an *Exact* name to find a resource by
      required: false
      schema:
        type: string
        examples:
        - MQUSTB20
    namesParam_2:
      name: names
      in: query
      description: Taken as a comma delimited list of *Exact* names to find a list if resources by
      required: false
      schema:
        type: string
        examples:
        - MQUSTB20,MQUSTRAV
    formatParam_2:
      name: format
      in: query
      description: choose csv (Default json)
      required: false
      schema:
        const: csv
    idsParam_2:
      name: ids
      in: query
      description: Taken as a comma delimited list of ids to pull. ignored if ?names is specified.
      required: false
      schema:
        type: string
        examples:
        - abcd1234,wxyz4567
  schemas:
    MetricsSchema:
      properties:
        data_type:
          enum:
          - string
          - number64
          - datetime64
          - int64
          - bool
          - object
          type: string
        description:
          description: a description of what this metric represents
          type: string
        name:
          description: metric name
          type: string
        object_schema:
          description: optional - this supports complex objects, ie you can specify the  metric is of this schema. THis allows you to upload a json schema itself of this metric. THis is for downstream users of this metric.
          type: object
      required:
      - data_type
      - description
      - name
      type: object
    SecurityCreationResponse:
      properties:
        id:
          type: string
        inserts:
          type: integer
      type: object
    SecurityMetrics:
      properties:
        eff_ts:
          $ref: '#/components/schemas/MerqTimestamp'
        id:
          example: 0000699a-fcd7-45d4-8ce4-064a4ffeced0
          type: string
        lineage:
          description: data lineage information, for MerQube use only.
          type: object
        metric:
          example: Level
          type: string
        prov_ts:
          $ref: '#/components/schemas/MerqTimestamp'
        source:
          example: some_gcp_feed
          type: string
        value:
          anyOf:
          - type: string
          - type: number
          - type: integer
          - type: boolean
          - items: {}
            type: array
          - type: object
      required:
      - eff_ts
      - id
      - metric
      - value
      - prov_ts
      type: object
    ErrorCodes:
      properties:
        code:
          type: string
        message:
          type: string
      type: object
    NewSecurity:
      additionalProperties: false
      properties:
        eff_ts:
          $ref: '#/components/schemas/MerqTimestamp'
          description: 'DEPRECATED: this is no longer used for security creates, but allowed for backwards compatibility'
        name:
          pattern: ^[^!*'() ;:@&=+$,/?%#\[\]]
          type: string
        namespace:
          description: the calling user must have permission to this namespace to create the security in this namespace
          type: string
        prov_ts:
          $ref: '#/components/schemas/MerqTimestamp'
        source:
          type: string
      required:
      - name
      - namespace
      - prov_ts
      type: object
    SecurityMetricsDeletion:
      description: like a SecurityMetric, but no value and an optional prov_ts; marks the deletion of an id/eff_ts/metric tuple.
      properties:
        eff_ts:
          $ref: '#/components/schemas/MerqTimestamp'
        id:
          example: 0000699a-fcd7-45d4-8ce4-064a4ffeced0
          type: string
        metric:
          example: Level
          type: string
        prov_ts:
          $ref: '#/components/schemas/MerqTimestamp'
        source:
          example: some_gcp_feed
          type: string
      required:
      - id
      - eff_ts
      - metric
      type: object
    MerqTimestamp:
      anyOf:
      - format: date-time
        type: string
      - format: date
        type: string
      - pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}(?:[ T][0-9]{2}:[0-9]{2}:[0-9]{2})?(?:[.][0-9]{1,6})?$
        type: string
      example:
      - '2021-01-01'
      - '2021-01-01T01:01:01'
      - 2021-01-01T01:01:01.zzzzz
    SecurityMetrics_2:
      type: object
      properties:
        eff_ts:
          $ref: '#/components/schemas/MerqTimestamp_2'
        id:
          type: string
          examples:
          - 0000699a-fcd7-45d4-8ce4-064a4ffeced0
        metric:
          type: string
          examples:
          - Level
        source:
          type: string
          examples:
          - some_gcp_feed
        prov_ts:
          $ref: '#/components/schemas/MerqTimestamp_2'
        value:
          anyOf:
          - type: string
          - type: number
          - type: integer
          - type: boolean
          - type: array
          - type: object
      required:
      - eff_ts
      - id
      - metric
      - prov_ts
      - value
    MerqTimestamp_2:
      examples:
      - - '2021-01-01'
        - '2021-01-01T01:01:01'
        - 2021-01-01T01:01:01.zzzzz
      anyOf:
      - type: string
        format: date-time
      - type: string
        format: date
      - type: string
        pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}(?:[ T][0-9]{2}:[0-9]{2}:[0-9]{2})?(?:[.][0-9]{1,6})?$
x-refined-from:
- merqube-api-openapi.json
- merqube-api-raw.yaml
- merqube-stoplight-docs-openapi.yaml
x-internal: true