Ripio Cryptocurrency Withdrawals API

The Cryptocurrency Withdrawals API from Ripio — 3 operation(s) for cryptocurrency withdrawals.

OpenAPI Specification

ripio-cryptocurrency-withdrawals-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Ripio Trade - API Documentation Book Cryptocurrency Withdrawals API
  version: v4.0
  description: "Welcome to the Ripio Trade API documentation.\n\n### Version\nThis API is currently in the version 4.\n\nIf there is need for any big change, a new version will be launched and this version will be maintained for at least 3 months.\n\nIf you're still using the version 3, [access the old documentation](../v3) and check the [migration guide](#tag/V3-Endpoint-Migrations).\n\n### Important\nUse the `Market` endpoints for all trading operations. The `Public` endpoints have a delay (cache) of up to 30 seconds.\n\nAll successful requests will result in a 200 HTTP Status.\n\nAll requests returns data in JSON format (application/json) and have a default body:\n\n\n### Success\n```\n{\n  \"error_code\": null,\n  \"message\": null,\n  \"data\": { }\n}\n```\n\n### Error\n```\n{\n  \"error_code\": [Error code],\n  \"message\": \"Error description\",\n  \"data\": null\n}\n```\n\n\nEndpoints that have a date filter will return data for the last 6 months if no value is sent in the `start_date` parameter.\n\n### URL structure\nThe endpoints URL follow this pattern:\n\n`https://api.ripiotrade.co/{version}/{method}[/{parameter}][?parameter=value...]`\n\n `https://api.ripiotrade.co/v4/tickers/BTC_BRL`\n\n### Limits\n\nThe request limits are based on the user's operational limits.\n\nThere are two types of limit, one of requests per second and another of daily requests. Both of them should be taken in consideration and the requests should be balanced so the daily limit isn't reached.\n\nUsers **without approved documentation** have 1 request per second or 86.400 daily requests.\n\nUsers **with approved documentation** have 3.5 requests per second or 302.400 daily requests.\n\nThese limits can be increased, and the support team should be contacted for that.\n\nWhen the requests per second limit is reached, the response HTTP Status returned is 429 and the response body is:\n```\n{\n  \"message\": \"Too many requests\"\n}\n```\n\nWhen the daily requests limit is reached, the response HTTP Status returned is 429 and the response body is:\n```\n{\n  \"message\": \"Limit Exceeded\"\n}\n```"
  contact:
    name: Jorn Filho
  x-logo:
    url: https://trade-images.ripio.com/general_images/logo-ripio.png
    href: '#'
servers:
- url: https://api.ripiotrade.co/v4/
tags:
- name: Cryptocurrency Withdrawals
paths:
  /withdrawals:
    get:
      operationId: GetUserWithdrawals
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WithdrawalsResponseV4'
      description: 'Lists the user''s cryptocurrency withdrawals.


        **Attention:** Due to performance concerns, this endpoint now uses cursor-based pagination. The pagination object currently included in the response is now a placeholder and will be entirely removed as of 2026-06-01. The parameter current_page is also a placeholder and will be removed at the same time. Please update your integration accordingly and refer to the documentation for the correct pagination handling.'
      summary: List Cryptocurrency Withdrawals
      tags:
      - Cryptocurrency Withdrawals
      security:
      - API Credentials:
        - Read
      parameters:
      - description: Currency code
        in: query
        name: currency_code
        required: false
        schema:
          type: string
        example: BTC
      - in: query
        name: status
        required: false
        schema:
          $ref: '#/components/schemas/WithdrawalStatusParamV4'
      - in: query
        name: start_date
        required: false
        schema:
          $ref: '#/components/schemas/StartDateNoMinParamV4'
      - in: query
        name: end_date
        required: false
        schema:
          $ref: '#/components/schemas/EndDateNoMinParamV4'
      - in: query
        name: page_size
        required: false
        schema:
          $ref: '#/components/schemas/PageSizeParamV4'
      - in: query
        name: current_page
        required: false
        schema:
          $ref: '#/components/schemas/CurrentPageParamV4'
      - description: Network
        in: query
        name: network
        required: false
        schema:
          type: string
        example: bitcoin
      - description: The `c` parameter is the cursor you should use to fetch the next page of results
        in: query
        name: c
        required: false
        schema:
          type: string
        example: BTC
      x-mcp:
        enabled: true
        name: list_cryptocurrency_withdrawals
        usage: '- To list user cryptocurrency withdrawals with filtering options

          - To track withdrawal history by currency, status, or date range

          - To monitor outgoing cryptocurrency transactions and their status'
    post:
      operationId: CreateWithdrawal
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateWithdrawalResponseV4'
      description: Creates a cryptocurrency withdrawal.
      summary: Create Cryptocurrency Withdrawal
      tags:
      - Cryptocurrency Withdrawals
      security:
      - API Credentials:
        - Crypto Withdrawals
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                fee_included:
                  type: boolean
                  description: If `true`, the fee is deducted from the amount specified. This means the total charge remains exactly equal to the requested amount, and the recipient receives the net amount after the fee is subtracted. *Example:*  If you request a withdrawal of 100 and the fee is 1, the user is charged 100 and receives 99. Default value is `true`.
                  example: true
                external_id:
                  type: string
                  description: Withdrawal external identifier (maximum of 36 chars)
                  example: 2352b104-3f8c-47da-b817-46c942350c95
                tag:
                  type: string
                  description: 'Destination tag


                    ⚠️ Check the information about this currency in the public currencies endpoint to check if this currency offers tag for withdrawals, and if has tag for deposit in case of a Ripio Trade address destination'
                  example: null
                network:
                  type: string
                  description: Destination network
                  example: bitcoin
                memo:
                  type: string
                  description: 'Destination memo


                    ⚠️ Check the information about this currency in the public currencies endpoint to check if this currency offers memo for withdrawals, and if has memo for deposit in case of a Ripio Trade address destination'
                  example: null
                amount:
                  type: number
                  format: float
                  description: Amount
                  example: 7.77
                destination:
                  type: string
                  description: 'Destination address. This address needs to be bound to a registered wallet.

                    You can register a wallet on: <https://trade.ripio.com/market/api/wallets>'
                  example: 1AU4BoYaxSunkEWikEMYXJ41c9bvQG6Wa2
                currency_code:
                  type: string
                  description: Currency code
              required:
              - amount
              - destination
              - currency_code
              type: object
      x-mcp:
        enabled: true
        name: create_cryptocurrency_withdrawal
        usage: '- To initiate cryptocurrency withdrawals to external addresses

          - To send cryptocurrencies to registered wallet addresses

          - To execute crypto transfers with memo/tag support for specific networks'
  /withdrawals/estimate-fee/{currency_code}:
    get:
      operationId: GetWithdrawalFee
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WithdrawalFeeResponseV4'
      description: Estimates the miner fee for a cryptocurrency withdrawal.
      summary: Estimate Withdrawal Fee
      tags:
      - Cryptocurrency Withdrawals
      security:
      - API Credentials:
        - Read
      parameters:
      - description: Currency code
        in: path
        name: currency_code
        required: true
        schema:
          type: string
        example: BTC
      - description: Network
        in: query
        name: network
        required: false
        schema:
          type: string
        example: bitcoin
      - description: Amount
        in: query
        name: amount
        required: false
        schema:
          format: double
          type: number
      x-mcp:
        enabled: true
        name: estimate_withdrawal_fee
        usage: '- To estimate miner fees for cryptocurrency withdrawals

          - To calculate withdrawal costs before initiating transactions

          - To get network-specific fee estimates for different cryptocurrencies'
  /withdrawals/withdrawal:
    get:
      operationId: GetUserCryptocurrencyWithdraw
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WithdrawResponseV4'
      description: Gets a cryptocurrency withdrawal.
      summary: Get Cryptocurrency Withdrawal
      tags:
      - Cryptocurrency Withdrawals
      security:
      - API Credentials:
        - Read
      parameters:
      - description: Withdrawal identifier
        in: query
        name: id
        required: false
        schema:
          type: string
        example: 000A650D-F8A5-419A-A4C4-194452345981
      - description: Withdrawal external identifier
        in: query
        name: external_id
        required: false
        schema:
          type: string
        example: 000A650D-F8A5-419A-A4C4-194452345981
      x-mcp:
        enabled: true
        name: get_cryptocurrency_withdrawal
        usage: '- To retrieve detailed information about a specific cryptocurrency withdrawal

          - To check withdrawal status using withdrawal ID or external ID

          - To get comprehensive withdrawal data including fees and transaction details'
components:
  schemas:
    WithdrawalStatusParamV4:
      type: string
      enum:
      - pending
      - confirmed
      - canceled
      description: Withdrawal status
    Pick_WithdrawalV4.Exclude_keyofWithdrawalV4.miner_fee_type-or-is_internal__:
      properties:
        id:
          type: string
          description: Withdrawal identifier
          example: A1DCD3B6-1CBD-4F17-ADA0-230ADEC04173
        amount:
          type: number
          format: double
          description: Amount
          example: 0.1
        create_date:
          type: string
          description: Datetime of the creation
          example: '2019-01-25T16:37:15.443Z'
        currency_code:
          type: string
          description: Currency code
          example: BTC
        destination_address:
          type: string
          description: Destination address
          example: rw9nf3WgsagJiZnkAeZzXZuqeCQ6LHm2h1
        external_id:
          type: string
          description: External id (this is sent by the user when creating a withdrawal, and it's optional)
          example: rtd-9012-lkju-908
        link:
          type: string
          description: Withdrawal link
          example: null
        miner_fee:
          type: number
          format: double
          description: Miner fee
          example: 0
        network:
          type: string
          description: Network
          example: bitcoin
        status:
          $ref: '#/components/schemas/WithdrawalStatusParamV4'
          description: Status
          example: pending
        transaction_id:
          type: string
          description: Transaction id
          example: null
        update_date:
          type: string
          description: Datetime of the last update
          example: '2019-01-25T16:37:15.443Z'
        fee:
          type: number
          format: double
          description: Fee charged by the exchange
          example: 0
        hash:
          type: string
          description: Transaction hash
          example: null
        memo:
          type: string
          description: Destination address memo - Check the information about this currency in the public currencies endpoint to check if this currency / network offers memo for withdrawals
        tag:
          type: string
          description: Destination address tag - Check the information about this currency in the public currencies endpoint to check if this currency / network offers tag for withdrawals
      required:
      - id
      - amount
      - create_date
      - currency_code
      - destination_address
      - link
      - miner_fee
      - status
      - transaction_id
      - update_date
      - fee
      - hash
      type: object
      description: From T, pick a set of properties whose keys are in the union K
    EndDateNoMinParamV4:
      type: string
      default: '[Current date]'
      format: date
      description: Final date filter in ISO-8601 format
    WithdrawalsDataV4:
      properties:
        withdrawals:
          items:
            $ref: '#/components/schemas/WithdrawalV4'
          type: array
          example:
          - amount: 0.1
            create_date: '2019-01-25T16:37:15.443Z'
            currency_code: BTC
            destination_address: rw9nf3WgsagJiZnkAeZzXZuqeCQ6LHm2h1
            external_id: rtd-9012-lkju-908
            is_internal: true
            link: null
            miner_fee: 1.2e-05
            miner_fee_type: regular
            network: bitcoin
            status: pending
            transaction_id: 5890ASHIUHC089189YSHBNJKHAG978891
            update_date: '2019-01-25T16:37:15.017Z'
            id: A1DCD3B6-1CBD-4F17-ADA0-230ADEC04173
            fee: 0
            hash: null
            memo: '656899'
            tag: '0100000020'
          - amount: 0.1
            create_date: '2019-01-25T16:37:15.443Z'
            currency_code: BTC
            destination_address: rw9nf3WgsagJiZnkAeZzXZuqeCQ6LHm2h1
            external_id: rtd-9012-lkju-908
            is_internal: true
            link: null
            miner_fee: 1.2e-05
            miner_fee_type: regular
            network: bitcoin
            status: pending
            transaction_id: 5890ASHIUHC089189YSHBNJKHAG978891
            update_date: '2019-01-25T16:37:15.017Z'
            id: A1DCD3B6-1CBD-4F17-ADA0-230ADEC04173
            fee: 0
            hash: null
            memo: '656899'
            tag: '0100000020'
        pagination:
          $ref: '#/components/schemas/PaginationV4'
        nc:
          type: string
          nullable: true
          description: This is the next cursor, use its value with the `c` parameter to retrieve the next page
        pc:
          type: string
          nullable: true
          description: This is the previous cursor, use its value with the `c` parameter to retrieve the previous page
      required:
      - withdrawals
      - pagination
      type: object
      additionalProperties: false
    PageSizeParamV4:
      type: number
      format: int32
      default: 200
      example: 100
      description: Number of records per page
      maximum: 1000
      minimum: 1
    WithdrawalV4:
      properties:
        amount:
          type: number
          format: double
          description: Amount
          example: 0.1
        create_date:
          type: string
          description: Datetime of the creation
          example: '2019-01-25T16:37:15.443Z'
        currency_code:
          type: string
          description: Currency code
          example: BTC
        destination_address:
          type: string
          description: Destination address
          example: rw9nf3WgsagJiZnkAeZzXZuqeCQ6LHm2h1
        external_id:
          type: string
          description: External id (this is sent by the user when creating a withdrawal, and it's optional)
          example: rtd-9012-lkju-908
        is_internal:
          type: boolean
          description: Flag that indicates if it's an internal wallet
          example: false
          format: boolean
        link:
          type: string
          nullable: true
          description: Withdrawal link
          example: null
        miner_fee:
          type: number
          format: double
          description: Miner fee
          example: 0
        miner_fee_type:
          type: string
          description: Miner fee type
          example: 1
        network:
          type: string
          description: Network
          example: bitcoin
        status:
          $ref: '#/components/schemas/WithdrawalStatusParamV4'
          description: Status
          example: pending
        transaction_id:
          type: string
          nullable: true
          description: Transaction id
          example: null
        update_date:
          type: string
          description: Datetime of the last update
          example: '2019-01-25T16:37:15.443Z'
        id:
          type: string
          description: Withdrawal identifier
          example: A1DCD3B6-1CBD-4F17-ADA0-230ADEC04173
        fee:
          type: number
          format: double
          description: Fee charged by the exchange
          example: 0
        hash:
          type: string
          nullable: true
          description: Transaction hash
          example: null
        memo:
          type: string
          description: Destination address memo - Check the information about this currency in the public currencies endpoint to check if this currency / network offers memo for withdrawals
        tag:
          type: string
          description: Destination address tag - Check the information about this currency in the public currencies endpoint to check if this currency / network offers tag for withdrawals
      required:
      - amount
      - create_date
      - currency_code
      - destination_address
      - link
      - miner_fee
      - miner_fee_type
      - status
      - transaction_id
      - update_date
      - id
      - fee
      - hash
      type: object
      additionalProperties: false
    PaginationV4:
      properties:
        current_page:
          type: number
          format: double
          description: Current page
        page_size:
          type: number
          format: double
          description: Page size
        registers_count:
          type: number
          format: double
          description: Total number of registers
        total_pages:
          type: number
          format: double
          description: Total number of pages
      required:
      - current_page
      - page_size
      - registers_count
      - total_pages
      type: object
      additionalProperties: false
      example:
        current_page: 1
        registers_count: 21
        total_pages: 1
        page_size: 100
    WithdrawResponseV4:
      properties:
        data:
          $ref: '#/components/schemas/WithdrawalV4'
          example:
            amount: 0.1
            create_date: '2019-01-25T16:37:15.443Z'
            currency_code: BTC
            destination_address: rw9nf3WgsagJiZnkAeZzXZuqeCQ6LHm2h1
            external_id: rtd-9012-lkju-908
            is_internal: true
            link: null
            miner_fee: 1.2e-05
            miner_fee_type: regular
            network: bitcoin
            status: pending
            transaction_id: 5890ASHIUHC089189YSHBNJKHAG978891
            update_date: '2019-01-25T16:37:15.017Z'
            id: A1DCD3B6-1CBD-4F17-ADA0-230ADEC04173
            fee: 0
            hash: null
            memo: '656899'
            tag: '0100000020'
        error_code:
          type: number
          enum:
          - null
          nullable: true
          example: null
        message:
          type: string
          nullable: true
          example: null
      required:
      - data
      - error_code
      - message
      type: object
      additionalProperties: false
    Omit_WithdrawalV4.miner_fee_type-or-is_internal_:
      $ref: '#/components/schemas/Pick_WithdrawalV4.Exclude_keyofWithdrawalV4.miner_fee_type-or-is_internal__'
      description: Construct a type with the properties of T except for those in type K.
    StartDateNoMinParamV4:
      type: string
      default: '[6 months ago]'
      format: date
      description: Initial date filter in ISO-8601 format
    WithdrawalFeeResponseV4:
      properties:
        data:
          $ref: '#/components/schemas/WithdrawalFeeDataV4'
          example:
            amount: 1.2e-05
            network: bitcoin
        error_code:
          type: number
          enum:
          - null
          nullable: true
          example: null
        message:
          type: string
          nullable: true
          example: null
      required:
      - data
      - error_code
      - message
      type: object
      additionalProperties: false
    WithdrawalFeeDataV4:
      properties:
        amount:
          type: number
          format: double
          description: Amount
        network:
          type: string
          description: Network
      required:
      - amount
      type: object
      additionalProperties: false
    CurrentPageParamV4:
      type: number
      format: int32
      default: 1
      example: 3
      description: Page number for pagination
    WithdrawalsResponseV4:
      properties:
        data:
          $ref: '#/components/schemas/WithdrawalsDataV4'
        error_code:
          type: number
          enum:
          - null
          nullable: true
          example: null
        message:
          type: string
          nullable: true
          example: null
      required:
      - data
      - error_code
      - message
      type: object
      additionalProperties: false
    CreateWithdrawalResponseV4:
      properties:
        data:
          $ref: '#/components/schemas/Omit_WithdrawalV4.miner_fee_type-or-is_internal_'
        error_code:
          type: number
          enum:
          - null
          nullable: true
          example: null
        message:
          type: string
          nullable: true
          example: null
      required:
      - data
      - error_code
      - message
      type: object
      additionalProperties: false
  securitySchemes:
    API Credentials:
      type: apiToken
      in: header
      name: Authorization
      description: "You can create API Credentials on: <https://trade.ripio.com/market/api/token>.\n\n After creating the **API Credentials**, you'll need to save in a safe place two pieces of information, an **API Token** and a **Secret Key**. The credentials are required respectively to **Authenticate** and **Sign** all Private REST Requests.\n\n **Attention**: The Secret Key can only be viewed once and cannot be retrieved later. **If you lose the Secret Key, delete the set of credentials and create a new one**. \n\n Each endpoint requires a type of access, which can be `Read`, `Buy/Sell`, `Cryptocurrency withdrawals`, or can contain all of these, each one for its own function. It is possible for the token to be `Read` only, or it may have several types, if it has any other type of access such as: `Buy/Sell` or `Cryptocurrency withdrawals`, it will also be `Read` by default.\n\n\n## Headers\n\n\nFor all private routes, these Headers are required:\n\n| Header       | Description   |\n|--------------|---------------|\n| **Authorization**     | The API Token as a string.    |\n| **Timestamp**     | A timestamp in milliseconds. See the Timestamp Security section for more details.    |\n| **Timestamp-tolerance**     | An additional, non-required parameter, that you can send to specify the number of milliseconds after the timestamp for the request to be valid. See the Timestamp Security section for more details.   |\n| **Signature**     | See the Generating Signature section for more details.   |\n\n## Timestamp Security\n\n Timestamp Security is a security method to guarantee the validation of the acceptable time window, in addition to guaranteeing the uniqueness of the request **Signature**.\n\n* **All Private Requests** also require a **Header** parameter, **Timestamp**, which must be the timestamp in milliseconds of when the request was created and sent. Can be generated with `Date.now()` if you're using JavaScript, for example.\n\n* An additional parameter, **Timestamp-tolerance**, non-required, may be sent to specify the max number of milliseconds after the timestamp, that the request is valid. If Timestamp-tolerance is not sent, it defaults to **5000 (5 seconds)**.\n\n*  **It is recommended to use a small Timestamp-tolerance of 5000 (5 seconds) or less. The maximum value is 60,000 (60 seconds)**. \n\n## Generating Signature\n\nTo create a signature for all Private Requests, you must **encrypt** the hash-based message using **sha256 HMAC** and encode it in **Base64**. \n\n The **message** must contain:\n\n```\nTimestamp + HTTP Method + Path + JSON Payload\n```\n * Not including the **'+'** sign, just concatenate the content into a string.\n\n* The **Timestamp** is the same as the one sent in the Header.\n\n* For **GET** Requests, it is necessary to consider the **PATH** without **Query Params**. For example, this route: `/withdrawals/estimate-rate/ADA?network=cardano_testnet`. Just `/withdrawals/estimate-fee` is considered. Additionally, the **BODY** is considered an empty **String**.\n\n* **JSON Payload** must be a string and must be the same as the one sent in the request **Body**.\n\n**IMPORTANT:** To prevent an invalid signature, avoid using unnecessary decimal places in the request body properties. For instance, use `1` instead of `1.0`. Alternatively, you can also send numbers as strings in the request body, ensuring they are in the same format but as strings. For example:\n\n```json\n{\n  'amount': '0.01',\n  'pair': 'BTC_BRL',\n  'price': '300000', \n  'side': 'buy', \n  'type': 'limit'\n}\n\n```\n\n### Examples \n\nWe provide functional examples of how to authenticate with this API, written in various programming languages. You can find these examples in our GitHub repository: https://github.com/ripio/api."
      scopes:
        Read: Endpoints / token with read access.
        Buy/Sell: Endpoints / token with Buy and Sell orders access.
        Crypto Withdrawals: Endpoints / token with Crypto Withdrawals access.
        Fiat Withdrawals: Endpoints / token with Fiat Withdrawals access.
x-websocket-api:
  description: "# WebSocket API\n\nThe WebSocket API allows you to perform trading operations (create, cancel, and update orders) via WebSocket connection. This is separate from the WebSocket Stream service which provides real-time market data.\n\n## General API Information\n\n- **Base endpoint**: `wss://ws-api.ripio.com`\n- Connections remain active as long as there is activity; idle connections are disconnected after **60 seconds** of inactivity\n- The WebSocket server will automatically send ping frames to maintain connection health\n- If the WebSocket server does not receive a pong frame back from the connection within **60 seconds**, the connection will be disconnected\n- When you receive a ping, you must send a pong with a copy of ping's payload as soon as possible\n- Unsolicited pong frames are allowed, but will not prevent disconnection\n- Authentication is done using **API Token, Secret, and Timestamp** (same as REST API)\n- All timestamps are in **milliseconds** in UTC\n- All field names and values are **case-sensitive**\n- APIs have a timeout of **10 seconds** when processing a request\n\n## Authentication\n\nThe WebSocket API uses the same authentication mechanism as the REST API, including API Token, Secret, and Timestamp-based signature generation.\n\nFor complete authentication details, including signature generation, please refer to the **Authorization** section.\n\n### Key Points for WebSocket API:\n\n- Use the same **API Token** and **Secret** from your REST API credentials\n- Include `apiToken`, `timestamp`, and `signature` in the `params` object of each request\n- The signature is generated using: **Timestamp + JSON Body (business parameters only)**\n\n### Signature Generation for WebSocket API\n\nUnlike the REST API, the WebSocket signature is simpler because there's no HTTP method or path:\n\n**Message to sign:** `Timestamp + JSON Body`\n\n**Where:**\n- `Timestamp`: The same timestamp sent in the `params.timestamp` field (in milliseconds)\n- `JSON Body`: **ONLY the business parameters** (pair, side, type, amount, price, etc.). **DO NOT include** `apiToken`, `timestamp`, or `signature` in the body to sign.\n\n**Important:** Do NOT include `+` signs - just concatenate the values directly.\n\n### Signature Example\n\n**Request to send:**\n```json\n{\n  \"id\": \"req-001\",\n  \"method\": \"order.create\",\n  \"params\": {\n    \"pair\": \"BTC_BRL\",\n    \"side\": \"buy\",\n    \"type\": \"limit\",\n    \"amount\": 0.001,\n    \"price\": 100000,\n    \"apiToken\": \"your-api-token\",\n    \"timestamp\": 1634567890000,\n    \"signature\": \"calculated-signature\"\n  }\n}\n```\n\n**Body to sign (only business params):**\n```json\n{\n  \"pair\": \"BTC_BRL\",\n  \"side\": \"buy\",\n  \"type\": \"limit\",\n  \"amount\": 0.001,\n  \"price\": 100000\n}\n```\n\n**Message to sign:**\n```\n1634567890000{\"pair\":\"BTC_BRL\",\"side\":\"buy\",\"type\":\"limit\",\"amount\":0.001,\"price\":100000}\n```\n\n**Then generate HMAC SHA256 signature:**\n```javascript\nconst crypto = require('crypto');\nconst message = timestamp.toString() + JSON.stringify(bodyParams);\nconst signature = crypto.createHmac('sha256', secretKey).update(message).digest('base64');\n```\n\n## Request Format\n\nAll WebSocket API requests must follow this format:\n\n```json\n{\n  \"id\": \"unique-request-id\",\n  \"method\": \"order.create\",\n  \"params\": {\n    ...body parameters...,\n    \"apiToken\": \"your-api-token\",\n    \"timestamp\": 1634567890000,\n    \"signature\": \"calculated-signature\"\n  }\n}\n```\n\n## Response Format\n\n### Success Response\n\n```json\n{\n  \"id\": \"unique-request-id\",\n  \"status\": 200,\n  \"result\": {\n    \"id\": \"7155ED34-9EC4-4733-8B32-1E4319CB662F\",\n    \"create_date\": \"2024-03-27T13:27:19.853Z\",\n    \"executed_amount\": 0,\n    \"external_id\": \"BEAB10B1-45B0-4999-9B2F-D2ED048D6C42\",\n    \"pair\": \"BTC_BRL\",\n    \"remaining_amount\": 10,\n    \"remaining_value\": 1000,\n    \"requested_amount\": 10,\n    \"requested_value\": 1000,\n    \"side\": \"buy\",\n    \"status\": \"open\"\n  }\n}\n```\n\n### Error Response\n\n```json\n{\n  \"id\": \"unique-request-id\",\n  \"status\": 400,\n  \"result\": null,\n  \"error\": {\n    \"error_code\": 40011,\n    \"message\": \"Insufficient funds.\"\n  }\n}\n```"
  methods:
    order.create:
      summary: Create Order via WebSocket
      description: Creates a new trading order via WebSocket API. Supports all order types available in the REST API including limit, market, stop-limit, trailing, ceiling, and iceberg orders.
      requestSchema:
        $ref: '#/components/schemas/WebSocketCreateRequest'
      responseSchema:
        $ref: '#/components/schemas/WebSocketResponse'
      errorSchema:
        $ref: '#/components/schemas/WebSocketErrorResponse'
      examples:
        limitBuyOrder:
          summary: Create Limit Buy Order
          value:
            id: req-001
            method: order.create
            params:
              apiToken: your-api-token
              timestamp: 1634567890000
              signature: calculated-signature
              pair: BTC_BRL
              side: buy
              type: limit
              amount: 0.001
              price: 100000
              external_id: my-order-123
        marketSellOrder:
          summary: Create Market Sell Order
          value:
            id: req-002
            method: order.create
            params:
              apiToken: your-api-token
              timestamp: 1634567890000
              signature: calculated-signature
              pair: ETH_BRL
              side: sell
            

# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ripio/refs/heads/main/openapi/ripio-cryptocurrency-withdrawals-api-openapi.yml