openapi: 3.1.0 info: title: Hibachi Capital API version: 1.0.0 description: REST API for the Hibachi stablecoin-native perpetual futures and FX exchange. Provides public market data plus authenticated account, trading, and capital (deposit/withdraw/transfer) operations. Most endpoints require an API key in the Authorization header; order, withdrawal, and transfer operations additionally require a cryptographic signature (ECDSA for trustless accounts, HMAC for exchange-managed accounts). Converted faithfully from Hibachi's published public Postman collection. contact: name: Hibachi url: https://docs.hibachi.xyz/ x-apievangelist-source: https://api-doc.hibachi.xyz/ servers: - url: https://api.hibachi.xyz description: Account, trading and capital API (production) - url: https://data-api.hibachi.xyz description: Market data API (production) tags: - name: Capital description: 'Authenticated capital movement: balance, deposit info, withdraw, transfer' paths: /capital/balance: get: operationId: getCapitalBalance summary: /capital/balance tags: - Capital description: 'Usage Get the balance of your account. The returned balance is your net equity which includes unrealized PnL. Required Request Parameter: accountId: The account ID can be found on the UI details page of each API Key. Your Account ID will not be generated until your first deposit' parameters: - name: accountId in: query required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: object example: balance: '1998766.543274' '400': description: Bad request '401': description: Unauthorized - missing or invalid API key security: - ApiKeyAuth: [] /capital/history: get: operationId: getCapitalHistory summary: /capital/history tags: - Capital description: 'Usage Get the deposit and withdraw history of your account. It will return most recent up to 100 deposit and 100 withdraw. Required Request Parameter: accountId : The account ID can be found on the UI details page of each API Key. Your Account ID will not be generated until your first deposit; this ID is required for a lot of endpoints' parameters: - name: accountId in: query required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: object example: transactions: - assetId: 1 blockNumber: 0 id: 10 quantity: '20.000000' status: completed timestamp: 1728510232 transactionHash: '0x0000000000000000000000000000000000000000000000000000000000000000' transactionType: deposit - assetId: 1 id: 3 quantity: '3.061224' status: completed timestamp: 1728510702 transactionType: withdrawal withdrawalAddress: '0x0000000000000000000000000000000000000000' - assetId: 1 id: 13 quantity: '11.997367' srcAccountId: 134 srcAddress: '0x0000000000000000000000000000000000000000' status: completed timestamp: 1728510867 transactionType: transfer-in - assetId: 1 id: 7 quantity: '10.000000' receivingAccountId: 134 receivingAddress: '0x0000000000000000000000000000000000000000' status: completed timestamp: 1728510375 transactionType: transfer-out '400': description: Bad request '401': description: Unauthorized - missing or invalid API key security: - ApiKeyAuth: [] /capital/withdraw: post: operationId: submitWithdraw summary: /capital/withdraw tags: - Capital description: 'Usage Submit a withdraw request. Signing Use below field to sign the message and pass it in to signature field (65 bytes). Refer to the Signing section for more context assetId (4 bytes) quantity (8 bytes): should be no more than maximalWithdraw returned by /trade/account/info endpoint, otherwise it will be rejected. maxFees (8 bytes): should be at least returned by /market/exchange-info endpoint, otherwise it will be rejected. withdrawalAddress (20 bytes) Request Body Payload Required Fields accountId coin withdrawAddress quantity signature NOTE : Self Claim Option for trustless account: You can replace withdrawalAddress with selfWithdrawal , but you will need to follow our ABI to make direct contract interaction for claim the withdraw. Currently, the only coin we support is USDT .' requestBody: required: true content: application/json: schema: type: object example: accountId: 140 coin: USDT withdrawAddress: '0000000000000000000000000000000000000000' network: arbitrum quantity: '2.0113592' maxFees: '0.0113592' signature: '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' responses: '200': description: Successful response content: application/json: schema: type: object example: {} '400': description: Bad request '401': description: Unauthorized - missing or invalid API key security: - ApiKeyAuth: [] /capital/transfer: post: operationId: submitTransfer summary: /capital/transfer tags: - Capital description: Usage Submit a withdraw request. Signing Use below field to sign the message and pass it in to signature field (65 bytes). Refer to the Signing section for more context nonce (8 bytes) assetId (4 bytes) quantity (8 bytes) dstPublicKey (20 bytes) maxFeesPercent (8 bytes), should be at least returned value at /market/exchange-info endpoint, otherwise, it will be rejected. Required Request Body accountId coin fees nonce quantity receivingAddress signature Currently, the only coin we support is USDT . requestBody: required: true content: application/json: schema: type: object example: accountId: 140 coin: USDT fees: '0' nonce: 1728515344533 quantity: '1' dstPublicKey: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' signature: '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' responses: '200': description: Successful response content: application/json: schema: type: object example: {} '400': description: Bad request '401': description: Unauthorized - missing or invalid API key security: - ApiKeyAuth: [] /capital/deposit-info: get: operationId: getDepositInfo summary: /capital/deposit-info tags: - Capital description: 'Usage Get deposit address for a given account. Sending funds to this address allows for Required Request Parameter: ** publicKey: **The public key of the account' parameters: - name: accountId in: query required: true schema: type: string - name: publicKey in: query required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: object example: depositAddressEvm: '0x0000000000000000000000000000000000000000' '400': description: Bad request '401': description: Unauthorized - missing or invalid API key security: - ApiKeyAuth: [] components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: Authorization description: API key identifying the account. Required for all endpoints except public /market and /exchange endpoints. This key does NOT sign requests; order/withdraw/transfer payloads must also carry a signature generated with your ECDSA private key (trustless accounts) or HMAC secret (exchange-managed accounts).