> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Create Quote

POST https://api-b2b.bigcommerce.com/api/v2/rfq
Content-Type: application/json

Creates a sales quote from the storefront and submits it to the B2B Edition control panel.

Depending on your store's Quote settings configuration, this can be used anonymously to create a quote as a guest shopper, or authenticated with a B2C storefront customer or B2B Company user account. Quotes created with this endpoint share the same [minimum required fields](/developer/api-reference/rest/b2b/management/quotes#minimum-required-fields) as the Create a Quote endpoint in the Server to Server API.

### Draft Quotes

The Buyer Portal allows buyers to save "draft" quotes" that they can edit further until they are ready to submit the quote to their sales representative. The built-Buyer Portal uses local storage, via the [Redux](https://redux.js.org/) library, to store a draft quote's details. This is different from quotes created within the B2B Edition control panel in Draft status, which is saved to the account itself and is visible to all backend users.
      
The Create a Quote endpoint should only be used once a quote is ready to submit to a sales representative. Your application must save quote details in its own storage in order to support draft quotes.

Equivalent Storefront GraphQL Mutation: `quoteCreate`.

### Pricing Field Considerations

Note the following considerations related to pricing fields in the request:

* Quotes created with this endpoint undergo a price validation check to prevent invalid prices. If the check fails, a `BigCommerce API Error` will be raised and logged, preventing quote creation.
    *  To create quotes with custom pricing, use [Create a Quote Form (Server-to-Server)](/developer/api-reference/rest/b2b/management/quotes#create-a-quote-form).
* The `discount` field is present in the request body and the `productList` array; however, the value must be 0, since quote discounts are supplied by the sales rep.
* The `offeredPrice` field on each item in the `productList` array must be provided, but it must equal the `basePrice` value for that product, since it is meant to reflect the quoted price which should not be different at this stage.
* The `subtotal` and `grandTotal` fields must be equal to the sum of each product's `offeredPrice` multiplied by the `quantity`.

Reference: https://docs.bigcommerce.com/developer/api-reference/rest/b2b/storefront/request-for-quote/post-rfq

## Authentication

- `Authorization` header (bearer token, required) — ### Authentication header | Header | Argument | Description | | :-------------- | :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Authorization` | `Bearer {{B2B_JWT_TOKEN}}` | You can obtain this token using the steps described in the [REST Storefront API](/developer/docs/b2b-edition/getting-started/authentication#rest-storefront-api) section\[...] |

## Request

### Body (application/json)

This endpoint expects a quoteData_POST.

- `companyId` (double, required) — The unique identifier for the Company account associated with the quote. This field is required when creating a quote for a Company account.
- `storeHash` (string, required) — The unique store hash for the BigCommerce store.
- `grandTotal` (double, required) — The quoted total after discounts, shipping, and tax are applied.
- `discount` (double, required) — The total value of discounts applied to the quote. This is presented as a fixed value instead of a percentage.
- `userEmail` (string, required) — The email address of the buyer associated with the quote.
- `productList` (list of QuoteDataPostProductListItems, required) — Line item information for the quote.
- `contactInfo` (QuoteDataPostContactInfo, required) — This object contains the contact information for the buyer in the quote.
- `expiredAt` (string, optional) — Use '%m/%d/%Y' format when entering the expiration date.
- `quoteTitle` (string, optional) — The external title given to the quote.
- `referenceNumber` (string, optional) — An identifier for the quote that can be supplied by the sales rep or the buyer, such as a Purchase Order number.
- `notes` (string, optional) — The quote's buyer-facing notes. Use the newline character ` ` to separate each line of text.
- `legalTerms` (string, optional) — The quote's terms and conditions. Use the newline character to separate each line of text. Omitting this field or leaving it blank does not add your store's default terms and conditions to the quote. Instead, the quote will not display any terms.
- `subtotal` (double, optional) — The quoted total after discounts and before shipping and tax.
- `isBackendUser` (enum, optional) — Indicates whether the quote was created by a frontend user like a buyer or Super Admin (`0`), or by a backend user like Sales Staff (`1`).
  - Allowed values: `0`, `1`
- `currency` (currency_REQUEST, optional) — Contains detailed information regarding the quote's currency.
- `shippingAddress` (QuoteDataPostShippingAddress, optional) — Contains information for the shipping address on the quote.
- `bcCustomerId` (integer, optional) — The unique ID for the customer account.
- `channelId` (integer, optional) — The storefront channel ID associated with the quote. This is required if your store has multiple storefront channels. Use '1' for your store's default storefront channel.

## Response

### 200

OK

- `code` (integer, optional, default: 200) — HTTP Response Code
- `message` (string, optional, default: SUCCESS)
- `data` (RfqPostResponsesContentApplicationJsonSchemaData, optional)

## Errors

### 400 Bad Request Error

Bad Request This error occurs if the request body is missing any required fields. The error code is presented in the response as 40020.

- `code` (integer, optional, default: 40020) — HTTP Response Code
- `message` (string, optional, default: Bad Requests Error)
- `data` (RfqPostResponsesContentApplicationJsonSchemaData, optional)

## Types

### QuoteDataPostProductListItems

- `sku` (string, optional) — The line item's SKU.
- `basePrice` (double, optional) — The line item's price before any discounts are applied.
- `discount` (double, optional) — The discount percentage applied to the line item.
- `offeredPrice` (double, optional) — The line item's price after any discounts are applied.
- `quantity` (integer, optional) — The quantity of the line item.
- `productId` (integer, optional) — The unique identifier for the base line item.
- `variantId` (integer, optional) — The unique identifier for the line item variant.
- `imageUrl` (string, optional) — The URL for the line item image on your storefront.
- `orderQuantityMaximum` (integer, optional) — The maximum number of line item units that can be added to the quote.
- `orderQuantityMinimum` (integer, optional) — The minimum number of line item units that can be added to the quote.
- `productName` (string, optional) — The name of the line item.
- `options` (list of OptionListItems, optional) — Variant and modifier option information for the line item.

### QuoteDataPostContactInfo

This object contains the contact information for the buyer in the quote.

- `name` (string, required) — The buyer's full name.
- `email` (string, required) — The buyer's email address.
- `companyName` (string, optional) — The name of the Company associated with the quote's buyer. For B2C customers and guest shoppers, this is the name of their business, if provided.
- `phoneNumber` (string, optional) — The buyer's phone number.

### currency_REQUEST

Contains detailed information regarding the quote's currency.

- `location` (enum, required) — Determines whether the currency symbol is added to the left or the right of quote pricing.
  - Allowed values: `left`, `right`
- `token` (string, required) — The currency symbol.
- `decimalToken` (string, required) — The character used to separate decimal values in quote pricing.
- `decimalPlaces` (double, required) — The number of decimal places displayed in quote pricing.
- `thousandsToken` (string, required) — The character used to separate the hundredths and thousandths places in quote pricing.
- `currencyCode` (string, optional) — The three-letter code corresponding to the quote's currency

### QuoteDataPostShippingAddress

Contains information for the shipping address on the quote.

- `address` (string, required) — The first line of the address."
- `apartment` (string, required) — The second line of the address.
- `city` (string, required) — The city on the address.
- `state` (string, required) — The full name of the state on the address.
- `zipCode` (string, required) — The postal code on the address.
- `country` (string, required) — The full name of the country on the address.

### RfqPostResponsesContentApplicationJsonSchemaData

- `errorMsg` (string, optional, default: Store hash not allow none)

### OptionListItems

- `optionId` (integer, optional) — The unique identifier for the line item's variant or modifier option.
- `optionName` (integer, optional) — The name of the line item's variant or modifier option.
- `optionLabel` (string, optional) — The name of the line item's selected option value.
- `optionValue` (integer, optional) — The unique identifier for the line item's selected option value.

## Examples

### Minimum required fields

**Request**

```json
{
  "companyId": 123456,
  "storeHash": "1234abcd",
  "grandTotal": 1250,
  "discount": 0,
  "userEmail": "mcurie@greatbuysinc.com",
  "productList": {
    "0": {
      "basePrice": 25,
      "discount": 0,
      "offeredPrice": 25,
      "productId": 12345,
      "quantity": 50,
      "sku": "SAN-PL"
    }
  },
  "contactInfo": {
    "name": "Marie Curie",
    "email": "mcurie@greatbuysinc.com"
  },
  "subtotal": 1250,
  "channelId": 1
}
```

**Response**

```json
{
  "code": 200,
  "message": "SUCCESS",
  "data": {
    "quoteId": 123456,
    "quoteUrl": "https://mybcstore.com/#/quoteDetail/123456?date=1745942332"
  }
}
```

**SDK Code**

```python Minimum required fields
import requests

url = "https://api-b2b.bigcommerce.com/api/v2/rfq"

payload = {
    "companyId": 123456,
    "storeHash": "1234abcd",
    "grandTotal": 1250,
    "discount": 0,
    "userEmail": "mcurie@greatbuysinc.com",
    "productList": { "0": {
            "basePrice": 25,
            "discount": 0,
            "offeredPrice": 25,
            "productId": 12345,
            "quantity": 50,
            "sku": "SAN-PL"
        } },
    "contactInfo": {
        "name": "Marie Curie",
        "email": "mcurie@greatbuysinc.com"
    },
    "subtotal": 1250,
    "channelId": 1
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Minimum required fields
const url = 'https://api-b2b.bigcommerce.com/api/v2/rfq';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"companyId":123456,"storeHash":"1234abcd","grandTotal":1250,"discount":0,"userEmail":"mcurie@greatbuysinc.com","productList":{"0":{"basePrice":25,"discount":0,"offeredPrice":25,"productId":12345,"quantity":50,"sku":"SAN-PL"}},"contactInfo":{"name":"Marie Curie","email":"mcurie@greatbuysinc.com"},"subtotal":1250,"channelId":1}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Minimum required fields
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api-b2b.bigcommerce.com/api/v2/rfq"

	payload := strings.NewReader("{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"offeredPrice\": 25,\n      \"productId\": 12345,\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\"\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\"\n  },\n  \"subtotal\": 1250,\n  \"channelId\": 1\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Minimum required fields
require 'uri'
require 'net/http'

url = URI("https://api-b2b.bigcommerce.com/api/v2/rfq")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"offeredPrice\": 25,\n      \"productId\": 12345,\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\"\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\"\n  },\n  \"subtotal\": 1250,\n  \"channelId\": 1\n}"

response = http.request(request)
puts response.read_body
```

```java Minimum required fields
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api-b2b.bigcommerce.com/api/v2/rfq")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"offeredPrice\": 25,\n      \"productId\": 12345,\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\"\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\"\n  },\n  \"subtotal\": 1250,\n  \"channelId\": 1\n}")
  .asString();
```

```php Minimum required fields
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-b2b.bigcommerce.com/api/v2/rfq', [
  'body' => '{
  "companyId": 123456,
  "storeHash": "1234abcd",
  "grandTotal": 1250,
  "discount": 0,
  "userEmail": "mcurie@greatbuysinc.com",
  "productList": {
    "0": {
      "basePrice": 25,
      "discount": 0,
      "offeredPrice": 25,
      "productId": 12345,
      "quantity": 50,
      "sku": "SAN-PL"
    }
  },
  "contactInfo": {
    "name": "Marie Curie",
    "email": "mcurie@greatbuysinc.com"
  },
  "subtotal": 1250,
  "channelId": 1
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Minimum required fields
using RestSharp;

var client = new RestClient("https://api-b2b.bigcommerce.com/api/v2/rfq");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"offeredPrice\": 25,\n      \"productId\": 12345,\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\"\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\"\n  },\n  \"subtotal\": 1250,\n  \"channelId\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Minimum required fields
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "companyId": 123456,
  "storeHash": "1234abcd",
  "grandTotal": 1250,
  "discount": 0,
  "userEmail": "mcurie@greatbuysinc.com",
  "productList": ["0": [
      "basePrice": 25,
      "discount": 0,
      "offeredPrice": 25,
      "productId": 12345,
      "quantity": 50,
      "sku": "SAN-PL"
    ]],
  "contactInfo": [
    "name": "Marie Curie",
    "email": "mcurie@greatbuysinc.com"
  ],
  "subtotal": 1250,
  "channelId": 1
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api-b2b.bigcommerce.com/api/v2/rfq")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### All fields

**Request**

```json
{
  "companyId": 123456,
  "storeHash": "1234abcd",
  "grandTotal": 1250,
  "discount": 0,
  "userEmail": "mcurie@greatbuysinc.com",
  "productList": {
    "0": {
      "basePrice": 25,
      "discount": 0,
      "imageUrl": "https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1",
      "offeredPrice": 25,
      "options": [
        {
          "optionId": 3780,
          "optionLabel": "12",
          "optionName": 3780,
          "optionValue": 18863
        }
      ],
      "orderQuantityMaximum": 0,
      "orderQuantityMinimum": 0,
      "productId": 12345,
      "productName": "Sansevieria",
      "quantity": 50,
      "sku": "SAN-PL",
      "variantId": 74768
    }
  },
  "contactInfo": {
    "name": "Marie Curie",
    "email": "mcurie@greatbuysinc.com",
    "companyName": "Great Buys Incorporated",
    "phoneNumber": "(512) 333-3333"
  },
  "quoteTitle": "Plants Bulk Request",
  "referenceNumber": "04292025-0001",
  "subtotal": 1250,
  "isBackendUser": 1,
  "currency": {
    "location": "left",
    "token": "$",
    "decimalToken": ".",
    "decimalPlaces": 2,
    "thousandsToken": ",",
    "currencyCode": "USD"
  },
  "shippingAddress": {
    "address": "512 Bluebonnet Lane",
    "apartment": "Suite 100",
    "city": "Austin",
    "state": "Texas",
    "zipCode": "78750",
    "country": "United States"
  },
  "bcCustomerId": 123,
  "channelId": 1
}
```

**Response**

```json
{
  "code": 200,
  "message": "SUCCESS",
  "data": {
    "quoteId": 123456,
    "quoteUrl": "https://mybcstore.com/#/quoteDetail/123456?date=1745942332"
  }
}
```

**SDK Code**

```python All fields
import requests

url = "https://api-b2b.bigcommerce.com/api/v2/rfq"

payload = {
    "companyId": 123456,
    "storeHash": "1234abcd",
    "grandTotal": 1250,
    "discount": 0,
    "userEmail": "mcurie@greatbuysinc.com",
    "productList": { "0": {
            "basePrice": 25,
            "discount": 0,
            "imageUrl": "https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1",
            "offeredPrice": 25,
            "options": [
                {
                    "optionId": 3780,
                    "optionLabel": "12",
                    "optionName": 3780,
                    "optionValue": 18863
                }
            ],
            "orderQuantityMaximum": 0,
            "orderQuantityMinimum": 0,
            "productId": 12345,
            "productName": "Sansevieria",
            "quantity": 50,
            "sku": "SAN-PL",
            "variantId": 74768
        } },
    "contactInfo": {
        "name": "Marie Curie",
        "email": "mcurie@greatbuysinc.com",
        "companyName": "Great Buys Incorporated",
        "phoneNumber": "(512) 333-3333"
    },
    "quoteTitle": "Plants Bulk Request",
    "referenceNumber": "04292025-0001",
    "subtotal": 1250,
    "isBackendUser": 1,
    "currency": {
        "location": "left",
        "token": "$",
        "decimalToken": ".",
        "decimalPlaces": 2,
        "thousandsToken": ",",
        "currencyCode": "USD"
    },
    "shippingAddress": {
        "address": "512 Bluebonnet Lane",
        "apartment": "Suite 100",
        "city": "Austin",
        "state": "Texas",
        "zipCode": "78750",
        "country": "United States"
    },
    "bcCustomerId": 123,
    "channelId": 1
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript All fields
const url = 'https://api-b2b.bigcommerce.com/api/v2/rfq';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"companyId":123456,"storeHash":"1234abcd","grandTotal":1250,"discount":0,"userEmail":"mcurie@greatbuysinc.com","productList":{"0":{"basePrice":25,"discount":0,"imageUrl":"https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1","offeredPrice":25,"options":[{"optionId":3780,"optionLabel":"12","optionName":3780,"optionValue":18863}],"orderQuantityMaximum":0,"orderQuantityMinimum":0,"productId":12345,"productName":"Sansevieria","quantity":50,"sku":"SAN-PL","variantId":74768}},"contactInfo":{"name":"Marie Curie","email":"mcurie@greatbuysinc.com","companyName":"Great Buys Incorporated","phoneNumber":"(512) 333-3333"},"quoteTitle":"Plants Bulk Request","referenceNumber":"04292025-0001","subtotal":1250,"isBackendUser":1,"currency":{"location":"left","token":"$","decimalToken":".","decimalPlaces":2,"thousandsToken":",","currencyCode":"USD"},"shippingAddress":{"address":"512 Bluebonnet Lane","apartment":"Suite 100","city":"Austin","state":"Texas","zipCode":"78750","country":"United States"},"bcCustomerId":123,"channelId":1}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go All fields
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api-b2b.bigcommerce.com/api/v2/rfq"

	payload := strings.NewReader("{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"imageUrl\": \"https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1\",\n      \"offeredPrice\": 25,\n      \"options\": [\n        {\n          \"optionId\": 3780,\n          \"optionLabel\": \"12\",\n          \"optionName\": 3780,\n          \"optionValue\": 18863\n        }\n      ],\n      \"orderQuantityMaximum\": 0,\n      \"orderQuantityMinimum\": 0,\n      \"productId\": 12345,\n      \"productName\": \"Sansevieria\",\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\",\n      \"variantId\": 74768\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\",\n    \"companyName\": \"Great Buys Incorporated\",\n    \"phoneNumber\": \"(512) 333-3333\"\n  },\n  \"quoteTitle\": \"Plants Bulk Request\",\n  \"referenceNumber\": \"04292025-0001\",\n  \"subtotal\": 1250,\n  \"isBackendUser\": 1,\n  \"currency\": {\n    \"location\": \"left\",\n    \"token\": \"$\",\n    \"decimalToken\": \".\",\n    \"decimalPlaces\": 2,\n    \"thousandsToken\": \",\",\n    \"currencyCode\": \"USD\"\n  },\n  \"shippingAddress\": {\n    \"address\": \"512 Bluebonnet Lane\",\n    \"apartment\": \"Suite 100\",\n    \"city\": \"Austin\",\n    \"state\": \"Texas\",\n    \"zipCode\": \"78750\",\n    \"country\": \"United States\"\n  },\n  \"bcCustomerId\": 123,\n  \"channelId\": 1\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby All fields
require 'uri'
require 'net/http'

url = URI("https://api-b2b.bigcommerce.com/api/v2/rfq")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"imageUrl\": \"https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1\",\n      \"offeredPrice\": 25,\n      \"options\": [\n        {\n          \"optionId\": 3780,\n          \"optionLabel\": \"12\",\n          \"optionName\": 3780,\n          \"optionValue\": 18863\n        }\n      ],\n      \"orderQuantityMaximum\": 0,\n      \"orderQuantityMinimum\": 0,\n      \"productId\": 12345,\n      \"productName\": \"Sansevieria\",\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\",\n      \"variantId\": 74768\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\",\n    \"companyName\": \"Great Buys Incorporated\",\n    \"phoneNumber\": \"(512) 333-3333\"\n  },\n  \"quoteTitle\": \"Plants Bulk Request\",\n  \"referenceNumber\": \"04292025-0001\",\n  \"subtotal\": 1250,\n  \"isBackendUser\": 1,\n  \"currency\": {\n    \"location\": \"left\",\n    \"token\": \"$\",\n    \"decimalToken\": \".\",\n    \"decimalPlaces\": 2,\n    \"thousandsToken\": \",\",\n    \"currencyCode\": \"USD\"\n  },\n  \"shippingAddress\": {\n    \"address\": \"512 Bluebonnet Lane\",\n    \"apartment\": \"Suite 100\",\n    \"city\": \"Austin\",\n    \"state\": \"Texas\",\n    \"zipCode\": \"78750\",\n    \"country\": \"United States\"\n  },\n  \"bcCustomerId\": 123,\n  \"channelId\": 1\n}"

response = http.request(request)
puts response.read_body
```

```java All fields
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api-b2b.bigcommerce.com/api/v2/rfq")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"imageUrl\": \"https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1\",\n      \"offeredPrice\": 25,\n      \"options\": [\n        {\n          \"optionId\": 3780,\n          \"optionLabel\": \"12\",\n          \"optionName\": 3780,\n          \"optionValue\": 18863\n        }\n      ],\n      \"orderQuantityMaximum\": 0,\n      \"orderQuantityMinimum\": 0,\n      \"productId\": 12345,\n      \"productName\": \"Sansevieria\",\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\",\n      \"variantId\": 74768\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\",\n    \"companyName\": \"Great Buys Incorporated\",\n    \"phoneNumber\": \"(512) 333-3333\"\n  },\n  \"quoteTitle\": \"Plants Bulk Request\",\n  \"referenceNumber\": \"04292025-0001\",\n  \"subtotal\": 1250,\n  \"isBackendUser\": 1,\n  \"currency\": {\n    \"location\": \"left\",\n    \"token\": \"$\",\n    \"decimalToken\": \".\",\n    \"decimalPlaces\": 2,\n    \"thousandsToken\": \",\",\n    \"currencyCode\": \"USD\"\n  },\n  \"shippingAddress\": {\n    \"address\": \"512 Bluebonnet Lane\",\n    \"apartment\": \"Suite 100\",\n    \"city\": \"Austin\",\n    \"state\": \"Texas\",\n    \"zipCode\": \"78750\",\n    \"country\": \"United States\"\n  },\n  \"bcCustomerId\": 123,\n  \"channelId\": 1\n}")
  .asString();
```

```php All fields
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-b2b.bigcommerce.com/api/v2/rfq', [
  'body' => '{
  "companyId": 123456,
  "storeHash": "1234abcd",
  "grandTotal": 1250,
  "discount": 0,
  "userEmail": "mcurie@greatbuysinc.com",
  "productList": {
    "0": {
      "basePrice": 25,
      "discount": 0,
      "imageUrl": "https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1",
      "offeredPrice": 25,
      "options": [
        {
          "optionId": 3780,
          "optionLabel": "12",
          "optionName": 3780,
          "optionValue": 18863
        }
      ],
      "orderQuantityMaximum": 0,
      "orderQuantityMinimum": 0,
      "productId": 12345,
      "productName": "Sansevieria",
      "quantity": 50,
      "sku": "SAN-PL",
      "variantId": 74768
    }
  },
  "contactInfo": {
    "name": "Marie Curie",
    "email": "mcurie@greatbuysinc.com",
    "companyName": "Great Buys Incorporated",
    "phoneNumber": "(512) 333-3333"
  },
  "quoteTitle": "Plants Bulk Request",
  "referenceNumber": "04292025-0001",
  "subtotal": 1250,
  "isBackendUser": 1,
  "currency": {
    "location": "left",
    "token": "$",
    "decimalToken": ".",
    "decimalPlaces": 2,
    "thousandsToken": ",",
    "currencyCode": "USD"
  },
  "shippingAddress": {
    "address": "512 Bluebonnet Lane",
    "apartment": "Suite 100",
    "city": "Austin",
    "state": "Texas",
    "zipCode": "78750",
    "country": "United States"
  },
  "bcCustomerId": 123,
  "channelId": 1
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp All fields
using RestSharp;

var client = new RestClient("https://api-b2b.bigcommerce.com/api/v2/rfq");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"companyId\": 123456,\n  \"storeHash\": \"1234abcd\",\n  \"grandTotal\": 1250,\n  \"discount\": 0,\n  \"userEmail\": \"mcurie@greatbuysinc.com\",\n  \"productList\": {\n    \"0\": {\n      \"basePrice\": 25,\n      \"discount\": 0,\n      \"imageUrl\": \"https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1\",\n      \"offeredPrice\": 25,\n      \"options\": [\n        {\n          \"optionId\": 3780,\n          \"optionLabel\": \"12\",\n          \"optionName\": 3780,\n          \"optionValue\": 18863\n        }\n      ],\n      \"orderQuantityMaximum\": 0,\n      \"orderQuantityMinimum\": 0,\n      \"productId\": 12345,\n      \"productName\": \"Sansevieria\",\n      \"quantity\": 50,\n      \"sku\": \"SAN-PL\",\n      \"variantId\": 74768\n    }\n  },\n  \"contactInfo\": {\n    \"name\": \"Marie Curie\",\n    \"email\": \"mcurie@greatbuysinc.com\",\n    \"companyName\": \"Great Buys Incorporated\",\n    \"phoneNumber\": \"(512) 333-3333\"\n  },\n  \"quoteTitle\": \"Plants Bulk Request\",\n  \"referenceNumber\": \"04292025-0001\",\n  \"subtotal\": 1250,\n  \"isBackendUser\": 1,\n  \"currency\": {\n    \"location\": \"left\",\n    \"token\": \"$\",\n    \"decimalToken\": \".\",\n    \"decimalPlaces\": 2,\n    \"thousandsToken\": \",\",\n    \"currencyCode\": \"USD\"\n  },\n  \"shippingAddress\": {\n    \"address\": \"512 Bluebonnet Lane\",\n    \"apartment\": \"Suite 100\",\n    \"city\": \"Austin\",\n    \"state\": \"Texas\",\n    \"zipCode\": \"78750\",\n    \"country\": \"United States\"\n  },\n  \"bcCustomerId\": 123,\n  \"channelId\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift All fields
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "companyId": 123456,
  "storeHash": "1234abcd",
  "grandTotal": 1250,
  "discount": 0,
  "userEmail": "mcurie@greatbuysinc.com",
  "productList": ["0": [
      "basePrice": 25,
      "discount": 0,
      "imageUrl": "https://cdn11.bigcommerce.com/s-1234abcd/products/12345/images/3080/sansevieria-1__58536__96021.1736973469.500.659.jpg?c=1",
      "offeredPrice": 25,
      "options": [
        [
          "optionId": 3780,
          "optionLabel": "12",
          "optionName": 3780,
          "optionValue": 18863
        ]
      ],
      "orderQuantityMaximum": 0,
      "orderQuantityMinimum": 0,
      "productId": 12345,
      "productName": "Sansevieria",
      "quantity": 50,
      "sku": "SAN-PL",
      "variantId": 74768
    ]],
  "contactInfo": [
    "name": "Marie Curie",
    "email": "mcurie@greatbuysinc.com",
    "companyName": "Great Buys Incorporated",
    "phoneNumber": "(512) 333-3333"
  ],
  "quoteTitle": "Plants Bulk Request",
  "referenceNumber": "04292025-0001",
  "subtotal": 1250,
  "isBackendUser": 1,
  "currency": [
    "location": "left",
    "token": "$",
    "decimalToken": ".",
    "decimalPlaces": 2,
    "thousandsToken": ",",
    "currencyCode": "USD"
  ],
  "shippingAddress": [
    "address": "512 Bluebonnet Lane",
    "apartment": "Suite 100",
    "city": "Austin",
    "state": "Texas",
    "zipCode": "78750",
    "country": "United States"
  ],
  "bcCustomerId": 123,
  "channelId": 1
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api-b2b.bigcommerce.com/api/v2/rfq")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```