OpenFIGI API

OpenFIGI is the free, public REST API operated by Bloomberg as the FIGI Registration Authority for the Object Management Group (OMG) Financial Instrument Global Identifier standard. It maps third-party identifiers (TICKER, ISIN, CUSIP, SEDOL, BBGID, COMMON, etc.) to FIGIs and exposes search and filter endpoints across hundreds of millions of active and inactive instruments spanning equities, fixed income, derivatives, currencies, commodities, indices, and crypto. The /v3 API is JSON over HTTPS at api.openfigi.com, with optional X-OPENFIGI-APIKEY authentication that lifts rate limits.

OpenFIGI API is one of 6 APIs that Bloomberg L.P. publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 2 JSON Schema definitions.

Tagged areas include Symbology, Reference Data, FIGI, Free API, and Open Standard. The published artifact set on APIs.io includes API documentation, an API reference, a getting-started guide, rate-limit docs, SDKs, an OpenAPI specification, 1 Naftiko capability spec, and 2 JSON Schemas.

Documentation

Specifications

SDKs

Schemas & Data

Other Resources

OpenAPI Specification

openfigi-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: OpenFIGI API
  description: |
    The OpenFIGI API is the free, public REST API operated by Bloomberg as
    Registration Authority for the Object Management Group (OMG) Financial
    Instrument Global Identifier (FIGI) standard. It maps third-party
    identifiers (TICKER, ID_ISIN, ID_CUSIP, ID_SEDOL, ID_BB_GLOBAL, COMPOSITE_ID_BB_GLOBAL,
    etc.) to FIGIs and exposes search and filter endpoints across hundreds of
    millions of active and inactive securities.

    The /v3 API is JSON over HTTPS. Authentication is optional via the
    `X-OPENFIGI-APIKEY` header; supplying an API key raises rate limits.

    Note: /v2 is deprecated with a sunset date of July 1, 2026 — clients should
    migrate to /v3 endpoints and switch error handling from "error" to "warning"
    on no-match responses.
  version: '3.0.0'
  contact:
    name: OpenFIGI Support
    url: https://www.openfigi.com/api
  license:
    name: OpenFIGI Terms of Service
    url: https://www.openfigi.com/about/terms
servers:
  - url: https://api.openfigi.com/v3
    description: OpenFIGI v3 production
tags:
  - name: Mapping
    description: Map third-party identifiers to FIGIs.
  - name: Search
    description: Keyword search across the FIGI universe.
  - name: Filter
    description: Filtered, paginated search across the FIGI universe.
  - name: Reference
    description: Enumerated values for request and response fields.
security:
  - {}
  - ApiKeyAuth: []
paths:
  /mapping:
    post:
      operationId: mapIdentifiers
      summary: Map Third-Party Identifiers To FIGIs
      description: |
        Map one or more third-party identifiers (ticker, ISIN, CUSIP, SEDOL,
        Bloomberg Global ID, etc.) to FIGI records. The request body is a JSON
        array of mapping jobs. Each job is processed independently and returns
        either matched data, a warning (no match), or an error.

        Without an API key: 25 requests/minute, up to 10 jobs per request.
        With an API key: 25 requests/6 seconds, up to 100 jobs per request.
      tags:
        - Mapping
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              maxItems: 100
              items:
                $ref: '#/components/schemas/MappingJob'
            examples:
              ticker_lookup:
                summary: TICKER lookup for IBM US
                value:
                  - idType: TICKER
                    idValue: IBM
                    exchCode: US
      responses:
        '200':
          description: Per-job mapping results, in the same order as the request.
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
            X-RateLimit-Remaining:
              schema:
                type: integer
            X-RateLimit-Reset:
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MappingJobResult'
              examples:
                ibm_us_match:
                  summary: TICKER=IBM, exchCode=US match
                  value:
                    - data:
                        - figi: BBG000BLNNH6
                          name: INTL BUSINESS MACHINES CORP
                          ticker: IBM
                          exchCode: US
                          compositeFIGI: BBG000BLNNH6
                          securityType: Common Stock
                          marketSector: Equity
                          shareClassFIGI: BBG001S5S399
                          securityType2: Common Stock
                          securityDescription: IBM
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /mapping/values/{key}:
    get:
      operationId: listMappingValues
      summary: List Enumerated Values For A Mapping Field
      description: |
        Return the list of valid values for an enum-like mapping field such as
        `idType`, `exchCode`, `currency`, `securityType`, `securityType2`,
        `marketSecDes`, `micCode`, or `stateCode`.
      tags:
        - Reference
      parameters:
        - name: key
          in: path
          required: true
          description: The mapping field to enumerate.
          schema:
            type: string
            enum:
              - idType
              - exchCode
              - currency
              - micCode
              - marketSecDes
              - securityType
              - securityType2
              - stateCode
      responses:
        '200':
          description: Valid values for the given field.
          content:
            application/json:
              schema:
                type: object
                properties:
                  values:
                    type: array
                    items:
                      type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /search:
    post:
      operationId: searchFigis
      summary: Keyword-Search The FIGI Universe
      description: |
        Search across the FIGI universe by free-text query plus optional
        filters such as exchCode, currency, securityType, marketSecDes, and
        date ranges. Results are paginated with the opaque `start` cursor
        returned in the previous response.

        Without an API key: 5 requests/minute. With an API key: 20 requests/minute.
        Results are capped at 15,000 records per query.
      tags:
        - Search
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: Search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /filter:
    post:
      operationId: filterFigis
      summary: Filter The FIGI Universe With Result Counts
      description: |
        Filter the FIGI universe with optional keyword query, returning results
        sorted alphabetically by FIGI plus a `total` count of matches. Useful
        for inventorying a population of securities matching a set of criteria.

        Without an API key: 5 requests/minute. With an API key: 20 requests/minute.
        Results are capped at 15,000 records per query.
      tags:
        - Filter
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: Filter results with total count.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SearchResponse'
                  - type: object
                    properties:
                      total:
                        type: integer
                        description: Total matching records.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-OPENFIGI-APIKEY
      description: |
        Optional OpenFIGI API key. Sign up at https://www.openfigi.com/user/signup
        to receive a key and unlock higher rate limits.
  schemas:
    MappingJob:
      type: object
      required:
        - idType
        - idValue
      properties:
        idType:
          type: string
          description: The third-party identifier type.
          enum:
            - ID_ISIN
            - ID_BB_UNIQUE
            - ID_SEDOL
            - ID_COMMON
            - ID_WERTPAPIER
            - ID_CUSIP
            - ID_BB
            - ID_ITALY
            - ID_EXCH_SYMBOL
            - ID_FULL_EXCHANGE_SYMBOL
            - COMPOSITE_ID_BB_GLOBAL
            - ID_BB_GLOBAL_SHARE_CLASS_LEVEL
            - ID_BB_SEC_NUM_DES
            - ID_BB_GLOBAL
            - TICKER
            - BASE_TICKER
            - ID_CUSIP_8_CHR
            - OCC_SYMBOL
            - UNIQUE_ID_FUT_OPT
            - OPRA_SYMBOL
            - TRADING_SYSTEM_IDENTIFIER
            - ID_CINS
            - ID_BB_PROP
            - VENDOR_INDEX_CODE
        idValue:
          type: string
          description: The identifier value.
        exchCode:
          type: string
          description: Exchange code filter (e.g. US, LN, GR).
        micCode:
          type: string
          description: ISO 10383 Market Identifier Code filter.
        currency:
          type: string
          description: ISO 4217 currency code filter (e.g. USD, EUR).
        marketSecDes:
          type: string
          description: Bloomberg market sector description (e.g. Equity, Comdty, Govt, Corp, Index, Curncy).
        securityType:
          type: string
          description: Security type filter (e.g. Common Stock, Future, Option).
        securityType2:
          type: string
          description: Secondary security type filter.
        includeUnlistedEquities:
          type: boolean
          description: Whether to include unlisted equities in results.
        optionType:
          type: string
          enum: [Call, Put]
        strike:
          type: array
          items:
            type: number
            nullable: true
          minItems: 2
          maxItems: 2
          description: Strike range as [min, max]; either bound may be null.
        contractSize:
          type: array
          items:
            type: number
            nullable: true
          minItems: 2
          maxItems: 2
        coupon:
          type: array
          items:
            type: number
            nullable: true
          minItems: 2
          maxItems: 2
        expiration:
          type: array
          items:
            type: string
            nullable: true
            format: date
          minItems: 2
          maxItems: 2
        maturity:
          type: array
          items:
            type: string
            nullable: true
            format: date
          minItems: 2
          maxItems: 2
        stateCode:
          type: string
    MappingJobResult:
      type: object
      description: |
        Each result has exactly one of `data`, `warning`, or `error`.
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/FigiRecord'
        warning:
          type: string
          description: Non-fatal condition such as "No identifier found."
        error:
          type: string
          description: Fatal error processing this job.
    FigiRecord:
      type: object
      properties:
        figi:
          type: string
          description: The 12-character Financial Instrument Global Identifier.
          example: BBG000BLNNH6
        name:
          type: string
          description: Long name of the instrument.
        ticker:
          type: string
        exchCode:
          type: string
        compositeFIGI:
          type: string
          description: Composite (country-level) FIGI for this instrument.
        uniqueID:
          type: string
        securityType:
          type: string
        marketSector:
          type: string
          description: Bloomberg market sector (Equity, Comdty, Govt, Corp, Index, Curncy, Pfd, Muni, M-Mkt).
        shareClassFIGI:
          type: string
          description: Share-class FIGI grouping multiple composite FIGIs for the same share class.
        uniqueIDFutOpt:
          type: string
          nullable: true
        securityType2:
          type: string
        securityDescription:
          type: string
        metadata:
          type: string
          nullable: true
    SearchRequest:
      type: object
      required:
        - query
      properties:
        query:
          type: string
          description: Free-text query string.
        exchCode:
          type: string
        micCode:
          type: string
        currency:
          type: string
        marketSecDes:
          type: string
        securityType:
          type: string
        securityType2:
          type: string
        includeUnlistedEquities:
          type: boolean
        start:
          type: string
          description: Opaque pagination cursor from a previous response.
    SearchResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/FigiRecord'
        next:
          type: string
          description: Opaque cursor for the next page; absent on the final page.
  responses:
    BadRequest:
      description: Malformed request (validation failed, schema mismatch, etc.).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    Unauthorized:
      description: Invalid X-OPENFIGI-APIKEY.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    TooManyRequests:
      description: Rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    ServerError:
      description: Internal server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    ServiceUnavailable:
      description: Service temporarily unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
  examples: {}