> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developer-stage.shipbob.dev/2026-07/api/orders/estimate-fulfillment-cost-for-order/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer-stage.shipbob.dev/_mcp/server. # Estimate Fulfillment Cost For Order POST https://sandbox-api.shipbob.com/2026-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-stage.shipbob.dev/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 ## Request ### Headers - `shipbob_channel_id` (integer, required) — Channel Id for Operation ### Body (application/json) This endpoint expects an Orders.EstimateFulfillmentRequestModel. - `address` (Orders.EstimationAddressViewModel, required) - `products` (list of Orders.EstimateProductInfoModel, required) — Products to be included in the order. Each product must include one of reference_id or id - `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 Orders.EstimateDetailViewModel, optional, nullable) — Array of estimates for each shipping method ## Errors ### 400 Bad Request Error Bad Request - `map from string to list of string` ### 401 Unauthorized Error No access right at this time - `any` ### 403 Forbidden Error No access - `any` ### 422 Unprocessable Entity Error Client Error - `map from string to list of string` ## Types ### Orders.EstimationAddressViewModel - `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 ### Orders.EstimateProductInfoModel - `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) ### Orders.EstimateDetailViewModel - `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` (Orders.FulfillmentCenterViewModel, optional) — Information about a fulfillment center that a shipment can belong to - `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. ### Orders.FulfillmentCenterViewModel 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 ## 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 default import requests url = "https://sandbox-api.shipbob.com/2026-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": "1", "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript default const url = 'https://sandbox-api.shipbob.com/2026-07/order:estimate'; const options = { method: 'POST', headers: { shipbob_channel_id: '1', Authorization: 'Bearer ', '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 default package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://sandbox-api.shipbob.com/2026-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", "1") req.Header.Add("Authorization", "Bearer ") 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 default require 'uri' require 'net/http' url = URI("https://sandbox-api.shipbob.com/2026-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"] = '1' request["Authorization"] = 'Bearer ' 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 default import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://sandbox-api.shipbob.com/2026-07/order:estimate") .header("shipbob_channel_id", "1") .header("Authorization", "Bearer ") .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 default request('POST', 'https://sandbox-api.shipbob.com/2026-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 ', 'Content-Type' => 'application/json', 'shipbob_channel_id' => '1', ], ]); echo $response->getBody(); ``` ```csharp default using RestSharp; var client = new RestClient("https://sandbox-api.shipbob.com/2026-07/order:estimate"); var request = new RestRequest(Method.POST); request.AddHeader("shipbob_channel_id", "1"); request.AddHeader("Authorization", "Bearer "); 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 default import Foundation let headers = [ "shipbob_channel_id": "1", "Authorization": "Bearer ", "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://sandbox-api.shipbob.com/2026-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() ```