> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer-stage.shipbob.dev/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-01/order:estimate
Content-Type: application/json-patch+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

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: api-2026-01
  version: 1.0.0
paths:
  /2026-01/order:estimate:
    post:
      operationId: estimate-fulfillment-cost-for-order
      summary: Estimate Fulfillment Cost For Order
      description: >-
        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.
      tags:
        - subpackage_orders
      parameters:
        - name: Authorization
          in: header
          description: Authentication using Personal Access Token (PAT) token
          required: true
          schema:
            type: string
        - name: shipbob_channel_id
          in: header
          description: Channel Id for Operation
          required: true
          schema:
            $ref: >-
              #/components/schemas/Orders.Post.Api.Order.Estimate.Shipbob.Channel.Id.Integer
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Orders.EstimateViewModel'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Orders.Post.Api.Order.Estimate.Bad.Request.Object
        '401':
          description: No access right at this time
          content:
            application/json:
              schema:
                description: Any type
        '403':
          description: No access
          content:
            application/json:
              schema:
                description: Any type
        '422':
          description: Client Error
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Orders.Post.Api.Order.Estimate.Unprocessable.Entity.Object
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Orders.EstimateFulfillmentRequestModel'
servers:
  - url: https://sandbox-api.shipbob.com
    description: https://sandbox-api.shipbob.com
components:
  schemas:
    Orders.Post.Api.Order.Estimate.Shipbob.Channel.Id.Integer:
      type: integer
      title: Orders.Post.Api.Order.Estimate.Shipbob.Channel.Id.Integer
    Orders.EstimationAddressViewModel:
      type: object
      properties:
        address1:
          type: string
          description: First line of the address
        address2:
          type: string
          description: Second line of the address
        city:
          type: string
          description: The city
        company_name:
          type: string
          description: Name of the company receiving the shipment
        country:
          type: string
          description: The country (Must be ISO Alpha-2 for estimates)
        state:
          type: string
          description: The state or province
        zip_code:
          type: string
          format: postal-code
          description: The zip code or postal code
      required:
        - country
      title: Orders.EstimationAddressViewModel
    Orders.EstimateProductInfoModel:
      type: object
      properties:
        id:
          type: integer
          description: >-
            Unique id of the product (Must be provided if reference_id is
            unknown)
        quantity:
          type: integer
          description: The quantity of this product ordered
        reference_id:
          type: string
          description: >-
            Unique reference id of the product (Must be provided if ID is
            unknown)
      required:
        - quantity
      title: Orders.EstimateProductInfoModel
    Orders.EstimateFulfillmentRequestModel:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Orders.EstimationAddressViewModel'
        products:
          type: array
          items:
            $ref: '#/components/schemas/Orders.EstimateProductInfoModel'
          description: >-
            Products to be included in the order. Each product must include one
            of reference_id or id
        shipping_methods:
          type: array
          items:
            type: string
          description: "Array of strings specifying shipping methods for which to fetch estimates.\r\n\r\nIf this field is omitted we will return estimates for all shipping methods defined in ShipBob"
      required:
        - address
        - products
      title: Orders.EstimateFulfillmentRequestModel
    Orders.FulfillmentCenterViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Id of the fulfillment center
        name:
          type: string
          description: Name of the fulfillment center
      description: Information about a fulfillment center that a shipment can belong to
      title: Orders.FulfillmentCenterViewModel
    Orders.EstimateDetailViewModel:
      type: object
      properties:
        estimated_currency_code:
          type: string
          description: Estimated local currency code
        estimated_price:
          type: number
          format: double
          description: Estimated price in dollars for the provided shipping method
        fulfillment_center:
          $ref: '#/components/schemas/Orders.FulfillmentCenterViewModel'
        shipping_method:
          type: string
          description: Provided shipping method. Maps to ship option in ShipBob.
        total_weight_oz:
          type: number
          format: double
          description: Total weight of items in cart including packaging.
      title: Orders.EstimateDetailViewModel
    Orders.EstimateViewModel:
      type: object
      properties:
        estimates:
          type: array
          items:
            $ref: '#/components/schemas/Orders.EstimateDetailViewModel'
          description: Array of estimates for each shipping method
      title: Orders.EstimateViewModel
    Orders.Post.Api.Order.Estimate.Bad.Request.Object:
      type: object
      additionalProperties:
        type: array
        items:
          type: string
      title: Orders.Post.Api.Order.Estimate.Bad.Request.Object
    Orders.Post.Api.Order.Estimate.Unprocessable.Entity.Object:
      type: object
      additionalProperties:
        type: array
        items:
          type: string
      title: Orders.Post.Api.Order.Estimate.Unprocessable.Entity.Object
  securitySchemes:
    PAT:
      type: http
      scheme: bearer
      description: Authentication using Personal Access Token (PAT) token
    OAuth2:
      type: http
      scheme: bearer
      description: OAuth2 authentication using JWT tokens

```

## 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-01/order:estimate"

payload = "{\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}"
headers = {
    "shipbob_channel_id": "1",
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json-patch+json"
}

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

print(response.json())
```

```javascript default
const url = 'https://sandbox-api.shipbob.com/2026-01/order:estimate';
const options = {
  method: 'POST',
  headers: {
    shipbob_channel_id: '1',
    Authorization: 'Bearer <token>',
    'Content-Type': 'application/json-patch+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}'
};

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-01/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 <token>")
	req.Header.Add("Content-Type", "application/json-patch+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-01/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 <token>'
request["Content-Type"] = 'application/json-patch+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<String> response = Unirest.post("https://sandbox-api.shipbob.com/2026-01/order:estimate")
  .header("shipbob_channel_id", "1")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json-patch+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
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://sandbox-api.shipbob.com/2026-01/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-patch+json',
    'shipbob_channel_id' => '1',
  ],
]);

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

```csharp default
using RestSharp;

var client = new RestClient("https://sandbox-api.shipbob.com/2026-01/order:estimate");
var request = new RestRequest(Method.POST);
request.AddHeader("shipbob_channel_id", "1");
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json-patch+json");
request.AddParameter("application/json-patch+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 <token>",
  "Content-Type": "application/json-patch+json"
]

let postData = NSData(data: "{
  "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"
  ]
}".data(using: String.Encoding.utf8)!)

let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.shipbob.com/2026-01/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()
```