Bullish · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Bullish Trading API

9 actions 9 updates documentation extends openapi/bullish-trading-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Bullish's API. It is a proposal applied on top of the contract, not a document Bullish publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-consequencex-apievangelist-human-in-the-loopx-apievangelist-notex-apievangelist-providerx-apievangelist-enrichedx-apievangelist-artifactsdescriptionx-apievangelist-idempotency

Targets 4

$.info
$.components.securitySchemes.jwtTokenAuth
$.paths['/v1/wallets/withdrawal'].post
$.paths['/v2/orders'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Bullish Trading API
  version: 1.0.0
extends: openapi/bullish-trading-api-openapi.yml
x-generated: '2026-08-08'
x-method: generated
x-source: >-
  Derived from API Evangelist enrichment artifacts in all/bullish/ — conventions,
  errors, rate-limits, authentication, lifecycle and sandbox. Never mutates the
  harvested spec.
actions:
  - target: $.info
    update:
      x-apievangelist-provider: bullish
      x-apievangelist-enriched: '2026-08-08'
      x-apievangelist-artifacts:
        authentication: authentication/bullish-authentication.yml
        conventions: conventions/bullish-conventions.yml
        errors: errors/bullish-error-codes.yml
        problem-types: errors/bullish-problem-types.yml
        rate-limits: rate-limits/bullish-rate-limits.yml
        lifecycle: lifecycle/bullish-lifecycle.yml
        sandbox: sandbox/bullish-sandbox.yml
        data-model: data-model/bullish-data-model.yml
        conformance: conformance/bullish-conformance.yml
  - target: $.info
    update:
      description: >-
        The Bullish Trading API. REST over HTTPS, JSON only. Public market data is
        anonymous; private endpoints require a JWT bearer token minted by signing a
        login request with an ECDSA R1 or HMAC API key. Tokens are valid for 24
        hours. HMAC-derived tokens reach trading endpoints only — custody requires
        ECDSA. Versions v1 and v2 coexist in the path under /trading-api. Errors
        carry a numeric statusReasonCode plus statusReason text drawn from a
        published 167-code registry. Pagination is cursor-based via _pageSize /
        _nextPage / _previousPage with _metaData=true for navigation links. There is
        NO idempotency key — retries are governed by a strictly increasing BX-NONCE,
        so recover from a 5xx by querying the order by clientOrderId rather than by
        resubmitting.
  - target: $.info
    update:
      x-apievangelist-idempotency:
        supported: false
        mechanism: strictly-increasing BX-NONCE plus clientOrderId dedupe
        retry_safe: false
        recovery_operation: trade-get-order-by-client-order-id-v2
  - target: $.info
    update:
      x-apievangelist-rate-limits:
        default: 50 requests per second per category
        per_ip: 500 requests per 10 seconds, then a 60-second block
        headers: [x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset, x-ratelimit-global-breach]
        breach_codes: [96000, 96001]
        tier_upgrade_header: BX-RATELIMIT-TOKEN
  - target: $.info
    update:
      x-apievangelist-pagination:
        style: cursor
        params: [_pageSize, _metaData, _nextPage, _previousPage]
        page_sizes: [5, 25, 50, 100]
        default_page_size: 25
        envelope: {data: array, links: {next: string, previous: string}}
  - target: $.info
    update:
      x-apievangelist-environments:
        production:
          - https://api.exchange.bullish.com/trading-api
          - https://registered.api.exchange.bullish.com/trading-api
          - https://prod.access.bullish.com/trading-api
        simulation:
          - https://api.simnext.bullish-test.com/trading-api
          - https://registered.api.simnext.bullish-test.com/trading-api
          - https://simnext.access.bullish.com/trading-api
        bug_bounty:
          - https://api.bugbounty.bullish.com/trading-api
        self_service_simulation_access: false
  - target: $.components.securitySchemes.jwtTokenAuth
    update:
      x-apievangelist-login:
        ecdsa: POST /v2/users/login
        hmac: GET /v1/users/hmac/login
        logout: GET /v1/users/logout
        lifetime_hours: 24
        signing_headers: [BX-TIMESTAMP, BX-NONCE, BX-PUBLIC-KEY, BX-SIGNATURE]
        hmac_token_scope: trading-only
        ecdsa_token_scope: trading-and-custody
  - target: $.paths['/v1/wallets/withdrawal'].post
    update:
      x-apievangelist-consequence: irreversible
      x-apievangelist-human-in-the-loop: required
      x-apievangelist-note: >-
        Withdrawal destinations must be whitelisted (error 8336) and must belong to
        the calling user (error 8335). An ECDSA credential is mandatory — an
        HMAC-derived token is rejected on the custody surface.
  - target: $.paths['/v2/orders'].post
    update:
      x-apievangelist-consequence: financial
      x-apievangelist-human-in-the-loop: recommended
      x-apievangelist-note: >-
        Not idempotent. Supply clientOrderId and, on any 5xx or timeout, resolve the
        outcome with trade-get-order-by-client-order-id-v2 before resubmitting; a
        blind retry creates a second order or is rejected with 3007 / 3023.