---
agentTools:
  projectIndex: https://parcel.readme.io/llms.txt
---

# Buying Guide

1. ```text
   /* One of several possible responses -- all responses follow this basic structure */
   {
     "data": {
       "buy": {
         "label": "Confirm transaction in your wallet",
         "description": "To purchase this item you must confirm the transaction and pay the gas fee",
         "type": "transaction",
         "name": "sale",
         "item": {
           "data": "{\"from\":\"0x1611036b9fd2091741f320d45f4b2ec7785de274\",\"to\":\"0x00000000000000adc04c56bf30ac9d3c0aaf14dc\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000581a8f21c8f000000000000000000000000000622a5b6c4e544a4c085745c4b147d995bb235bbe000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c000000000000000000000000006e4c6d9b0930073e958abd2aba516b885260b8ff00000000000000000000000000000000000000000000000000000000000203c7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064dc162d0000000000000000000000000000000000000000000000000000000064dc243d000000000000000000000000000000000000000000000000000000000000000072db8c0b0000000000000000000000000000000000000000305f52bd170fdee70000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b56064a4d0e695d7a289df8d7df9550c411b14a57f966ce41f490688b6a1a14f23018aac61fabe2e94fe213e8295bfd2505e2efa717a42a83deee954b79ecce01d4da48b4bf8877e\",\"value\":\"0x581a8f21c8f000\"}",
           "tx_hash": null,
           "order_data": "{}",
           "order_indexes": null
         },
         "steps_summary": [
           {
             "description": "To purchase this item you must confirm the transaction and pay the gas fee",
             "label": "Confirm transaction in your wallet",
             "name": "sale",
             "status": "incomplete"
           }
         ]
       }
     }
   }
   ```

* The same endpoint is used from start to finish.
  * The response contains the step that needs to be performed.
  * Some steps will require more parameters to be passed in (e.g. `signature` or `txHash`)
* `steps_summary` shows the steps that are left to complete the transaction
  * `status` indicates if this is already done or not.
* The `type` property determines what needs to be done on the frontend
  * For `transaction`, the `item.data` needs to be called in `sendTransaction` in the data field
    * Because transactions take some time to settle, you can call the endpoint again with the `txHash` passed in to get the status of the transaction.
    * It is recommended that you don't keep spamming the endpoint as you will get rate limited.
    * ```
      {
          "query": "\n  query Buy(\n    $chainId: Int!\n    $listingId: Int!\n    $takerAddress: String!\n    $signature: String\n    $skipNetworkCheck: Boolean\n    $txHash: String\n  ) {\n    buy(\n      chain_id: $chainId\n      listing_id: $listingId\n      taker_address: $takerAddress\n      signature: $signature\n      skip_network_check: $skipNetworkCheck\n      tx_hash: $txHash\n    ) {\n      label\n      description\n      type\n      name\n      item {\n        data\n        tx_hash\n        order_data\n        order_indexes\n      }\n      steps_summary {\n        description\n        label\n        name\n        status\n      }\n    }\n  }\n",
          "variables": {
              "chainId": 1,
              "listingId": 6762667,
              "takerAddress": "0x1611036b9Fd2091741F320d45f4B2Ec7785DE274",
              "signature": "",
              "skipNetworkCheck": true,
              "txHash": "0x2b6d45b9e7d266b773d0b0378bae4dda81fe2abc92fcf4366482518750d0a45e"
          }
      }
      ```
    * If the transaction is still settling you will get:
    * ```
      {
        "data": {
          "buy": {
            "label": "Scanning the blockchain",
            "description": "We are waiting for the blockchain confirmation",
            "type": "confirmation",
            "name": "status-pending",
            "item": null,
            "steps_summary": null
          }
        }
      }
      ```
    * Once the transaction is settled, you will get:
    * ```
      {
        "data": {
          "buy": {
            "label": "Buy was successful",
            "description": "Congrats! You successfully bought the item.",
            "type": "confirmation",
            "name": "buy-success",
            "item": null,
            "steps_summary": null
          }
        }
      }
      ```
  * For `signature`, the `item.data` needs to be passed in the signature call.
    * If the `item.data.kind` is `eip191`, the signing function should be `signMessage`
    * Otherwise, `signTypeData` should be called with an object with the following keys: `domain`, `types`, `message`, `primaryType`.
    * After the `signature` step is performed on the client side, the endpoint should be called again with the same parameters along with the signature generated from the wallet.
  * For all endpoints, you can show the user a success UI when you get a response back with the `name` that includes `success` in its value.