> 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.

# Assign Fulfillment Center


POST https://api.shipbob.com/2026-01/shipment/{shipmentId}:assignFulfillmentCenter
Content-Type: application/json

Assigns a specific fulfillment center to a shipment, overriding the automatically selected one. The caller must have access to the target fulfillment center.

**Important — asynchronous inventory re-evaluation:** This action does NOT pre-check inventory availability at the target fulfillment center. The assignment succeeds immediately and inventory allocation re-evaluates the shipment asynchronously; if stock is missing at the target FC the shipment may land in an exception state. It also does not revalidate that the target fulfillment center supports the shipment's current shipping service. Both behaviors mirror the merchant dashboard.

**Validation:** The action is rejected when the shipment is already picked, being picked, or sorted by the warehouse; cancelled; shipped or completed; a Kitting shipment; an Automated Amazon FBA shipment; or when the target fulfillment center is inactive or not accessible to the caller.

**Note on error handling:** This endpoint returns HTTP 200 for both successful and failed operations. Always check the `is_success` field in the response body; when `is_success` is `false`, the `error` object contains the code and message. HTTP 400 is only returned when the request body itself is missing (null); a missing or non-positive `fulfillment_center_id` is returned as HTTP 200 with `is_success: false`.


Reference: https://developer.shipbob.com/2026-01/api/orders/assign-fulfillment-center

## 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

### Path parameters

- `shipmentId` (integer, required) — Unique identifier of the shipment

### Body (application/json)

- `fulfillment_center_id` (integer, required) — Unique identifier of the fulfillment center to assign to the shipment. The caller must have access to it and it must be active.

## Response

### 200

OK

- `error` (object, optional, nullable) — Error details if the update was not successful
  - `code` (enum, optional) — Error code identifying the type of error
    - Allowed values: `INVALID_PARAMETER`, `VALIDATION_ERROR`, `DATABASE_UPDATE_ERROR`, `REPROCESSING_ERROR`, `DEALLOCATE_ERROR`, `NOT_FOUND`, `CONFLICT`
  - `message` (string, optional, nullable) — Human-readable description of the error
- `id` (long, optional) — Unique identifier of the shipment
- `is_success` (boolean, optional) — Indicates whether the update was successful

## Examples

**Request**

```json
{
  "fulfillment_center_id": 10
}
```

**Response**

```json
{
  "id": 123456,
  "is_success": true
}
```

**SDK Code**

```python default
import requests

url = "https://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter"

payload = { "fulfillment_center_id": 10 }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript default
const url = 'https://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"fulfillment_center_id":10}'
};

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://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter"

	payload := strings.NewReader("{\n  \"fulfillment_center_id\": 10\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 default
require 'uri'
require 'net/http'

url = URI("https://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter")

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  \"fulfillment_center_id\": 10\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://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"fulfillment_center_id\": 10\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter', [
  'body' => '{
  "fulfillment_center_id": 10
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp default
using RestSharp;

var client = new RestClient("https://api.shipbob.com/2026-01/shipment/1:assignFulfillmentCenter");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"fulfillment_center_id\": 10\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift default
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["fulfillment_center_id": 10] as [String : Any]

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

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