> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ripio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Off-Ramp Order

> Initiates a single crypto-to-fiat off-ramp transaction based on a previously obtained quote and the customer's destination fiat account. Returns the transaction id and the crypto deposit address the customer must send funds to. The order executes automatically once the crypto deposit is confirmed. Use this for one-off withdrawals; to reuse a destination account across many spontaneous deposits, create an Off-Ramp Session instead.



## OpenAPI

````yaml ramps-api/openapi.json POST /api/v1/offramp/
openapi: 3.1.0
info:
  title: Ripio Ramp API
  version: v1
  description: >-
    API for Ripio ramp services, enabling partners to integrate On-Ramp,
    Off-Ramp, customer management, KYC processes, and other financial
    functionalities. This API is RESTful, uses JSON for requests and responses,
    and standard HTTP status codes. This document is based on the
    'onramp-api.pdf' provided and aims to be compliant with OpenAPI
    Specification v3.1.0. The PDF indicates that the API documentation is a
    draft and subject to change.
servers:
  - url: https://skala-sandbox.ripio.com
    description: Sandbox environment
  - url: https://skala.ripio.com
    description: Production environment
security:
  - BearerToken: []
tags:
  - name: Authentication
    description: Operations related to API authentication and authorization.
  - name: Support Tickets
    description: >-
      Operations for raising and tracking customer support tickets with Ripio's
      support team. This feature must be enabled for your account by the Ripio
      team.
  - name: Customers
    description: Operations related to customer management.
  - name: KYC
    description: Operations related to Know Your Customer processes.
  - name: Investor Profile
    description: >-
      Brazilian accounts only: the investor-profile (suitability) questionnaire
      required by Resolução BCB nº 520/2025.
  - name: Fiat Accounts
    description: Operations related to managing fiat accounts and their requirements.
  - name: Quotes
    description: Operations related to obtaining and managing conversion quotes.
  - name: On-Ramp
    description: Operations related to fiat-to-crypto (on-ramp) processes.
  - name: Off-Ramp
    description: Operations related to crypto-to-fiat (off-ramp) processes.
  - name: Refunds
    description: >-
      Operations for returning the money of an on-ramp or off-ramp operation
      that could not be completed. Each ramp must be enabled for your account by
      the Ripio team.
  - name: Transactions
    description: Operations related to listing and managing all transaction types.
  - name: Networks
    description: >-
      Operations related to retrieving available deposit and withdrawal
      networks.
  - name: Rates
    description: Operations related to retrieving market rates.
  - name: Transaction Limits
    description: >-
      Operations related to retrieving per-transaction limits by currency and
      ramp operation.
  - name: Sandbox
    description: Operations specific to the sandbox environment for testing purposes.
  - name: Webhooks
    description: Webhook event notifications from Ripio Ramp API.
  - name: Sell and Pay
    description: >-
      Endpoints for managing Sell and Pay transactions, which allow customers to
      convert cryptocurrency to fiat currency and pay merchants via QR codes
paths:
  /api/v1/offramp/:
    post:
      tags:
        - Off-Ramp
      summary: Create Off-Ramp Order
      description: >-
        Initiates a single crypto-to-fiat off-ramp transaction based on a
        previously obtained quote and the customer's destination fiat account.
        Returns the transaction id and the crypto deposit address the customer
        must send funds to. The order executes automatically once the crypto
        deposit is confirmed. Use this for one-off withdrawals; to reuse a
        destination account across many spontaneous deposits, create an Off-Ramp
        Session instead.
      operationId: createOffRampOrder
      requestBody:
        required: true
        description: Details for creating an off-ramp order.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OffRampOrderCreationRequest'
      responses:
        '201':
          description: Off-Ramp order created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OffRampOrderCreationResponse'
        '400':
          description: >-
            Bad Request - e.g., invalid quoteId, customerId, or fiatAccountId;
            or a payment method that is not available for off-ramp. A `20039`
            means the customer has not accepted the active Terms and Conditions.
            A `20100` means the customer has no valid investor profile
            (Brazilian accounts only).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                termsNotAccepted:
                  summary: >-
                    The active Terms and Conditions have not been accepted
                    (20039)
                  description: >-
                    Terms and Conditions are versioned per country and only the
                    active version counts: a customer who accepted an earlier
                    version is refused here until they accept the current one.
                    Send them back through the acceptance flow — see [Terms and
                    Conditions](/ramps-api/terms-and-conditions/introduction).
                  value:
                    code: 20039
                    type: TermsAndConditionsNotAcceptedException
                    detail:
                      message: >-
                        Customer '3fa85f64-5717-4562-b3fc-2c963f66afa6' has not
                        accepted the current Terms and Conditions.
                    status: 400
                investorProfileRequired:
                  summary: 'Brazil: the customer has no valid investor profile (20100)'
                  description: >-
                    The customer never answered the investor questionnaire, or
                    their profile expired. Have them answer it with [Submit
                    Investor
                    Profile](/ramps-api/investor-profile/submit-investor-profile)
                    and retry. Only Brazilian accounts with the investor profile
                    enabled — see [Investor Profile
                    (Brazil)](/ramps-api/investor-profile/introduction).
                  value:
                    code: 20100
                    type: InvestorProfileRequiredException
                    detail:
                      message: >-
                        Customer '3fa85f64-5717-4562-b3fc-2c963f66afa6' does not
                        have a valid investor profile.
                    status: 400
        '401':
          description: Unauthorized - Invalid or missing access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: 40001
                type: NotAuthenticated
                detail:
                  message: Authentication credentials were not provided.
                  code: not_authenticated
                status: 401
        '404':
          description: >-
            Not Found - e.g., Customer not found or inactive, Quote not found,
            or External Fiat Account not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: 40004
                type: NotFound
                detail:
                  message: Not found.
                  code: not_found
                status: 404
components:
  schemas:
    OffRampOrderCreationRequest:
      type: object
      properties:
        customerId:
          type: string
          format: uuid
          description: Unique identifier for the customer.
          example: b6cecc1f-c90d-424b-adaa-c82b780696c1
        quoteId:
          type: string
          format: uuid
          description: >-
            Unique identifier for the off-ramp quote obtained from the Quoting
            Endpoint.
          example: 8142b065-79c4-4f48-9e33-11b17bc658d4
        fiatAccountId:
          type: string
          format: uuid
          description: >-
            Unique identifier for the customer's destination fiat account (the
            external fiat account that will receive the payout). It must be
            `ENABLED`.
          example: fca6d32f-2f7e-4f7e-b224-8be0b92fa3f1
        externalRef:
          type: string
          format: uuid
          description: >-
            Unique identifier for the order that is being created, provided by
            the partner. Used for idempotency.
          example: e6c4f1ec-899f-43b5-8479-c2529e3f9c70
        refundAddress:
          type: string
          description: >-
            On-chain address to return the crypto to if the order fails.
            Required only when the account is configured to refund to an
            explicit address (not to the on-chain origin).
          example: '0x4e88BBeFF059BDDF5BF90ee0816E86eDf4214b32'
        metadata:
          type: object
          additionalProperties: true
          description: Optional partner-defined metadata to attach to the order.
      required:
        - customerId
        - quoteId
        - fiatAccountId
        - externalRef
    OffRampOrderCreationResponse:
      type: object
      properties:
        transactionId:
          type: string
          format: uuid
          description: Unique identifier for the created off-ramp order.
        createdAt:
          type: string
          format: date-time
          description: Date and time the off-ramp order was created.
        depositAddress:
          allOf:
            - $ref: '#/components/schemas/OffRampDepositAddressItem'
          description: >-
            The crypto deposit address the customer must send funds to. Once the
            deposit is confirmed, the order executes automatically.
        refundAddress:
          type:
            - string
            - 'null'
          description: The effective on-chain refund address for this order, if any.
      required:
        - transactionId
        - createdAt
        - depositAddress
    ErrorResponse:
      type: object
      properties:
        code:
          type: integer
          description: Application-specific error code.
        type:
          type: string
          description: Type of error or exception.
        detail:
          type:
            - object
            - array
          description: >-
            Error details. The shape depends on the error:


            - Most business errors return an object with a `message` key.

            - Field validation errors return an object keyed by field name, each
            holding an array of `{ message, code }`.

            - Request-level validation errors (e.g. a missing query parameter)
            return a bare array of `{ message, code }`.
          properties:
            message:
              type: string
              description: Detailed error message.
          additionalProperties: true
        status:
          type: integer
          description: HTTP status code.
      required:
        - code
        - type
        - detail
        - status
    OffRampDepositAddressItem:
      type: object
      properties:
        chain:
          type: string
          description: The cryptocurrency blockchain for the deposit address.
          example: ETHEREUM
        address:
          type: string
          description: The deposit address for the corresponding blockchain.
          example: '0x1234567890AbCdEf1234567890AbCdEf1234567890'
      required:
        - chain
        - address
  securitySchemes:
    BearerToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Access token obtained via
        [/oauth2/token/](/ramps-api/authentication/acquire-access-token). Use as
        `Authorization: Bearer <access_token>`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.