Coinflow redeem API

The redeem API from Coinflow — 4 operation(s) for redeem.

OpenAPI Specification

coinflow-redeem-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: API Reference authentication redeem API
  version: 1.0.0
servers:
- url: https://api-sandbox.coinflow.cash/api
  description: https://api-sandbox.coinflow.cash/api
tags:
- name: redeem
paths:
  /redeem/evm/creditsAuthMsg:
    post:
      operationId: get-evm-credits-auth-msg
      summary: (EVM only) Get Credits Authorization Message
      description: 'Endpoint to generate an EIP-712 typed data message for authorizing credits usage on EVM chains.


        This endpoint is used to retrieve a "CreditsAuthorization" message that the user must sign using their wallet (e.g., MetaMask)

        via the eth_signTypedData_v4 method. The resulting signed message (permitCredits) is then supplied to the

        `/api/redeem/evm/sendGaslessTx` endpoint to execute a gasless redeem transaction.


        **Request Body:**

        - `merchantId` (string): The ID of the merchant requesting redemption.

        - `subtotal` (Subtotal): The transaction subtotal (either in USDC or a token-based subtotal).

        - `transactionData` (EvmTransactionData): Transaction details used for calculating gas fees and total credits required.


        **Response:**

        Returns an object with the following properties:

        - `message` (string): A JSON string representing the EIP-712 typed data.

        - `validBefore` (string): A timestamp or block number indicating until when the message is valid.

        - `nonce` (string): A unique value to prevent replay attacks.

        - `creditsRawAmount` (number): The raw credits amount calculated based on the transaction subtotal and estimated gas fees.'
      tags:
      - redeem
      parameters:
      - name: x-coinflow-auth-wallet
        in: header
        description: The web3 wallet of the end user - see https://docs.coinflow.cash/api-reference/api-reference/authentication/get-session-key
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCreditsAuthMessageResponse'
        '412':
          description: Wallet does not have enough credits to complete redeem request, this can happen when the network is slow. Please retry the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      requestBody:
        description: Request body containing the parameters required for generating the credits authorization message.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetEvmCreditsAuthMsgBody'
  /redeem/evm/sendGaslessTx:
    post:
      operationId: send-evm-credits-gasless-tx
      summary: (EVM only) Send Redeem Transaction with Credits Authorization Message
      description: 'Endpoint to send a credits redeem transaction on EVM-based blockchains.


        This endpoint processes a gasless transaction for redeeming credits. It requires a signed permit message

        (contained in `signedMessages.permitCredits`) that was previously generated by the `/evm/creditsAuthMsg` endpoint.


        **How It Works:**

        - Validates that the provided signed permit (EIP-712 signature) is correct.

        - Constructs the transaction using provided details and sends it through the appropriate EVM network provider.


        **Request Body:**

        - `merchantId` (string): The ID of the merchant.

        - `subtotal` (Subtotal): The transaction subtotal.

        - `transactionData` (EvmTransactionData): Details of the transaction to be executed.

        - `signedMessages` (SignedMessages): Contains the signed permit message (permitCredits) for credit authorization.

        - `chargebackProtectionData?` (CartItemClassOmitted): Optional chargeback protection data.

        - `validBefore`, `nonce`, `creditsRawAmount`: Values returned by `/evm/creditsAuthMsg` for further verification.


        **Response:**

        Returns an object containing:

        - `hash` (string): The transaction hash of the submitted gasless transaction.'
      tags:
      - redeem
      parameters:
      - name: x-coinflow-auth-wallet
        in: header
        description: The web3 wallet of the end user - see https://docs.coinflow.cash/api-reference/api-reference/authentication/get-session-key
        required: true
        schema:
          type: string
      - name: x-device-id
        in: header
        description: Optional device identifier provided in the request header.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Redeem_SendEvmCreditsGaslessTx_Response_200'
        '412':
          description: Wallet does not have enough credits to complete redeem request, this can happen when the network is slow. Please retry the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      requestBody:
        description: Request body with all necessary parameters to execute the gasless redeem transaction.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvmRedeemBody'
  /redeem/merchant:
    post:
      operationId: get-merchant-wallet-redeem-transaction
      summary: Create Merchant Wallet Redemption Transaction
      description: Creates a transaction for the user to sign in order to redeem their Coinflow credits, with the resulting stablecoins being delivered to the merchant's settlement wallet.
      tags:
      - redeem
      parameters:
      - name: x-coinflow-auth-wallet
        in: header
        description: The web3 wallet of the end user - see https://docs.coinflow.cash/api-reference/api-reference/authentication/get-session-key
        required: true
        schema:
          type: string
      - name: x-device-id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedeemResponse'
        '412':
          description: Wallet does not have enough credits to complete redeem request, this can happen when the network is slow. Please retry the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantWalletRedeemBody'
  /redeem:
    post:
      operationId: get-redeem-transaction
      summary: Create Redeem Transaction
      description: 'Creates a transaction for the user to sign in order to redeem their Coinflow credits with a merchant''s contract.


        The transaction passed to this endpoint should be the same as if the end user''s wallet was calling the merchant''s contract with enough USDC/Other Cryto Currency to successfully complete the transaction.'
      tags:
      - redeem
      parameters:
      - name: x-coinflow-auth-wallet
        in: header
        description: The web3 wallet of the end user - see https://docs.coinflow.cash/api-reference/api-reference/authentication/get-session-key
        required: true
        schema:
          type: string
      - name: x-device-id
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedeemResponse'
        '412':
          description: Wallet does not have enough credits to complete redeem request, this can happen when the network is slow. Please retry the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedeemBody'
components:
  schemas:
    ReturnedTokenIdRedeemTransaction:
      type: object
      properties:
        data:
          type: string
          description: 'The data to call this contract with, HEX encoded.


            The coinflow contract calls the "to" contract, contract pulls USDC from msg.sender, and transfers the NFT/item to the "receiver" address defined in the contract function arguments.'
        to:
          type: string
          description: The merchant's whitelisted contract
      required:
      - data
      - to
      description: Transaction to be called.
      title: ReturnedTokenIdRedeemTransaction
    RedeemBodyNativeSolToConvertLamports:
      oneOf:
      - type: string
      - type: number
        format: double
      title: RedeemBodyNativeSolToConvertLamports
    NormalRedeemTransaction:
      type: object
      properties:
        data:
          type: string
          description: 'The data to call this contract with, HEX encoded.


            The coinflow contract calls the "to" contract, contract pulls USDC from msg.sender, and transfers the NFT/item to the "receiver" address defined in the contract function arguments.'
        to:
          type: string
          description: The merchant's whitelisted contract
      required:
      - data
      - to
      description: Transaction to be called.
      title: NormalRedeemTransaction
    SellerInfo:
      type: object
      properties:
        id:
          type: string
          description: Id of the seller
        email:
          type:
          - string
          - 'null'
          description: 'Email

            Example: lois.lane@dailyplanet.com'
        firstName:
          type: string
          description: 'First name

            Example: Lois'
        lastName:
          type: string
          description: 'Last name

            Example: Lois'
        dob:
          type: string
          description: 'Date of birth, formatted as YYYY-MM-DD. If only the year is known, use YYYY

            Pattern: ^\d{4}(-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]))?$'
        rawSellerData:
          $ref: '#/components/schemas/Record_string.any_'
      title: SellerInfo
    CustomerUsdcTransferDataV2:
      type: object
      properties:
        from:
          type: string
        to:
          type: string
        value:
          type: string
        validAfter:
          $ref: '#/components/schemas/CustomerUsdcTransferDataV2ValidAfter'
        validBefore:
          $ref: '#/components/schemas/CustomerUsdcTransferDataV2ValidBefore'
        nonce:
          type: string
        signature:
          type: string
      required:
      - from
      - to
      - value
      - validAfter
      - validBefore
      - nonce
      - signature
      description: 'V2 of CustomerUsdcTransferData — replaces the (v, r, s) triple with a single

        `signature` bytes string, matching USDC FiatTokenV2_2''s bytes-overload

        `transferWithAuthorization`. All other fields unchanged from V1.'
      title: CustomerUsdcTransferDataV2
    DecentRedeem:
      type: object
      properties:
        waitForHash:
          type: boolean
          description: 'Whether the UI should wait

            for the transaction to be sent and

            the hash to be returned.'
        type:
          $ref: '#/components/schemas/DecentRedeemType'
        dstChainId:
          type: number
          format: double
          description: 'ID of the destination chain you will be using

            Find your chain ID here: https://chainlist.org/'
        dstToken:
          type: string
          description: Address on that chain of the token you will be receiving
        contractAddress:
          type: string
          description: The contract address which will be called on the destination chain
        contractData:
          type: string
        cost:
          $ref: '#/components/schemas/DecentRedeemCost'
          description: Amount of the token on the destination chain you will be receiving
      required:
      - type
      - dstChainId
      - dstToken
      - contractAddress
      - contractData
      - cost
      description: If your contract exists on a chain supported by Decent, pass this object in order to call it.
      title: DecentRedeem
    Currency:
      type: string
      enum:
      - USD
      - AED
      - AFN
      - ALL
      - AMD
      - ANG
      - AOA
      - ARS
      - AUD
      - AWG
      - AZN
      - BAM
      - BBD
      - BDT
      - BGN
      - BHD
      - BIF
      - BMD
      - BND
      - BOB
      - BRL
      - BSD
      - BTN
      - BWP
      - BYN
      - BZD
      - CAD
      - CHF
      - CLF
      - CLP
      - CNY
      - COP
      - CRC
      - CUP
      - CVE
      - CZK
      - DJF
      - DKK
      - DOP
      - DZD
      - EGP
      - ETB
      - EUR
      - FJD
      - GBP
      - GEL
      - GHS
      - GMD
      - GNF
      - GTQ
      - GYD
      - HKD
      - HNL
      - HTG
      - HUF
      - IDR
      - ILS
      - INR
      - IQD
      - IRR
      - ISK
      - JMD
      - JOD
      - JPY
      - KES
      - KGS
      - KHR
      - KMF
      - KRW
      - KWD
      - KYD
      - KZT
      - LAK
      - LBP
      - LKR
      - LRD
      - LSL
      - LYD
      - MAD
      - MDL
      - MGA
      - MKD
      - MMK
      - MNT
      - MOP
      - MRU
      - MUR
      - MWK
      - MVR
      - MXN
      - MYR
      - MZN
      - NAD
      - NGN
      - NIO
      - NOK
      - NPR
      - NZD
      - OMR
      - PAB
      - PEN
      - PGK
      - PHP
      - PKR
      - PLN
      - PYG
      - QAR
      - RON
      - RSD
      - RWF
      - SAR
      - SCR
      - SDG
      - SEK
      - SGD
      - SLE
      - SLL
      - SOS
      - SRD
      - STN
      - SVC
      - SYP
      - SZL
      - THB
      - TJS
      - TMT
      - TND
      - TOP
      - TRY
      - TTD
      - TWD
      - TZS
      - UAH
      - UGX
      - UYU
      - UZS
      - VND
      - VUV
      - WST
      - XAF
      - XCD
      - XOF
      - XPF
      - YER
      - ZAR
      - ZMW
      - ZWL
      - CDF
      - ERN
      - FKP
      - KPW
      - RUB
      - SBD
      - SHP
      - SSP
      - VES
      title: Currency
    EvmRedeemBody:
      type: object
      properties:
        merchantId:
          type: string
          description: The ID of the merchant requesting redemption.
        subtotal:
          $ref: '#/components/schemas/Subtotal'
        transactionData:
          $ref: '#/components/schemas/EvmTransactionData'
        usdcAmount:
          $ref: '#/components/schemas/Cents'
        signedMessages:
          $ref: '#/components/schemas/SignedMessages'
        chargebackProtectionData:
          $ref: '#/components/schemas/RedeemCartItems'
        validBefore:
          type: string
          description: Values returned from getEvmCreditsAuthMsg endpoint
        nonce:
          type: string
        creditsRawAmount:
          type: number
          format: double
      required:
      - merchantId
      - subtotal
      - transactionData
      - signedMessages
      - validBefore
      - nonce
      - creditsRawAmount
      description: EVM-specific Redeem body
      title: EvmRedeemBody
    ApiError:
      type: object
      properties:
        name:
          type: string
        message:
          type: string
        stack:
          type: string
      required:
      - name
      - message
      title: ApiError
    CustomerUsdcTransferDataValidBefore:
      oneOf:
      - type: string
      - type: number
        format: double
      title: CustomerUsdcTransferDataValidBefore
    TokenRedeem:
      type: object
      properties:
        waitForHash:
          type: boolean
          description: 'Whether the UI should wait

            for the transaction to be sent and

            the hash to be returned.'
        type:
          $ref: '#/components/schemas/TokenRedeemType'
        destination:
          type: string
      required:
      - type
      - destination
      title: TokenRedeem
    Redeem_SendEvmCreditsGaslessTx_Response_200:
      type: object
      properties:
        hash:
          type: string
      required:
      - hash
      title: Redeem_SendEvmCreditsGaslessTx_Response_200
    SafeMintRedeemType:
      type: string
      enum:
      - safeMint
      title: SafeMintRedeemType
    ReturnedTokenIdRedeemType:
      type: string
      enum:
      - returned
      title: ReturnedTokenIdRedeemType
    PickNftCartItemExcludeKeyofnftCartItemSellingPriceOrItemClassListPrice:
      type: object
      properties:
        currency:
          type: string
        valueInCurrency:
          type: number
          format: double
      description: The item's list price
      title: PickNftCartItemExcludeKeyofnftCartItemSellingPriceOrItemClassListPrice
    GetCreditsAuthMessageResponse:
      type: object
      properties:
        message:
          type: string
          description: EIP-712 typed-data JSON string for the user to sign via eth_signTypedData_v
        validBefore:
          type: string
          description: Timestamp indicating signature validity period
        nonce:
          type: string
          description: Unique identifier for the transaction
        creditsRawAmount:
          type: number
          format: double
          description: Total amount of credits that will be used including gas fees
      required:
      - message
      - validBefore
      - nonce
      - creditsRawAmount
      description: For retrieving the typed-data (EIP-712) that a user must sign to authorize credits usage.
      title: GetCreditsAuthMessageResponse
    productType:
      type: string
      enum:
      - inGameProduct
      - gameOfSkill
      - dataStorage
      - computingResources
      - sportsTicket
      - eSportsTicket
      - musicTicket
      - conferenceTicket
      - virtualSportsTicket
      - virtualESportsTicket
      - virtualMusicTicket
      - virtualConferenceTicket
      - alcohol
      - DLC
      - subscription
      - fundACause
      - realEstate
      - computingContract
      - digitalArt
      - topUp
      - ownershipContract
      - inGameCurrency
      - digitalCollectibles
      - digitalCollectiblesMarketplace
      - digitalGiftingMarketplace
      - sweepstakes
      - virtualSportsEvents
      - contractInvoicing
      - onlineCasino
      - cryptoOnramp
      - gaming
      - travelDocuments
      - musicStreaming
      - digitalContent
      - eBooks
      - digitalSubscriptionContent
      title: productType
    CustomerUsdcTransferData:
      type: object
      properties:
        from:
          type: string
        to:
          type: string
        value:
          type: string
        validAfter:
          $ref: '#/components/schemas/CustomerUsdcTransferDataValidAfter'
        validBefore:
          $ref: '#/components/schemas/CustomerUsdcTransferDataValidBefore'
        nonce:
          type: string
        v:
          type: number
          format: double
        r:
          type: string
        s:
          type: string
      required:
      - from
      - to
      - value
      - validAfter
      - validBefore
      - nonce
      - v
      - r
      - s
      description: 'Customer signed USDC transferWithAuthorization data for dual-source payments

        Used for combined USDC + Credit Card payments on EVM chains'
      title: CustomerUsdcTransferData
    RedeemBodyNativeSolToConvert:
      type: object
      properties:
        lamports:
          $ref: '#/components/schemas/RedeemBodyNativeSolToConvertLamports'
      required:
      - lamports
      description: '(Solana Only) Only use this if your subtotal.token is `So11111111111111111111111111111111111111112` and your

        contract requires native SOL. This will convert the amount of wSOL to native SOL for use in the transaction.'
      title: RedeemBodyNativeSolToConvert
    TransactionHistoryItem:
      type: object
      properties:
        txType:
          type: string
        chain:
          type: string
        paymentAmount:
          type: string
        paymentToken:
          type: string
        to:
          type: string
        from:
          type: string
        registryContract:
          type: string
        assetID:
          type: string
        txTime:
          type: string
        blockNumber:
          type: number
          format: double
        txHash:
          type: string
      required:
      - txType
      - chain
      - paymentAmount
      - paymentToken
      - to
      - from
      - registryContract
      - assetID
      - txTime
      - blockNumber
      - txHash
      title: TransactionHistoryItem
    CustomerUsdcTransferDataValidAfter:
      oneOf:
      - type: string
      - type: number
        format: double
      title: CustomerUsdcTransferDataValidAfter
    TokenSubtotalAmount:
      oneOf:
      - type: number
        format: double
      - type: string
      description: Number of tokens
      title: TokenSubtotalAmount
    Subtotal:
      oneOf:
      - $ref: '#/components/schemas/CurrencyCents'
      - $ref: '#/components/schemas/Cents'
      - $ref: '#/components/schemas/TokenSubtotal'
      title: Subtotal
    Cents:
      type: object
      properties:
        cents:
          type: integer
      required:
      - cents
      title: Cents
    TokenSubtotal:
      type: object
      properties:
        address:
          type: string
          description: 'The tokens address


            Solana - Token Mint Address

            Evm - Token Contract Address'
        amount:
          $ref: '#/components/schemas/TokenSubtotalAmount'
          description: Number of tokens
        decimals:
          type: number
          format: double
          description: Number of decimals for the token
      required:
      - address
      - amount
      title: TokenSubtotal
    CustomerUsdcTransferDataV2ValidAfter:
      oneOf:
      - type: string
      - type: number
        format: double
      title: CustomerUsdcTransferDataV2ValidAfter
    ReturnedTokenIdRedeem:
      type: object
      properties:
        waitForHash:
          type: boolean
          description: 'Whether the UI should wait

            for the transaction to be sent and

            the hash to be returned.'
        transaction:
          $ref: '#/components/schemas/ReturnedTokenIdRedeemTransaction'
          description: Transaction to be called.
        type:
          $ref: '#/components/schemas/ReturnedTokenIdRedeemType'
        nftContract:
          type: string
      required:
      - transaction
      - type
      description: '(EVM only) If your contract returns the NFT ID, then utilize this object.


        The contract mints the NFT to msg.sender (which is the Coinflow contract), the Coinflow contract picks up the returned NFT ID, and fwd''s the NFT to the end user''s wallet.'
      title: ReturnedTokenIdRedeem
    Pick_nftCartItem.Exclude_keyofnftCartItem.sellingPrice-or-itemClass__:
      type: object
      properties:
        productName:
          type: string
          description: The name of the related product
        productType:
          $ref: '#/components/schemas/productType'
        listPrice:
          $ref: '#/components/schemas/PickNftCartItemExcludeKeyofnftCartItemSellingPriceOrItemClassListPrice'
          description: The item's list price
        quantity:
          type: number
          format: double
          description: The number of units sold
        rawProductData:
          $ref: '#/components/schemas/AnyObject'
        seller:
          $ref: '#/components/schemas/SellerInfo'
        transactionHistory:
          type: array
          items:
            $ref: '#/components/schemas/TransactionHistoryItem'
      required:
      - productName
      - productType
      - quantity
      description: From T, pick a set of properties whose keys are in the union K
      title: Pick_nftCartItem.Exclude_keyofnftCartItem.sellingPrice-or-itemClass__
    TokenRedeemType:
      type: string
      enum:
      - token
      title: TokenRedeemType
    SafeMintRedeemTransaction:
      type: object
      properties:
        data:
          type: string
          description: 'The data to call this contract with, HEX encoded.


            The coinflow contract calls the "to" contract, contract pulls USDC from msg.sender, and transfers the NFT/item to the "receiver" address defined in the contract function arguments.'
        to:
          type: string
          description: The merchant's whitelisted contract
      required:
      - data
      - to
      description: Transaction to be called.
      title: SafeMintRedeemTransaction
    DecentRedeemCost:
      type: object
      properties:
        isNative:
          type: boolean
          description: 'Whether or not the token is the native token for the chain (ex: Ethereum - ETH, Polygon - POL).

            If native dstToken should be the 0 address (0x00...)'
        amount:
          type: string
          description: 'This is the raw amount of the token

            ex: 50000000000000n'
      required:
      - isNative
      - amount
      description: Amount of the token on the destination chain you will be receiving
      title: DecentRedeemCost
    KnownTokenIdRedeem:
      type: object
      properties:
        waitForHash:
          type: boolean
          description: 'Whether the UI should wait

            for the transaction to be sent and

            the hash to be returned.'
        transaction:
          $ref: '#/components/schemas/KnownTokenIdRedeemTransaction'
          description: Transaction to be called.
        nftContract:
          type: string
          description: The address of the Nft's Contract
        nftId:
          type: string
          description: The ID of the NFT being purchased. Will be forwarded by the Coinflow contract to the customer's wallet.
      required:
      - transaction
      - nftContract
      - nftId
      description: '(EVM only) If your know the ID of the NFT being purchased, then utilize this object.


        The contract transfers the NFT to msg.sender (which is the Coinflow contract), the Coinflow contract fwd''s the NFT to the end user''s wallet.'
      title: KnownTokenIdRedeem
    GetEvmCreditsAuthMsgBody:
      type: object
      properties:
        merchantId:
          type: string
          description: The ID of the merchant requesting redemption.
        subtotal:
          $ref: '#/components/schemas/Subtotal'
        transactionData:
          $ref: '#/components/schemas/EvmTransactionData'
        usdcAmount:
          $ref: '#/components/schemas/Cents'
      required:
      - merchantId
      - subtotal
      - transactionData
      title: GetEvmCreditsAuthMsgBody
    SignedMessages:
      type: object
      properties:
        permitCredits:
          type: string
          description: (Evm only) This is the signed permit messages that the user must sign granting the Merchant Contract access to their balances.
        customerUsdcAuthData:
          $ref: '#/components/schemas/CustomerUsdcTransferData'
        customerUsdcAuthDataV2:
          $ref: '#/components/schemas/CustomerUsdcTransferDataV2'
      required:
      - permitCredits
      title: SignedMessages
    CustomerUsdcTransferDataV2ValidBefore:
      oneOf:
      - type: string
      - type: number
        format: double
      title: CustomerUsdcTransferDataV2ValidBefore
    MerchantWalletRedeemBody:
      type: object
      properties:
        merchantId:
          type: string
        chargebackProtectionData:
          $ref: '#/components/schemas/RedeemCartItems'
        webhookInfo:
          $ref: '#/components/schemas/AnyObject'
        feePercentage:
          type: number
          format: double
          description: 'If this purchase is for a seller/submerchant where the marketplace takes a fee, this is the % fee which is

            taken from the subtotal amount.'
        fixedFee:
          $ref: '#/components/schemas/Cents'
        jwtToken:
          type: string
          description: 'This is a token encoding the parameters for the request. Allows purchase parameters to be verified

            to prevent manipulation when the checkout page is presented to the user.'
        redeemAmount:
          $ref: '#/components/schemas/Cents'
        subtotal:
          $ref: '#/components/schemas/Cents'
      required:
      - merchantId
      - subtotal
      description: From T, pick a set of properties whose keys are in the union K
      title: MerchantWalletRedeemBody
    RedeemBody:
      type: object
      properties:
        merchantId:
          type: string
        subtotal:
          $ref: '#/components/schemas/Subtotal'
        transaction:
          type: string
          description: 'Transaction for which the purchase will be redeemed. This should be constructed by the merchant, and should

            be setup the same way as if the user has USDC/Purchase Token in their wallet. The endpoint will modify this

            transaction and then send it back to the user to sign and send.


            Solana - base 58 encoded transaction, create using: `base58.encode(transaction.serialize({ requireAllSignatures: false, verifySignatures: false }))`

            Evm - Base 64 encoded stringified transaction, create using: `Buffer.from(JSON.stringify(transaction)).toString(''base64'')`'
        signedMessages:
          $ref: '#/components/schemas/SignedMessages'
        chargebackProtectionData:
          $ref: '#/components/schemas/RedeemCartItems'
        rent:
          $ref: '#/components/schemas/RedeemBodyRent'
          description: (Solana Only) if your transaction requires a known amount of Rent to be paid, you can pass it here.
        nativeSolToConvert:
          $ref: '#/components/schemas/RedeemBodyNativeSolToConvert'
          description: '(Solana Only) Only use this if your subtotal.token is `So11111111111111111111111111111111111111112` and your

            contract requires native SOL. This will convert the amount of wSOL to native SOL for use in the transaction.'
        skipBalanceCheck:
          type: boolean
      required:
      - merchantId
      - subtotal
      - transaction
      title: RedeemBody
    EvmTransactionData:
      oneOf:
      - $ref: '#/components/schemas/SafeMintRedeem'
      - $ref: '#/components/schemas/ReturnedTokenIdRedeem'
      - $ref: '#/components/schemas/KnownTokenIdRedeem'
      - $ref: '#/components/schemas/NormalRedeem'
      - $ref: '#/components/schemas/TokenRedeem'
      - $ref: '#/components/schemas/DecentRedeem'
      description: '(EVM only) if you want to execute an EVM transaction on a successful purchase, you can pass a transaction request here.


        Gas fees for the transaction will be automatically calculated and added to the total charged to the customer. Optionally the merchant can opt to pay for these gas fees.'
      title: EvmTransactionData
    CurrencyCents:
      type: object
      properties:
        cents:
          type: integer
        currency:
          $ref: '#/components/schemas/Currency'
      required:
      - cents
      - currency
      title: CurrencyCents
    Record_string.any_:
      type: object
      properties: {}
      description: Construct a type with a set of properties K of type T
      title: Record_string.any_
    KnownTokenIdRedeemTransaction:
      type: object
      properties:
        data:
          type: string
          description: 'The data to call this contract with, HEX encoded.


            The coinflow contract calls the "to" contract, contract pulls USDC from msg.sender, and transfers the NFT/item to the "receiver" address defined in the contract function arguments.'
        to:
          type: string
          description: The merchant's whitelisted contract
      required:
      - data
      - to
      description: Transaction to be called.
      title: KnownTokenIdRedeemTransaction
    RedeemResponse:
      type: object
      properties:
        transaction:
          type: string
          description: 'Transaction for the users wallet to sign and send.


            Solana - base 58 encoded transaction, recover using: `Transaction.from(base58.decode(transaction))`

            Near - Base 64 encoded stringified transaction, recover using: `JSON.p

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coinflow/refs/heads/main/openapi/coinflow-redeem-api-openapi.yml