# Buy Order

The buy order `POST` api takes your `secretKey` as a required parameter which should be in your environment variables as it verifies the integrity of your third-party application.

You will send a `POST` request containing properties like the customer's email, phone number, customer deposit and receipt methods, etc. See example below

## Initates a buy order

<mark style="color:green;">`POST`</mark> `https://canary.xendbridge.com/api/peertopeerorder/buy/initiate`

#### Headers

| Name                                        | Type   | Description       |
| ------------------------------------------- | ------ | ----------------- |
| secretKey<mark style="color:red;">\*</mark> | string | {your\_secretKey} |

#### Request Body

| Name                                                        | Type    | Description                                |
| ----------------------------------------------------------- | ------- | ------------------------------------------ |
| email<mark style="color:red;">\*</mark>                     | string  | <annadoe@gmail.com>                        |
| phoneNumber                                                 | string  | 07012345678                                |
| userName                                                    | string  | annadoe                                    |
| payInCurrencyCode<mark style="color:red;">\*</mark>         | string  | NGN                                        |
| payInCurrencyNetwork<mark style="color:red;">\*</mark>      | string  | LOCAL                                      |
| receieveInCurrencyCode<mark style="color:red;">\*</mark>    | string  | BUSD                                       |
| receieveInCurrencyNetwork<mark style="color:red;">\*</mark> | string  | BEP20                                      |
| orderAmount<mark style="color:red;">\*</mark>               | decimal | 50                                         |
| consumerDepositMethod                                       | object  |                                            |
| paymentMethod<mark style="color:red;">\*</mark>             | string  | Bank                                       |
| paymentData                                                 | object  |                                            |
| accountName<mark style="color:red;">\*</mark>               | string  | John Doe                                   |
| accountNumber<mark style="color:red;">\*</mark>             | string  | 0000187454                                 |
| bankName<mark style="color:red;">\*</mark>                  | string  | Access Bank                                |
| consumerReceiptMethod                                       | object  |                                            |
| paymentMethod<mark style="color:red;">\*</mark>             | string  | Crypto                                     |
| paymentData                                                 | object  |                                            |
| walletAddress<mark style="color:red;">\*</mark>             | String  | 0x52434Ac4BE04393e020c9b16C327d04d4367Cbcd |
| network<mark style="color:red;">\*</mark>                   | string  | BEP-20                                     |

{% tabs %}
{% tab title="200: OK Success" %}

```json
{
    "data": {
        "orderReference": "XB_0877e5692ee946f491bafab275d3d522",
        "receiveInCurrencyCode": "BUSD",
        "payInCurrencyCode": "NGN",
        "receivableAmount": 0.11988108,
        "payableAmount": 50,
        "receivableAmountWithoutMarkup": 0,
        "providerName": "John Doe",
        "providerFirstName": "John",
        "providerLastName": "Doe",
        "providerEmail": "owolabidamilola98@gmail.com",
        "initiatedAt": "2022-05-06T10:56:29.8070515Z",
        "orderExpiryDate": "2022-05-06T11:11:26.3811357Z",
        "initiatedAtTimestamp": 1651834586381,
        "orderExpiryTimestamp": 1651835486381,
        "fundedProviderAtTimeStamp": null,
        "fundedCustomerAtTimeStamp": null,
        "orderCompletedAtTimeStamp": null,
        "p2POrderStatus": "Acknowledged",
        "disputeStatus": "NoDispute",
        "disputeReference": null,
        "orderType": "Buy",
        "providerContact": {
            "phoneNumber": "2348181186644",
            "whatsappNumber": ""
        },
        "customerContact": {
            "email": "annadoe@gmail.com",
            "name": "annadoe",
            "phoneNumber": "07064366723"
        },
        "providerPaymentMethods": {
            "paymentMethod": "Bank",
            "paymentType": "Bank",
            "paymentData": [
                {
                    "bankName": "Access",
                    "accountNumber": "0709876786",
                    "accountName": "John Doe",
                    "currency": "NGN",
                    "network": "LOCAL"
                }
            ],
            "orderPaymentMethod": {
                "bankName": "Access",
                "accountNumber": "0709876786",
                "accountName": "John Doe",
                "currency": "NGN",
                "network": "LOCAL"
            }
        },
        "consumerDepositMethod": {
            "paymentMethod": "Bank",
            "paymentType": 0,
            "paymentData": {
                "bankName": "Access Bank",
                "accountNumber": "0000187849",
                "accountName": "Emmanuel Diala",
                "currency": "NGN",
                "network": "LOCAL"
            }
        },
        "consumerReceiptMethod": {
            "paymentMethod": "Crypto",
            "paymentType": 0,
            "paymentData": {
                "walletAddress": "0x52434Ac4BE04393e020c9b16C327d04d4367Cbcd",
                "network": "BEP20",
                "currency": "BUSD"
            }
        },
        "providerTransactionMetadata": null
    },
    "status": "OK",
    "message": ""
}
```

{% endtab %}

{% tab title="400: Bad Request Iniating another buy order while one is not finished is not allowed." %}

```json
{
    "Status": 2,
    "Message": "You Have A Pending Buy Order",
    "Data": null
}
```

{% endtab %}
{% endtabs %}

<details>

<summary>JSON Request Format</summary>

```json
{
  "emailAddress": "annadoe@gmail.com",
  "phoneNumber": "07064366723",
  "userName": "annadoe",
  "payInCurrencyCode": "NGN",
  "payInCurrencyNetwork": "LOCAL",
  "receiveInCurrencyCode": "BUSD",
  "receiveInCurrencyNetwork": "BEP20",
  "orderAmount": 50,
  "consumerDepositMethod": {
    "paymentMethod": "Bank",
    "paymentData": {
      "accountName": "Anna doe",
      "accountNumber": "0000187849",
      "bankName": "Access Bank"
    }
  },
  "consumerReceiptMethod": {
    "paymentMethod": "Crypto",
    "paymentData": {
      "walletAddress": "0x52434Ac4BE04393e020c9b16C327d04d4367Cbcd",
      "network": "BEP20"
    }
  }
}
```

</details>

{% tabs %}
{% tab title="Request Fields" %}

<table><thead><tr><th width="198.11337367685582">Parameters</th><th width="150">Type</th><th width="167">Definitions</th></tr></thead><tbody><tr><td>emailAddress</td><td>string</td><td><code>Required</code> This is the consumer's email address.</td></tr><tr><td>phoneNumber</td><td>string</td><td><code>Required</code> This is the consumer's phone number.</td></tr><tr><td>userName</td><td>string</td><td><code>Required</code> This is the consumer's username</td></tr><tr><td>payInCurrencyCode</td><td>enum</td><td><code>Required</code> This is the currency code to pay with. Must be <code>NGN</code> for buy order.</td></tr><tr><td>receiveInCurrencyCode</td><td>enum</td><td><code>Required</code> This is the currency code to receive the currency in. Must be <code>BUSD</code> for buy order.</td></tr><tr><td>orderAmount</td><td>decimal</td><td><code>Required</code> The order amount by the consumer.</td></tr><tr><td>consumerDepositMethod</td><td>object</td><td><code>Required</code> This holds the properties of the deposit method of the consumer which is are the bank details.</td></tr><tr><td>paymentMethod</td><td>enum</td><td><code>Required</code> The payment method by which transactions are made. It should be <code>BANK</code>for buy order.</td></tr><tr><td>paymentData</td><td>object</td><td><code>Required</code> This holds the properties of the bank details of the consumer.</td></tr><tr><td>accountName</td><td>string</td><td><code>Required</code> This is the account name of the consumer.</td></tr><tr><td>accountNumber</td><td>string</td><td><code>Required</code> The local account number of the consumer</td></tr><tr><td>bankName</td><td>string</td><td><code>Required</code> This is the bank name of the consumer.</td></tr><tr><td>consumerReceiptMethod</td><td>object</td><td><code>Required</code> This holds the properties of the consumer receiving method. The <code>paymentMethod</code> prop must be <code>Crypto</code> .</td></tr><tr><td>paymentData</td><td>object</td><td><code>Required</code> This holds the properties of the consumer receiving account details.</td></tr><tr><td>walletAddress</td><td>string</td><td><code>Required</code> The crypto wallet address of the consumer.</td></tr><tr><td>network</td><td>string</td><td><code>Required</code> This is the network on which the address is on.</td></tr></tbody></table>
{% endtab %}

{% tab title="Response Fields" %}

<table><thead><tr><th width="248.66666666666666">Parameters</th><th width="150">Type</th><th>Definitions</th></tr></thead><tbody><tr><td>orderReference</td><td>string</td><td>This the reference to a particular order.</td></tr><tr><td>receiveInCurrencyCode</td><td>enum</td><td>This is the currency code to receive the currency in.</td></tr><tr><td>payInCurrencyCode</td><td>enum</td><td>This is the currency code to pay with.</td></tr><tr><td>receivableAmount</td><td>decimal</td><td>This the receivable amount of the currency.</td></tr><tr><td>payableAmount</td><td>decimal</td><td>This is the payable amount of the currency.</td></tr><tr><td>providerName</td><td>string</td><td>This the provider's name.</td></tr><tr><td>providerFirstName</td><td>string</td><td>This is the provider's first name.</td></tr><tr><td>providerLastName</td><td>string</td><td>This is the provider's last name.</td></tr><tr><td>providerEmail</td><td>string</td><td>This is the provider's email address.</td></tr><tr><td>initiatedAt</td><td>DateTime</td><td>The date time the order was made.</td></tr><tr><td>orderExpiryDate</td><td>DateTime</td><td>The expiry date time of the order.</td></tr><tr><td>initiatedAtTimestamp</td><td>long</td><td>The time in milliseconds an order was made</td></tr><tr><td>orderExpiryTimestamp</td><td>long</td><td>The time in milliseconds of when thee order will expire.</td></tr><tr><td>fundedProviderAtTimeStamp</td><td>long</td><td>The time of when a customer indicates payment for an order in milliseconds.</td></tr><tr><td>fundedCustomerAtTimeStamp</td><td>long</td><td>The time of when a provider indicates payment of order to the customer in milliseconds</td></tr><tr><td>orderCompletedAtTimeStamp</td><td>long</td><td>The time in milliseconds an order was completed.</td></tr><tr><td>p2POrderStatus</td><td>enum</td><td>The status of the order at the curent time. It could be <code>Submitted</code>, <code>Cancelled</code>, <code>Acknowledged</code>, <code>FundedProvider</code>, <code>FundReceivedFromUser</code>, <code>FundedUser</code>, <code>Completed</code>, <code>OrderTimedOut</code></td></tr><tr><td>disputeStatus</td><td>enum</td><td>The status of the dispute on an order. It could either be <code>NoDispute</code>, <code>DisputeRaisedByCustomer</code>, <code>DisputeRaisedByProvider</code>, <code>DisputeRaisedByBothParties</code>, <code>DisputeResolved</code>or <code>CouldNotBeResolved</code>.</td></tr><tr><td>orderType</td><td>enum</td><td>This is the status of the order, whether it's a <code>Buy</code> or <code>Sell</code>.</td></tr><tr><td>providerContact</td><td>object</td><td>This is holds properties of a provider's contact information.</td></tr><tr><td>phoneNumber</td><td>string</td><td>The phone number of either the provider or customer.</td></tr><tr><td>whatsappNumber</td><td>string</td><td>The whatsapp number of either the provider or customer.</td></tr><tr><td>customerContact</td><td>object</td><td>This holds the props of the contact information.</td></tr><tr><td>email</td><td>string</td><td>This is an email address of the customer.</td></tr><tr><td>name</td><td>string</td><td>This is the name of the customer.</td></tr><tr><td>phoneNumber</td><td>string</td><td>The phone number of the customer</td></tr><tr><td>providerPaymentMethods</td><td>object</td><td>This holds the properties of the payment methods of the provider.</td></tr><tr><td>paymentMethod</td><td>enum</td><td>This is the method of payment. It could be <code>Bank</code> or <code>Crypto</code></td></tr><tr><td>paymentType</td><td>enum</td><td>This is the type of payment. It could be <code>Bank</code>, <code>Crypto</code>, <code>UserName</code>or <code>MobileMoney</code>.</td></tr><tr><td>paymentData</td><td>object</td><td>This holds the properties of the payment method.</td></tr><tr><td>bankName</td><td>string</td><td>The bank name of the the provider or customer.</td></tr><tr><td>accountNumber</td><td>string</td><td>The bank account number of the provider or customer.</td></tr><tr><td>accountName</td><td>string</td><td>The bank account name of the provider or customer.</td></tr><tr><td>currency</td><td>enum</td><td>The currency in which the order was made. It could be <code>BUSD</code> or <code>NGN</code>.</td></tr><tr><td>orderPaymentMethod</td><td>object</td><td>This holds properties of the payment method in which the order is to be made to.</td></tr><tr><td>consumerDepositMethod</td><td>object</td><td>This holds the properties of the consumer deposit details.</td></tr><tr><td>consumerrReceiptMethod</td><td>object</td><td>This holds the properties of the consumer receiving method details.</td></tr><tr><td>walletAddress</td><td>string</td><td>This is the crypto wallet address of the consumer.</td></tr><tr><td>network</td><td>enum</td><td>This is the network currently supported in the system which the wallet address is based on.</td></tr><tr><td>providerTransactionMetadata</td><td>object</td><td>This holds the properties of the transaction metadata of an order.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
