curl --request POST \
--url https://api.arcuserp.com/v1/fulfillment/pack-order \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"auto_rate": true,
"auto_buy_label": true
}
'import requests
url = "https://api.arcuserp.com/v1/fulfillment/pack-order"
payload = {
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"auto_rate": True,
"auto_buy_label": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
auto_rate: true,
auto_buy_label: true
})
};
fetch('https://api.arcuserp.com/v1/fulfillment/pack-order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/fulfillment/pack-order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'auto_rate' => true,
'auto_buy_label' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/fulfillment/pack-order"
payload := strings.NewReader("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"auto_rate\": true,\n \"auto_buy_label\": true\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(string(body))
}HttpResponse<String> response = Unirest.post("https://api.arcuserp.com/v1/fulfillment/pack-order")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"auto_rate\": true,\n \"auto_buy_label\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/fulfillment/pack-order")
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 \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"auto_rate\": true,\n \"auto_buy_label\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"packages": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "package",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_number": "<string>",
"status": "packing",
"weight_lb": 123,
"length_in": 123,
"width_in": 123,
"height_in": 123,
"carrier": "<string>",
"service_level": "<string>",
"tracking_number": "<string>",
"tracking_url": "<string>",
"ship_cost": 123,
"billed_ship_cost": 123,
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"insurance_amount_override": 123,
"insurance": {
"active": true,
"bought": true,
"amount": 123,
"currency": "<string>",
"fee_estimate": 123,
"provider": "<string>",
"covered_items": [
"<string>"
],
"covered_item_count": 123,
"source": "product_toggle"
},
"shipped_at": "2023-11-07T05:31:56Z",
"delivered_at": "2023-11-07T05:31:56Z",
"metadata": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"leftovers": [
{
"order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sku": "<string>",
"product_name": "<string>",
"remaining_qty": 123,
"reason": "<string>"
}
],
"shipping_score": 123,
"box_count": 123,
"auto_rate_on_pack": true,
"auto_buy_label_on_pack": true,
"package_rates": {},
"package_auto_labels": {}
}
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Pack an order automatically
Automatically packs an unpacked or partially packed order into one or more optimally sized packages using the entity’s active box inventory, allocating inventory and optionally auto-rating and purchasing shipping labels in the same call. Requires fulfillment:write scope plus the fulfillment.pack permission, is idempotent via the Idempotency-Key header, and returns 409 with code all_items_already_packed when the order is already fully packed.
curl --request POST \
--url https://api.arcuserp.com/v1/fulfillment/pack-order \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"auto_rate": true,
"auto_buy_label": true
}
'import requests
url = "https://api.arcuserp.com/v1/fulfillment/pack-order"
payload = {
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"auto_rate": True,
"auto_buy_label": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
auto_rate: true,
auto_buy_label: true
})
};
fetch('https://api.arcuserp.com/v1/fulfillment/pack-order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/fulfillment/pack-order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'auto_rate' => true,
'auto_buy_label' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/fulfillment/pack-order"
payload := strings.NewReader("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"auto_rate\": true,\n \"auto_buy_label\": true\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(string(body))
}HttpResponse<String> response = Unirest.post("https://api.arcuserp.com/v1/fulfillment/pack-order")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"auto_rate\": true,\n \"auto_buy_label\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/fulfillment/pack-order")
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 \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"auto_rate\": true,\n \"auto_buy_label\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"packages": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "package",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_number": "<string>",
"status": "packing",
"weight_lb": 123,
"length_in": 123,
"width_in": 123,
"height_in": 123,
"carrier": "<string>",
"service_level": "<string>",
"tracking_number": "<string>",
"tracking_url": "<string>",
"ship_cost": 123,
"billed_ship_cost": 123,
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"insurance_amount_override": 123,
"insurance": {
"active": true,
"bought": true,
"amount": 123,
"currency": "<string>",
"fee_estimate": 123,
"provider": "<string>",
"covered_items": [
"<string>"
],
"covered_item_count": 123,
"source": "product_toggle"
},
"shipped_at": "2023-11-07T05:31:56Z",
"delivered_at": "2023-11-07T05:31:56Z",
"metadata": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"leftovers": [
{
"order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sku": "<string>",
"product_name": "<string>",
"remaining_qty": 123,
"reason": "<string>"
}
],
"shipping_score": 123,
"box_count": 123,
"auto_rate_on_pack": true,
"auto_buy_label_on_pack": true,
"package_rates": {},
"package_auto_labels": {}
}
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Headers
Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.
255Body
The order to pack. Must be confirmed, not yet fully fulfilled.
Fetch Shippo carrier rates for each created package immediately after packing.
Purchase a Shippo label for each package using the best matching shipping
rule. Requires auto_rate: true. If label purchase fails for a package,
the error is returned in package_auto_labels[pkg_id].error (non-fatal).
Response
Order packed successfully.
Show child attributes
Show child attributes
Was this page helpful?

