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

# Estimate Fulfillment Cost For Order

POST https://api.shipbob.com/2025-07/order:estimate
Content-Type: application/json

This endpoint will provide, where possible, an estimate of pricing and fulfillment center assignment of a potential standard (direct to consumer) order. Keep in mind that there are ways for the merchant to change FC assignment or product configuration after order creation that could invalidate this estimate. Estimates cannot be returned for items that are unknown, out of stock, or too large for fulfillment using standard box sizes. Additional services such as high-pick fees, shipping insurance, auto-splitting or auto-adding items to orders, and signature required are not included in this estimate.

Reference: https://developer.shipbob.com/2025-07/api/orders/estimate-fulfillment-cost-for-order

## Authentication

- `Authorization` header (bearer token, required) — Authentication using Personal Access Token (PAT) token
- `Authorization` header (bearer token, required) — OAuth2 authentication using JWT tokens

## Servers

- `https://api.shipbob.com` (https://api.shipbob.com, default)
- `https://sandbox-api.shipbob.com` (https://sandbox-api.shipbob.com)

## Request

### Headers

- `shipbob_channel_id` (string, required) — Channel Id for Operation

### Body (application/json)

- `address` (object, required)
  - `country` (string, required) — The country (Must be ISO Alpha-2 for estimates)
  - `address1` (string, optional, nullable) — First line of the address
  - `address2` (string, optional, nullable) — Second line of the address
  - `city` (string, optional, nullable) — The city
  - `company_name` (string, optional, nullable) — Name of the company receiving the shipment
  - `state` (string, optional, nullable) — The state or province
  - `zip_code` (string, optional, nullable) — The zip code or postal code
- `products` (list of object, required) — Products to be included in the order. Each product must include one of reference_id or id
  - `quantity` (integer, required) — The quantity of this product ordered
  - `id` (integer, optional, nullable) — Unique id of the product (Must be provided if reference_id is unknown)
  - `reference_id` (string, optional, nullable) — Unique reference id of the product (Must be provided if ID is unknown)
- `shipping_methods` (list of string, optional, nullable) — Array of strings specifying shipping methods for which to fetch estimates. If this field is omitted we will return estimates for all shipping methods defined in ShipBob

## Response

### 200

Success

- `estimates` (list of object, optional, nullable) — Array of estimates for each shipping method
  - `estimated_currency_code` (string, optional, nullable) — Estimated local currency code
  - `estimated_price` (double, optional) — Estimated price in dollars for the provided shipping method
  - `fulfillment_center` (object, optional) — Information about a fulfillment center that a shipment can belong to
    - `id` (integer, optional) — Id of the fulfillment center
    - `name` (string, optional, nullable) — Name of the fulfillment center
  - `shipping_method` (string, optional, nullable) — Provided shipping method. Maps to ship option in ShipBob.
  - `total_weight_oz` (double, optional) — Total weight of items in cart including packaging.

## Examples

**Request**

```json
{
  "address": {
    "country": "US",
    "address1": "100 Nowhere Blvd",
    "address2": "Suite 100",
    "city": "Gotham City",
    "company_name": "Wayne Enterprises",
    "state": "NJ",
    "zip_code": "07093"
  },
  "products": [
    {
      "quantity": 1,
      "id": 0,
      "reference_id": "TShirtBlueM"
    }
  ],
  "shipping_methods": [
    "string"
  ]
}
```

**Response**

```json
{
  "estimates": [
    {
      "estimated_currency_code": "string",
      "estimated_price": 0.1,
      "fulfillment_center": {
        "id": 0,
        "name": "Cicero (IL)"
      },
      "shipping_method": "string",
      "total_weight_oz": 0.1
    }
  ]
}
```

**SDK Code**

```python Orders_estimateFulfillmentCostForOrder_example
import requests

url = "https://api.shipbob.com/2025-07/order:estimate"

payload = {
    "address": {
        "country": "US",
        "address1": "100 Nowhere Blvd",
        "address2": "Suite 100",
        "city": "Gotham City",
        "company_name": "Wayne Enterprises",
        "state": "NJ",
        "zip_code": "07093"
    },
    "products": [
        {
            "quantity": 1,
            "id": 0,
            "reference_id": "TShirtBlueM"
        }
    ],
    "shipping_methods": ["string"]
}
headers = {
    "shipbob_channel_id": "shipbob_channel_id",
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Orders_estimateFulfillmentCostForOrder_example
const url = 'https://api.shipbob.com/2025-07/order:estimate';
const options = {
  method: 'POST',
  headers: {
    shipbob_channel_id: 'shipbob_channel_id',
    Authorization: 'Bearer <token>',
    'Content-Type': 'application/json'
  },
  body: '{"address":{"country":"US","address1":"100 Nowhere Blvd","address2":"Suite 100","city":"Gotham City","company_name":"Wayne Enterprises","state":"NJ","zip_code":"07093"},"products":[{"quantity":1,"id":0,"reference_id":"TShirtBlueM"}],"shipping_methods":["string"]}'
};

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

```go Orders_estimateFulfillmentCostForOrder_example
package main

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

func main() {

	url := "https://api.shipbob.com/2025-07/order:estimate"

	payload := strings.NewReader("{\n  \"address\": {\n    \"country\": \"US\",\n    \"address1\": \"100 Nowhere Blvd\",\n    \"address2\": \"Suite 100\",\n    \"city\": \"Gotham City\",\n    \"company_name\": \"Wayne Enterprises\",\n    \"state\": \"NJ\",\n    \"zip_code\": \"07093\"\n  },\n  \"products\": [\n    {\n      \"quantity\": 1,\n      \"id\": 0,\n      \"reference_id\": \"TShirtBlueM\"\n    }\n  ],\n  \"shipping_methods\": [\n    \"string\"\n  ]\n}")

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

	req.Header.Add("shipbob_channel_id", "shipbob_channel_id")
	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 Orders_estimateFulfillmentCostForOrder_example
require 'uri'
require 'net/http'

url = URI("https://api.shipbob.com/2025-07/order:estimate")

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

request = Net::HTTP::Post.new(url)
request["shipbob_channel_id"] = 'shipbob_channel_id'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"address\": {\n    \"country\": \"US\",\n    \"address1\": \"100 Nowhere Blvd\",\n    \"address2\": \"Suite 100\",\n    \"city\": \"Gotham City\",\n    \"company_name\": \"Wayne Enterprises\",\n    \"state\": \"NJ\",\n    \"zip_code\": \"07093\"\n  },\n  \"products\": [\n    {\n      \"quantity\": 1,\n      \"id\": 0,\n      \"reference_id\": \"TShirtBlueM\"\n    }\n  ],\n  \"shipping_methods\": [\n    \"string\"\n  ]\n}"

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

```java Orders_estimateFulfillmentCostForOrder_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.shipbob.com/2025-07/order:estimate")
  .header("shipbob_channel_id", "shipbob_channel_id")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"address\": {\n    \"country\": \"US\",\n    \"address1\": \"100 Nowhere Blvd\",\n    \"address2\": \"Suite 100\",\n    \"city\": \"Gotham City\",\n    \"company_name\": \"Wayne Enterprises\",\n    \"state\": \"NJ\",\n    \"zip_code\": \"07093\"\n  },\n  \"products\": [\n    {\n      \"quantity\": 1,\n      \"id\": 0,\n      \"reference_id\": \"TShirtBlueM\"\n    }\n  ],\n  \"shipping_methods\": [\n    \"string\"\n  ]\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.shipbob.com/2025-07/order:estimate', [
  'body' => '{
  "address": {
    "country": "US",
    "address1": "100 Nowhere Blvd",
    "address2": "Suite 100",
    "city": "Gotham City",
    "company_name": "Wayne Enterprises",
    "state": "NJ",
    "zip_code": "07093"
  },
  "products": [
    {
      "quantity": 1,
      "id": 0,
      "reference_id": "TShirtBlueM"
    }
  ],
  "shipping_methods": [
    "string"
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
    'shipbob_channel_id' => 'shipbob_channel_id',
  ],
]);

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

```csharp Orders_estimateFulfillmentCostForOrder_example
using RestSharp;

var client = new RestClient("https://api.shipbob.com/2025-07/order:estimate");
var request = new RestRequest(Method.POST);
request.AddHeader("shipbob_channel_id", "shipbob_channel_id");
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"address\": {\n    \"country\": \"US\",\n    \"address1\": \"100 Nowhere Blvd\",\n    \"address2\": \"Suite 100\",\n    \"city\": \"Gotham City\",\n    \"company_name\": \"Wayne Enterprises\",\n    \"state\": \"NJ\",\n    \"zip_code\": \"07093\"\n  },\n  \"products\": [\n    {\n      \"quantity\": 1,\n      \"id\": 0,\n      \"reference_id\": \"TShirtBlueM\"\n    }\n  ],\n  \"shipping_methods\": [\n    \"string\"\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Orders_estimateFulfillmentCostForOrder_example
import Foundation

let headers = [
  "shipbob_channel_id": "shipbob_channel_id",
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "address": [
    "country": "US",
    "address1": "100 Nowhere Blvd",
    "address2": "Suite 100",
    "city": "Gotham City",
    "company_name": "Wayne Enterprises",
    "state": "NJ",
    "zip_code": "07093"
  ],
  "products": [
    [
      "quantity": 1,
      "id": 0,
      "reference_id": "TShirtBlueM"
    ]
  ],
  "shipping_methods": ["string"]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.shipbob.com/2025-07/order:estimate")! 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()
```