Bullet Rollup API

The Rollup API from Bullet — 3 operation(s) for rollup.

OpenAPI Specification

bullet-rollup-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Bullet Trading Account Rollup API
  description: REST API for the Bullet exchange. Provides Binance FAPI-compatible endpoints for trading, account management, and market data.
  contact:
    name: Bullet
    url: https://bullet.xyz
  license:
    name: Proprietary
  version: 0.1.0
servers:
- url: /
  description: Current server
- url: https://tradingapi.mainnet.bullet.xyz
  description: Mainnet
- url: https://tradingapi.testnet.bullet.xyz
  description: Testnet
- url: https://tradingapi.staging.bullet.xyz
  description: Staging
tags:
- name: Rollup
paths:
  /rollup/constants:
    get:
      summary: Get the rollup constants.
      operationId: constants
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RollupConstants'
        '503':
          description: Constants not available
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
      tags:
      - Rollup
  /rollup/schema:
    get:
      summary: Get the rollup schema (unwrapped).
      operationId: schema
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
        '503':
          description: Schema not available
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
      tags:
      - Rollup
  /rollup/simulate:
    post:
      summary: Simulate a transaction against the current rollup state without committing.
      description: 'Pass-through proxy to the sequencer''s `/rollup/simulate`. The body is a JSON

        `SimulateParameters` document (runtime `call` + `sender`), NOT a signed borsh

        tx, so this route intentionally skips the tx validators and forwards the

        request unchanged — mirroring the rest of the `/rollup/*` passthrough.'
      operationId: simulate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimulateParameters'
        required: true
      responses:
        '200':
          description: Simulation completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimulateOutcome'
        '400':
          description: Invalid simulation request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '422':
          description: Simulation request failed validation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '500':
          description: Simulation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
        '502':
          description: Upstream service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
      tags:
      - Rollup
components:
  schemas:
    RollupConstants:
      type: object
      description: Response from the `/rollup/constants` endpoint.
      required:
      - chain_id
      - chain_name
      - gas_token_id
      - hyperlane_domain
      - address_prefix
      properties:
        address_prefix:
          type: string
        chain_id:
          type: integer
          format: uint64
          minimum: 0
        chain_name:
          type: string
        gas_token_id:
          type: string
        hyperlane_domain:
          type: integer
          format: uint64
          minimum: 0
    ApiErrorDetail:
      oneOf:
      - $ref: '#/components/schemas/JsonValidationErrorDetail'
      - type: object
      description: 'Typed details body. Variant order is important for untagged

        deserialization: keep the more-specific shape (`JsonValidation`)

        before more-permissive ones. `Upstream` holds the upstream payload

        verbatim (object, string, array, number, etc.) so pre-PR clients

        reading `details.error` (or `details` directly) keep working.'
    FailOutcome:
      type: object
      description: Skipped simulation outcome.
      required:
      - reason
      properties:
        reason:
          type: string
          description: The reason the transaction was skipped
    SimulateOutcome:
      oneOf:
      - allOf:
        - $ref: '#/components/schemas/SuccessOutcome'
          description: The transaction executed successfully.
        - type: object
          required:
          - outcome
          properties:
            outcome:
              type: string
              enum:
              - success
        description: The transaction executed successfully.
      - allOf:
        - $ref: '#/components/schemas/RevertOutcome'
          description: The transaction reverted during execution.
        - type: object
          required:
          - outcome
          properties:
            outcome:
              type: string
              enum:
              - reverted
        description: The transaction reverted during execution.
      - allOf:
        - $ref: '#/components/schemas/FailOutcome'
          description: The transaction was skipped due to pre-execution errors.
        - type: object
          required:
          - outcome
          properties:
            outcome:
              type: string
              enum:
              - skipped
        description: The transaction was skipped due to pre-execution errors.
      description: 'Outcome of a transaction simulation.


        Discriminated on `outcome`, mirroring the sequencer''s `SimulateOutcome`

        (`sov-rollup-apis`): `success` / `reverted` / `skipped`.'
    TxDetailsParameter:
      type: object
      description: Optional transaction details for a simulation request.
      properties:
        gas_limit:
          type: array
          items:
            type: integer
            format: int64
            minimum: 0
          description: Gas limit for the transaction, as an array of u64 values
        max_fee:
          type: string
          description: Maximum fee the sender is willing to pay
        max_priority_fee_bips:
          type: integer
          format: uint64
          description: Maximum priority fee in basis points
          minimum: 0
    JsonValidationErrorDetail:
      type: object
      description: 'One JSON shape failure: machine-readable `rule` + full serde

        message including line/column. Surfaced under `details` on the wire.'
      required:
      - rule
      - message
      properties:
        message:
          type: string
          example: 'invalid type: integer `24500000`, expected a string at line 4 column 30'
        rule:
          type: string
          example: wrong_type
    SuccessOutcome:
      type: object
      description: Successful simulation outcome.
      required:
      - gas_used
      - priority_fee
      - events
      properties:
        events:
          type: array
          items:
            $ref: '#/components/schemas/SimulatedEvent'
          description: Events emitted during execution
        gas_used:
          type: string
          description: Gas consumed by the transaction (gas-token amount, as a decimal string)
        priority_fee:
          type: string
          description: Priority fee paid (gas-token amount, as a decimal string)
    SequencerParameter:
      type: object
      description: Optional sequencer configuration for a simulation request.
      properties:
        da_address:
          type: string
          description: Custom data availability address for the sequencer
        rollup_address:
          type: string
          description: Custom rollup address for the sequencer
    RevertOutcome:
      type: object
      description: Reverted simulation outcome.
      required:
      - detail
      properties:
        detail:
          type: object
          description: Structured detail about the revert (`ErrorContext`, an arbitrary JSON object)
    SimulateParameters:
      type: object
      description: 'Parameters for a transaction simulation request.


        Mirrors the sequencer''s `SimulateParameters`. Documentation-only: like

        `/tx/submit`, the handler forwards the raw body, so this type is not

        deserialized in-process.'
      required:
      - sender
      - call
      properties:
        call:
          type: object
          description: The runtime call to simulate, provided as JSON
        sender:
          type: string
          description: The credential ID of the transaction sender
        sequencer:
          $ref: '#/components/schemas/SequencerParameter'
          description: Optional sequencer configuration
        tx_details:
          $ref: '#/components/schemas/TxDetailsParameter'
          description: Optional transaction details (gas limit, fees)
        uniqueness:
          type: object
          description: Optional uniqueness data for the transaction
    ApiErrorResponse:
      type: object
      description: 'Structured API error response matching Bullet API format.


        All error responses from the trading API conform to this schema.'
      required:
      - status
      - message
      properties:
        details:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/ApiErrorDetail'
            description: Structured per-failure details. Shape depends on the variant.
        error_id:
          type:
          - string
          - 'null'
          description: Error identifier for support.
          example: 8b2e4d9f-7a1c-4f0e-9c5d-3e6a8b1c2d4f
        message:
          type: string
          description: Human-readable error message.
          example: 'Transaction validation failed: insufficient funds'
        status:
          type: integer
          format: uint16
          description: HTTP status code.
          example: 400
          minimum: 0
    SimulatedEvent:
      type: object
      description: An event emitted during transaction simulation.
      required:
      - value
      - key
      - module
      properties:
        key:
          type: string
          description: The event key
        module:
          type: string
          description: The module that emitted the event
        value:
          type: object
          description: The event data (arbitrary JSON)