openapi: 3.0.3
info:
  version: 1.0.0
  title: Crypto Ramp API
  description: |-
    Revolut’s Crypto Ramp API allows you to integrate with Revolut and redirect users directly to our checkout page, providing a smooth onramping experience for your users.
    The API endpoints are organised into thematic groups and let you leverage the following features:
    - [Partners](https://developer.revolut.com/docs/crypto-ramp/1.0.0/partners) - poll different exchange rates, display them on your website and compare with other providers
    - [Webhooks](https://developer.revolut.com/docs/crypto-ramp/1.0.0/webhooks) - track order and payment lifecycle with webhooks

    For more information, see the guides: [Leverage the Crypto Ramp API](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api) and [Work with Webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks)
servers:
  - url: https://ramp-partners.revolut.com/partners/api/1.0
tags:
  - name: Partners
    description: |-
      The **Partners** endpoints let you poll different exchange rates, display them on your website and compare them with other providers.

      For more details, see the guides: [Leverage the Crypto Ramp API](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api).
  - name: Webhooks
    description: |-
      A webhook (also called a web callback) allows your system to receive an event from Ramp immediately after it happens.
      With the **Webhooks** endpoints, you can create, update, delete, and retrieve webhooks, as well as retrieve webhooks that you have created.

      For more details, see the guides: [Work with Webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks) and [-> Verify the payload signature](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/verify-the-payload-signature).
paths:
  /config:
    get:
      tags:
        - Partners
      summary: Retrieve configuration
      description: |-
        Retrieve Revolut Ramp configuration, such as available fiat currencies and crypto tokens with corresponding limits and supported countries.

        For more information, see the guides: [Leverage the Crypto Ramp API -> Get your configuration details](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api#get-your-configuration-details).
      parameters:
        - $ref: '#/components/parameters/XApiKey'
      security:
        - AccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Config'
              example:
                version: 1.0.0
                countries:
                  - GB
                  - US
                  - PT
                  - FR
                fiat:
                  - currency: GBP
                    min_limit: 50
                    max_limit: 500
                  - currency: USD
                    min_limit: 60
                    max_limit: 600
                  - currency: EUR
                    min_limit: 60
                    max_limit: 600
                crypto:
                  - ETH
                  - BTC
                feePercentages:
                  - 0.8
                  - 1
                payment_methods:
                  - card
                  - revolut
                  - apple-pay
                  - google-pay
        '401':
          description: Unauthorized
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
  /quote:
    get:
      tags:
        - Partners
      summary: Retrieve an order quote
      description: |-
        Retrieve an order quote representing current exchange rate, total crypto amount and fees.
        Use it to display potential exchange rate to your customer.

        For more information, see the guides: [Leverage the Crypto Ramp API -> Get an order quote](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api#get-an-order-quote).
      security:
        - AccessToken: []
      parameters:
        - in: query
          name: fiat
          description: The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code of the selected fiat currency to use for the purchase.
          required: true
          schema:
            $ref: '#/components/schemas/Currency'
        - in: query
          name: amount
          description: The fiat amount to exchange for crypto.
          required: true
          schema:
            type: number
            format: float
        - in: query
          name: crypto
          description: The [symbol](https://en.wikipedia.org/wiki/List_of_cryptocurrencies) of the cryptocurrency (token) to purchase.
          required: true
          schema:
            $ref: '#/components/schemas/Currency'
        - in: query
          name: payment
          description: The selected [payment option](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/introduction-to-revolut-ramp/coverage-and-other-details/payment-options).
          required: true
          schema:
            type: string
            enum:
              - card
              - revolut
              - apple-pay
              - google-pay
        - in: query
          name: region
          description: The [ISO 3166 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code of the country of residence of the customer (end user) ordering the exchange.
          required: true
          schema:
            $ref: '#/components/schemas/CountryCode'
        - in: query
          name: feePercentage
          description: The fee percentage that will be applied for the order as partner fee.
          required: false
          schema:
            type: number
            format: float
        - in: query
          name: walletAddress
          description: The address of the crypto wallet into which the purchased token should be transferred.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
              example:
                service_fee:
                  amount: 3.76
                  currency: USD
                network_fee:
                  amount: 0.91
                  currency: USD
                crypto:
                  amount: 0.10604352
                  currency: ETH
                partner_fee:
                  amount: 0.77
                  currency: USD
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
  /buy:
    get:
      tags:
        - Partners
      summary: Retrieve a redirect URL
      description: |-
        Retrieve a redirect URL to the Ramp app widget for provided buy parameters. Use it to redirect the customer to Revolut Ramp to make the purchase.

        :::note
        The `amount` in the Redirect URL is provided in minor currency units.
        For example, GBP 12.00 is represented as `1200`.
        :::

        For more information, see the guides: [Leverage the Crypto Ramp API -> Get a Revolut Ramp Redirect URL](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api#get-a-revolut-ramp-redirect-url).
      security:
        - AccessToken: []
      parameters:
        - $ref: '#/components/parameters/XApiKey'
        - in: query
          name: fiat
          description: The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code of the selected fiat currency to use for the purchase.
          required: true
          schema:
            $ref: '#/components/schemas/Currency'
        - in: query
          name: amount
          description: The fiat amount to exchange for crypto.
          required: true
          schema:
            type: number
            format: float
        - in: query
          name: crypto
          description: The [symbol](https://en.wikipedia.org/wiki/List_of_cryptocurrencies) of the cryptocurrency (token) to purchase.
          required: true
          schema:
            $ref: '#/components/schemas/Currency'
        - in: query
          name: payment
          description: The selected [payment option](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/introduction-to-revolut-ramp/coverage-and-other-details/payment-options).
          required: true
          schema:
            type: string
            enum:
              - card
              - revolut
              - apple-pay
              - google-pay
        - in: query
          name: region
          description: The [ISO 3166 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code of the country of residence of the customer (end user) ordering the exchange.
          required: true
          schema:
            $ref: '#/components/schemas/CountryCode'
        - in: query
          name: wallet
          description: The address of the crypto wallet into which to transfer the purchased token.
          required: true
          schema:
            type: string
        - in: query
          name: orderId
          description: The external identifier of the order to be made. Should be either UUID or ULID.
          schema:
            type: string
            format: uuid | ulid
        - in: query
          name: feePercentage
          description: The fee percentage that will be applied for the order as partner fee.
          required: false
          schema:
            type: number
            format: float
        - in: query
          name: partnerRedirectUrl
          description: The URL to which to redirect the customer after the purchase – for example, your website. If not provided, the customer is shown transaction result in Revolut Ramp.
          schema:
            type: string
        - in: query
          name: additionalProperties
          description: |-
            A prefix that allows passing arbitrary key-value pairs. 
            For each pair, the prefix and key should be separated by `.`.

            If such additional properties are provided, when you call the [`/orders`](https://developer.revolut.com/docs/crypto-ramp/1.0.0/retrieve-all-orders) endpoint, they are returned along with the order details.
          schema:
            type: string
            pattern: additionalProperties.[key]=[value]
      responses:
        '200':
          description: |-
            The requested redirect URL

            :::note
            The `amount` in the Redirect URL is provided in minor currency units.
            For example, GBP 12.00 is represented as `1200`.
            :::
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RampRedirectUrl'
              example:
                ramp_redirect_url: https://ramp.revolut.com?fiatCurrency=GBP&amount=12345&cryptoCurrency=ETH&walletAddress=0x96e2B7Bf479f84e7A0a94f0620290B7D3E08f5EF&countryCode=GB&partnerId=a01798bc-7f0b-14ed-a12b-0e3fac1209ad&externalOrderId=2d1769bc-7aab-92ed-a10b-0232ac12090d&disableFiatAmount=true&disableCryptoCurrency=true&disableWalletAddress=true&disableCountryCode=true&partnerRedirectUrl=https%3A%2F%2Fcrypto.partner.com%2Forder%3ForderId%3D2d1769bc-7aab-92ed-a10b-0232ac12090d
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
  /orders/{order_id}:
    get:
      tags:
        - Partners
      summary: Retrieve an order
      description: |-
        Retrieve an order by `order_id` provided in the path and the `wallet` address provided as a query parameter.

        For more information, see the guides: [Leverage the Crypto Ramp API -> Get an order](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api#get-an-order).
      security:
        - AccessToken: []
      parameters:
        - $ref: '#/components/parameters/XApiKey'
        - in: path
          name: order_id
          description: |-
            The external identifier of the order to retrieve.
            Should be either UUID or ULID.
          required: true
          schema:
            type: string
            format: uuid | ulid
        - in: query
          name: wallet
          description: The address of the crypto wallet into which the token transfer was ordered.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
              example:
                id: a01868cc-71ab-d2ed-a10b-0a32ac1c0b02
                fiat:
                  amount: 101.22
                  currency: USD
                crypto:
                  amount: 0.10604352
                  currency: ETH
                fees:
                  ramp_fee:
                    amount: 2.75
                    currency: USD
                  partner_fee:
                    amount: 1.01
                    currency: USD
                  network_fee:
                    amount: 0.91
                    currency: USD
                exchange_rate: 0.00089088
                payment: card
                created_at: '2022-12-26T11:32:10Z'
                updated_at: '2022-12-26T11:33:54Z'
                status: COMPLETED
                wallet: '0x96e2B7Bf479f84e7A0a94f0620290B7D3E08f5EF'
                transaction_hash: 76cfb3b4f0acd595fa5b24036e86fd21d3c7b9887b2c8e3d4007598e4cbe6957
                fees_partner_currency:
                  ramp_fee:
                    amount: 2.35
                    currency: EUR
                  partner_fee:
                    amount: 0.9
                    currency: EUR
                  network_fee:
                    amount: 0.78
                    currency: EUR
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
  /orders:
    get:
      tags:
        - Partners
      summary: Retrieve all orders
      description: |-
        Retrieve all orders by date range.

        The results are sorted chronologically by the `created_at` date (i.e. oldest first).

        For more information, see the guides: [Leverage the Crypto Ramp API -> Get all orders](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/use-the-api#get-all-orders).
      security:
        - AccessToken: []
      parameters:
        - $ref: '#/components/parameters/XApiKey'
        - in: query
          name: start
          description: |-
            The earliest date for the order creation date range (inclusive) in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.

            In other words, the "oldest" order creation date you are interested in.
          required: true
          schema:
            type: string
            format: date
        - in: query
          name: end
          required: true
          schema:
            type: string
            format: date
          description: |-
            The latest date for the order creation date range (inclusive) in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.

            In other words, the "most recent" order creation date you are interested in.
        - in: query
          name: skip
          schema:
            type: integer
            format: int32
            default: 0
          description: |-
            The number of orders to skip at the beginning of the range when fetching orders (sorted by creation date, oldest first).

            This means that if you set `skip=3`, the first three orders are skipped, and the list of orders that you get as a result will start with the order that would normally be 4th on the list.
        - in: query
          name: limit
          schema:
            type: integer
            format: int32
            default: 100
            minimum: 1
            maximum: 1000
          description: |-
            The maximum number of orders to fetch from the given range.
            Must be between `1` and `1000` (inclusive).
            Default value is `100`.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Orders'
              example:
                - id: a01868cc-71ab-d2ed-a10b-0a32ac1c0b02
                  fiat:
                    amount: 101.22
                    currency: USD
                  crypto:
                    amount: 0.10604352
                    currency: ETH
                  fees:
                    ramp_fee:
                      amount: 2.75
                      currency: USD
                    partner_fee:
                      amount: 1.01
                      currency: USD
                    network_fee:
                      amount: 0.91
                      currency: USD
                  exchange_rate: 0.00089088
                  payment: card
                  created_at: '2018-12-26T11:32:10Z'
                  updated_at: '2018-12-26T11:33:54Z'
                  status: COMPLETED
                  wallet: '0xDC38EE117CAE37750EB1ECC5CFD3DE8E85963B481B93E732C5D0CB66EE6B0C9D'
                  transaction_hash: 76cfb3b4f0acd595fa5b24036e86fd21d3c7b9887b2c8e3d4007598e4cbe6957
                  fees_partner_currency:
                    ramp_fee:
                      amount: 2.64
                      currency: EUR
                    partner_fee:
                      amount: 0.97
                      currency: EUR
                    network_fee:
                      amount: 0.87
                      currency: EUR
                - id: 3afb8396-1cee-4562-bd0f-5aea5e674da9
                  fiat:
                    amount: 11.55
                    currency: GBP
                  crypto:
                    amount: 0.00889211
                    currency: ETH
                  fees:
                    ramp_fee:
                      amount: 2.4
                      currency: GBP
                    partner_fee:
                      amount: 0.81
                      currency: GBP
                    network_fee:
                      amount: 0.76
                      currency: GBP
                  exchange_rate: 0.00076988
                  payment: card
                  created_at: '2022-01-03T08:44:38Z'
                  updated_at: '2022-01-14T11:37:02Z'
                  status: COMPLETED
                  wallet: 1PUyin99nPbdm3NTa2BViJ1JsEe8e8iAcs
                  transaction_hash: d276938168a948e8eb5c99515baf9fb209c00b24c9521f0d4970c5e9f4dcc886
                  fees_partner_currency:
                    ramp_fee:
                      amount: 2.89
                      currency: EUR
                    partner_fee:
                      amount: 0.97
                      currency: EUR
                    network_fee:
                      amount: 0.91
                      currency: EUR
        '401':
          description: Unauthorized
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
  /webhooks/{webhook_id}:
    get:
      tags:
        - Webhooks
      summary: Retrieve a webhook
      description: |-
        Get the details of a specific webhook.

        For more information, see the guides: [Work with webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks).
      security:
        - AccessToken: []
      parameters:
        - $ref: '#/components/parameters/XApiKey'
        - in: path
          name: webhook_id
          description: The ID of the webhook.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: The information about the webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
              example:
                id: c518d8cc-114b-d2ed-a10b-0a32ac1c0e4f
                url: https://crypto.partner.com/revolut
                events:
                  - ORDER_PROCESSING
                  - ORDER_COMPLETED
                signing_secret: wsk_h1ETWMz2g1bB7gCONjNp84t2KSSIt7rs
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
    patch:
      tags:
        - Webhooks
      summary: Update a webhook
      description: |-
        Update the details of a specific webhook.

        For more information, see the guides: [Work with webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks).
      security:
        - AccessToken: []
      parameters:
        - $ref: '#/components/parameters/XApiKey'
        - in: path
          name: webhook_id
          description: The ID of the webhook.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookUpdateRequest'
      responses:
        '200':
          description: The successfully updated webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
              example:
                id: c518d8cc-114b-d2ed-a10b-0a32ac1c0e4f
                url: https://crypto.partner.com/revolut
                events:
                  - ORDER_PROCESSING
                  - ORDER_COMPLETED
                signing_secret: wsk_h1ETWMz2g1bB7gCONjNp84t2KSSIt7rs
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
    delete:
      tags:
        - Webhooks
      summary: Delete a webhook
      description: |-
        Delete a webhook so that events are not sent to the specified URL any more.

        For more information, see the guides: [Work with webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks).
      security:
        - AccessToken: []
      parameters:
        - $ref: '#/components/parameters/XApiKey'
        - in: path
          name: webhook_id
          description: The ID of the webhook.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '204':
          description: The webhook has been deleted
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '404':
          $ref: '#/components/responses/NotFoundErrorResponse'
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
  /webhooks:
    get:
      tags:
        - Webhooks
      summary: Retrieve a list of webhooks
      description: |-
        Get a list of webhooks that the partner is currently subscribed to.

        For more information, see the guides: [Work with webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks).
      parameters:
        - $ref: '#/components/parameters/XApiKey'
      security:
        - AccessToken: []
      responses:
        '200':
          description: The list of all your existing webhooks
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhooks'
              example:
                - id: fb39d967-4a73-4483-8e52-5842e1cad7ef
                  url: https://crypto.partner.com/revolut
                  events:
                    - ORDER_PROCESSING
                    - ORDER_COMPLETED
                  signing_secret: wsk_8fT55z3C5hCr41l6B0b057D85s2043x4
                - id: 894b00c1-da1f-44bb-b887-62af2e0d3bad
                  url: https://example.com
                  events:
                    - ORDER_PROCESSING
                    - ORDER_COMPLETED
                    - ORDER_CREATED
                    - ORDER_FAILED
                  signing_secret: wsk_7gH67v2D8jEt52n9M1c068F96t3152y7
        '401':
          description: Unauthorized
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
    post:
      tags:
        - Webhooks
      summary: Create a webhook
      description: |-
        Create a webhook so that Ramp can push event notifications to the specified URL.

        For more information, see the guides: [Work with webhooks -> Track order and payment lifecycle](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/use-webhooks).
      parameters:
        - $ref: '#/components/parameters/XApiKey'
      security:
        - AccessToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreateRequest'
      responses:
        '200':
          description: The successfully created webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
              example:
                id: c518d8cc-114b-d2ed-a10b-0a32ac1c0e4f
                url: https://crypto.partner.com/revolut
                events:
                  - ORDER_PROCESSING
                  - ORDER_COMPLETED
                signing_secret: wsk_h1ETWMz2g1bB7gCONjNp84t2KSSIt7rs
        '400':
          $ref: '#/components/responses/BadRequestErrorResponse'
        '401':
          description: Unauthorized
        '429':
          description: Too Many Requests
        '500':
          $ref: '#/components/responses/ServerErrorResponse'
        '503':
          $ref: '#/components/responses/DisabledByKillSwitchErrorResponse'
components:
  securitySchemes:
    AccessToken:
      type: apiKey
      in: header
      name: X-API-KEY
      description: |-
        Each Crypto Ramp API request must contain an authorization header in the following format to make a call: `X-API-KEY: {your_API_key}`. 

        Before you start, make sure that you have the correct API key.
        For more information, see the **Get started** guides:
        [Integrate with Revolut Ramp -> 2. Get Partner keys](https://developer.revolut.com/docs/buy-crypto/get-started#2-get-partner-keys). 

        When sending API requests, make sure that you use the correct server URL: 
        - ending in `*.com` for the Production environment
        - ending in `*.codes` for the Test environment (where available)
  parameters:
    XApiKey:
      type: apiKey
      in: header
      name: X-API-KEY
      description: |-
        Your API key that you received during integration setup. 
        For more information, see the **Authorization** section.
      required: true
  schemas:
    Config:
      type: object
      required:
        - version
        - countries
        - fiat
        - crypto
        - payment_methods
      properties:
        version:
          type: string
          description: The Revolut Ramp configuration version.
        countries:
          type: array
          description: The list of client countries supported by Ramp – for your customer to be able to use Revolut Ramp, they must be resident in one of those countries.
          items:
            $ref: '#/components/schemas/CountryCode'
        fiat:
          type: array
          description: The list of fiat currencies supported by Revolut Ramp.
          items:
            type: object
            description: The supported fiat currencies and limits.
            required:
              - currency
              - min_limit
              - max_limit
            properties:
              currency:
                $ref: '#/components/schemas/Currency'
                description: The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code of the supported currency.
              min_limit:
                type: number
                format: float
                description: The minimum allowed amount.
              max_limit:
                type: number
                format: float
                description: The maximum allowed amount.
        crypto:
          type: array
          description: The list of cryptocurrencies supported by Revolut Ramp.
          items:
            $ref: '#/components/schemas/Currency'
        feePercentages:
          description: The list of fee percentages that can be applied for the order as partner fee.
          type: array
          items:
            type: number
            format: float
        payment_methods:
          description: The list of available payment methods.
          type: array
          items:
            type: string
            enum:
              - card
              - revolut
              - apple-pay
              - google-pay
      example:
        version: 1.0.0
        countries:
          - GB
          - US
          - PT
          - FR
        fiat:
          - currency: GBP
            min_limit: 50
            max_limit: 500
          - currency: USD
            min_limit: 60
            max_limit: 600
          - currency: EUR
            min_limit: 60
            max_limit: 600
        crypto:
          - ETH
          - BTC
        feePercentages:
          - 0.8
          - 1
        payment_methods:
          - card
          - revolut
          - apple-pay
          - google-pay
    CountryCode:
      type: string
      description: The [ISO 3166 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code of the country.
    Currency:
      type: string
      description: The fiat currency [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code or [cryptocurrency code](https://en.wikipedia.org/wiki/List_of_cryptocurrencies).
    EventType:
      type: string
      description: Webhook event type
      enum:
        - ORDER_CREATED
        - ORDER_PROCESSING
        - ORDER_COMPLETED
        - ORDER_FAILED
    Money:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          type: number
          format: float
          description: The amount.
        currency:
          $ref: '#/components/schemas/Currency'
      example:
        amount: 100
        currency: USD
    MoneyFiat:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          type: number
          format: float
          description: The amount.
        currency:
          type: string
          format: ISO 4217
          description: The fiat currency [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code.
      example:
        amount: 100
        currency: USD
    MoneyCrypto:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          type: number
          format: float
          description: The crypto amount.
        currency:
          type: string
          description: The [cryptocurrency code](https://en.wikipedia.org/wiki/List_of_cryptocurrencies).
      example:
        amount: 0.10604352
        currency: ETH
    Order:
      type: object
      description: Fiat to crypto exchange order
      required:
        - id
        - fiat
        - crypto
        - fees
        - exchange_rate
        - payment
        - created_at
        - updated_at
        - status
        - wallet
        - fees_partner_currency
      properties:
        id:
          type: string
          format: uuid
          description: The external UUID of the order.
        fiat:
          $ref: '#/components/schemas/MoneyFiat'
          description: The fiat amount that the customer paid for the crypto (excluding fees).
        crypto:
          $ref: '#/components/schemas/MoneyCrypto'
          description: The crypto amount that the customer received.
        fees:
          type: object
          description: The fees for the order.
          required:
            - ramp_fee
            - partner_fee
            - network_fee
          properties:
            ramp_fee:
              $ref: '#/components/schemas/MoneyFiat'
              description: Revolut Ramp fee.
            partner_fee:
              $ref: '#/components/schemas/MoneyFiat'
              description: Partner fee.
            network_fee:
              $ref: '#/components/schemas/MoneyFiat'
              description: Crypto network fee.
        exchange_rate:
          type: number
          format: float
          description: The exchange rate for the order.
        payment:
          type: string
          enum:
            - card
            - revolut
            - apple-pay
            - google-pay
          description: The [payment method](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/introduction-to-revolut-ramp/coverage-and-other-details/payment-options) used for the purchase.
        created_at:
          type: string
          format: date-time
          description: The UTC date and time of order creation in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        updated_at:
          type: string
          format: date-time
          description: The UTC date and time of order update in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        status:
          type: string
          enum:
            - AWAITING_PAYMENT
            - PROCESSING
            - COMPLETED
            - FAILED
          description: The state of order processing.
        fail_reason:
          type: string
          enum:
            - PAYMENT_NOT_RECEIVED
            - PAYMENT_DECLINED
            - CRYPTO_WITHDRAWAL_FAILED
            - OTHER
          description: The reason why the order failed.
        wallet:
          type: string
          description: The address of the crypto wallet into which the token transfer was ordered.
        transaction_hash:
          type: string
          description: |-
            Blockchain transaction hash.
            Absent if no crypto transaction has been created yet.
            Always present if order is in the `COMPLETED` state.
        additionalProperties:
          type: object
          description: The additional properties passed in the call to the [`/buy`](https://developer.revolut.com/docs/crypto-ramp/1.0.0/retrieve-a-redirect-url) endpoint under the `additionalProperties.*` query parameter(s), if such properties were provided.
          additionalProperties:
            type: string
        fees_partner_currency:
          type: object
          description: The fees converted to the partner's currency.
          required:
            - ramp_fee
            - partner_fee
            - network_fee
          properties:
            ramp_fee:
              $ref: '#/components/schemas/Money'
              description: Revolut Ramp fee.
            partner_fee:
              $ref: '#/components/schemas/Money'
              description: Partner fee.
            network_fee:
              $ref: '#/components/schemas/Money'
              description: Crypto network fee.
      example:
        id: a01868cc-71ab-d2ed-a10b-0a32ac1c0b02
        fiat:
          amount: 101.22
          currency: USD
        crypto:
          amount: 0.10604352
          currency: ETH
        fees:
          ramp_fee:
            amount: 2.75
            currency: USD
          partner_fee:
            amount: 1.01
            currency: USD
          network_fee:
            amount: 0.91
            currency: USD
        exchange_rate: 0.00089088
        payment: card
        created_at: '2022-12-26T11:32:10Z'
        updated_at: '2022-12-26T11:33:54Z'
        status: COMPLETED
        wallet: '0x96e2B7Bf479f84e7A0a94f0620290B7D3E08f5EF'
        transaction_hash: 76cfb3b4f0acd595fa5b24036e86fd21d3c7b9887b2c8e3d4007598e4cbe6957
        fees_partner_currency:
          ramp_fee:
            amount: 2.35
            currency: EUR
          partner_fee:
            amount: 0.9
            currency: EUR
          network_fee:
            amount: 0.78
            currency: EUR
    Orders:
      type: array
      description: The list of orders
      items:
        $ref: '#/components/schemas/Order'
      example:
        - id: a01868cc-71ab-d2ed-a10b-0a32ac1c0b02
          fiat:
            amount: 101.22
            currency: USD
          crypto:
            amount: 0.10604352
            currency: ETH
          fees:
            ramp_fee:
              amount: 2.75
              currency: USD
            partner_fee:
              amount: 1.01
              currency: USD
            network_fee:
              amount: 0.91
              currency: USD
          exchange_rate: 0.00089088
          payment: card
          created_at: '2018-12-26T11:32:10Z'
          updated_at: '2018-12-26T11:33:54Z'
          status: COMPLETED
          wallet: '0xDC38EE117CAE37750EB1ECC5CFD3DE8E85963B481B93E732C5D0CB66EE6B0C9D'
          transaction_hash: 76cfb3b4f0acd595fa5b24036e86fd21d3c7b9887b2c8e3d4007598e4cbe6957
          fees_partner_currency:
            ramp_fee:
              amount: 2.64
              currency: EUR
            partner_fee:
              amount: 0.97
              currency: EUR
            network_fee:
              amount: 0.87
              currency: EUR
        - id: 3afb8396-1cee-4562-bd0f-5aea5e674da9
          fiat:
            amount: 11.55
            currency: GBP
          crypto:
            amount: 0.00889211
            currency: ETH
          fees:
            ramp_fee:
              amount: 2.4
              currency: GBP
            partner_fee:
              amount: 0.81
              currency: GBP
            network_fee:
              amount: 0.76
              currency: GBP
          exchange_rate: 0.00076988
          payment: card
          created_at: '2022-01-03T08:44:38Z'
          updated_at: '2022-01-14T11:37:02Z'
          status: COMPLETED
          wallet: 1PUyin99nPbdm3NTa2BViJ1JsEe8e8iAcs
          transaction_hash: d276938168a948e8eb5c99515baf9fb209c00b24c9521f0d4970c5e9f4dcc886
          fees_partner_currency:
            ramp_fee:
              amount: 2.89
              currency: EUR
            partner_fee:
              amount: 0.97
              currency: EUR
            network_fee:
              amount: 0.91
              currency: EUR
    Quote:
      type: object
      description: The exchange price between fiat and crypto currencies (including fees).
      required:
        - service_fee
        - network_fee
        - crypto
        - partner_fee
      properties:
        service_fee:
          $ref: '#/components/schemas/Money'
          description: |-
            The sum of Revolut Ramp fee and Partner fee.

            :::note
            The Partner fee is also provided separately in the `partner_fee` parameter.
            :::
        network_fee:
          $ref: '#/components/schemas/Money'
          description: Crypto network fee.
        crypto:
          $ref: '#/components/schemas/MoneyCrypto'
          description: The crypto amount that the customer receives in the case of a successful exchange.
        partner_fee:
          $ref: '#/components/schemas/Money'
          description: |-
            Partner fee.

            :::note
            This Partner fee is also included in the `service_fee` value, which represents the total sum of Partner fee and Revolut Ramp fee.
            :::
      example:
        service_fee:
          amount: 3.76
          currency: USD
        network_fee:
          amount: 0.91
          currency: USD
        crypto:
          amount: 0.10604352
          currency: ETH
        partner_fee:
          amount: 0.77
          currency: USD
    RampRedirectUrl:
      type: object
      description: Redirect URL to Ramp app widget
      required:
        - ramp_redirect_url
      properties:
        ramp_redirect_url:
          type: string
          format: uri
          description: The URL to Revolut Ramp to which to redirect the customer for the purchase.
      example:
        ramp_redirect_url: https://ramp.revolut.com?fiatCurrency=GBP&amount=12345&cryptoCurrency=ETH&walletAddress=0x96e2B7Bf479f84e7A0a94f0620290B7D3E08f5EF&countryCode=GB&partnerId=a01798bc-7f0b-14ed-a12b-0e3fac1209ad&externalOrderId=2d1769bc-7aab-92ed-a10b-0232ac12090d&disableFiatAmount=true&disableCryptoCurrency=true&disableWalletAddress=true&disableCountryCode=true&partnerRedirectUrl=https%3A%2F%2Fcrypto.partner.com%2Forder%3ForderId%3D2d1769bc-7aab-92ed-a10b-0232ac12090d
    Webhook:
      type: object
      description: Webhook
      required:
        - id
        - url
        - events
        - signing_secret
      properties:
        id:
          type: string
          format: uuid
          description: The UUID of the webhook.
        url:
          type: string
          format: uri
          description: |-
            The webhook's URL to which event notifications will be sent.
            Must be a valid HTTP or HTTPS URL, capable of receiving POST requests.
        events:
          type: array
          description: The list of event types that the webhook is configured to listen to.
          items:
            $ref: '#/components/schemas/EventType'
        signing_secret:
          type: string
          description: |-
            The [signing secret](https://developer.revolut.com/docs/guides/crypto-ramp/guides/buy-crypto/tutorials/work-with-webhooks/verify-the-payload-signature#webhook-signing-secret) for the webhook.
            Use it to verify the signature for the webhook's request payload.
      example:
        id: c518d8cc-114b-d2ed-a10b-0a32ac1c0e4f
        url: https://crypto.partner.com/revolut
        events:
          - ORDER_PROCESSING
          - ORDER_COMPLETED
        signing_secret: wsk_h1ETWMz2g1bB7gCONjNp84t2KSSIt7rs
    Webhooks:
      type: array
      description: The list of webhooks
      items:
        $ref: '#/components/schemas/Webhook'
      example:
        - id: fb39d967-4a73-4483-8e52-5842e1cad7ef
          url: https://crypto.partner.com/revolut
          events:
            - ORDER_PROCESSING
            - ORDER_COMPLETED
          signing_secret: wsk_8fT55z3C5hCr41l6B0b057D85s2043x4
        - id: 894b00c1-da1f-44bb-b887-62af2e0d3bad
          url: https://example.com
          events:
            - ORDER_PROCESSING
            - ORDER_COMPLETED
            - ORDER_CREATED
            - ORDER_FAILED
          signing_secret: wsk_7gH67v2D8jEt52n9M1c068F96t3152y7
    WebhookCreateRequest:
      type: object
      description: Webhook create parameters
      required:
        - url
        - events
      properties:
        url:
          type: string
          format: uri
          description: |-
            The webhook's URL to which event notifications will be sent.
            Must be a valid HTTP or HTTPS URL, capable of receiving POST requests.
        events:
          type: array
          description: The list of event types that the webhook is configured to listen to.
          items:
            $ref: '#/components/schemas/EventType'
      example:
        url: https://crypto.partner.com/revolut
        events:
          - ORDER_PROCESSING
          - ORDER_COMPLETED
    WebhookUpdateRequest:
      type: object
      description: Webhook update parameters
      properties:
        url:
          type: string
          format: uri
          description: |-
            The webhook's URL to which event notifications will be sent.
            Must be a valid HTTP or HTTPS URL, capable of receiving POST requests.
        events:
          type: array
          description: List of event types that the webhook is configured to listen to.
          items:
            $ref: '#/components/schemas/EventType'
      example:
        url: https://crypto.partner.com/revolut
        events:
          - ORDER_PROCESSING
          - ORDER_COMPLETED
    BadRequestError:
      type: object
      description: Thrown when request parameter field is invalid
      required:
        - message
      properties:
        message:
          type: string
          description: Specifies the invalid parameter that was provided by the user.
      example:
        message: Invalid field 'FieldName'
    DisabledByKillSwitchError:
      type: object
      description: Thrown when endpoint is disabled by Kill Switch.
      required:
        - message
      properties:
        message:
          type: string
          description: The message displayed to the user when endpoint is disabled by Kill Switch.
      example:
        message: Service is not available
    NotFoundError:
      type: object
      description: Thrown when resource can't be found
      required:
        - message
      properties:
        message:
          type: string
          description: The message displayed to the user when resource cannot be found.
      example:
        message: Not found
    UnexpectedError:
      type: object
      description: Thrown when an unexpected error happens.
      required:
        - errorId
        - timestamp
      properties:
        errorId:
          type: string
          format: uuid
          description: The UUID of the unexpected error that has occurred.
        timestamp:
          type: integer
          format: int64
          description: The timestamp of when the error happened.
      example:
        errorId: 201768bc-7fab-12ed-a1bb-0232ac120902
        timestamp: 1671481582960
  responses:
    BadRequestErrorResponse:
      description: |-
        Bad request

        A request parameter is invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequestError'
          example:
            message: Invalid field 'FieldName'
    DisabledByKillSwitchErrorResponse:
      description: The endpoint is disabled by Kill Switch
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DisabledByKillSwitchError'
          example:
            message: Service is not available
    NotFoundErrorResponse:
      description: Resource cannot be found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFoundError'
          example:
            message: Not found
    ServerErrorResponse:
      description: |-
        Server error

        An unexpected error occurred.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UnexpectedError'
          example:
            errorId: 201768bc-7fab-12ed-a1bb-0232ac120902
            timestamp: 1671481582960
