curl --request POST \
--url https://api.arcuserp.com/v1/packages/{id}/recalc-eta \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/packages/{id}/recalc-eta"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.arcuserp.com/v1/packages/{id}/recalc-eta', 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/packages/{id}/recalc-eta",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/packages/{id}/recalc-eta"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/packages/{id}/recalc-eta")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/packages/{id}/recalc-eta")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"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"
}{
"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"
}Recalculate estimated delivery date from tracking
Recalculates the estimated delivery date for a package based on the current carrier, service
level, origin address, destination address, and today’s ship date. Use this when the
original ETA is stale due to a carrier or address change.
Requires fulfillment:write scope.
curl --request POST \
--url https://api.arcuserp.com/v1/packages/{id}/recalc-eta \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/packages/{id}/recalc-eta"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.arcuserp.com/v1/packages/{id}/recalc-eta', 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/packages/{id}/recalc-eta",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/packages/{id}/recalc-eta"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/packages/{id}/recalc-eta")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/packages/{id}/recalc-eta")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"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"
}{
"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.
Path Parameters
Response
Package with updated estimated_delivery_date
A shipment / box created during fulfillment. One package contains many package items (line item splits) and at most one shipment label.
package Sequential per entity.
packing, packed, labeled, shipped, delivered, returned, void e.g. ups, usps, fedex, dhl.
e.g. ground, priority, 2day.
Cost billed to customer (vs purchased cost).
Manual override of the auto-computed Shippo-insurance declared value. When set, overrides the value derived from products flagged apply_freight_insurance.
Auto-insurance summary. null when no package item opts in and there is no override / entity threshold. bought: true after a label has been purchased (amount = the value actually insured at Shippo); bought: false projects what the next label purchase will insure.
Show child attributes
Show child attributes
Was this page helpful?

