Introduction
An API for fetching APS rates and created labels with your associated AllProShipping account.
This documentation aims to provide all the information you need to work with our API.
Base URL
https://api.allproshipping.com
Authenticating requests
Token is recieved through APS admin or customer's profile. You must request one if you dont have access to it.
v1
Rate Quotes
Return rate quotes, either across all of the services for a general list if only providing postal codes and weight or in conjunction with full address information, package dimensions, and a service type for a specific quote.
Example request:
curl --request POST \
"https://api.allproshipping.com/api/v1/rates" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"service_type\": \"culpa\",
\"delivery_confirmation\": true,
\"from\": {
\"0\": [],
\"postal_code\": \"et\"
},
\"to\": {
\"0\": [],
\"postal_code\": \"cum\"
},
\"package\": {
\"0\": [],
\"weight\": 18,
\"dimensions\": {
\"length\": 2,
\"width\": 14,
\"height\": 14
}
},
\"insurance\": {
\"type\": \"additional_non_perishable\",
\"requested_amount\": 1477
},
\"live_shipment\": false
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://api.allproshipping.com/api/v1/rates',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'json' => [
'service_type' => 'PRIORITY_OVERNIGHT',
'delivery_confirmation' => true,
'from' => [
'postal_code' => '80124',
],
'to' => [
'postal_code' => '80124',
],
'package' => [
[],
'weight' => 18,
'dimensions' => [
'length' => 2,
'width' => 14,
'height' => 14,
],
],
'insurance' => [
'type' => 'additional_non_perishable',
'requested_amount' => 1477,
],
'live_shipment' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/rates"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"service_type": "PRIORITY_OVERNIGHT",
"delivery_confirmation": true,
"from": {
"postal_code": "80124"
},
"to": {
"postal_code": "80124"
},
"package": {
"0": [],
"weight": 18,
"dimensions": {
"length": 2,
"width": 14,
"height": 14
}
},
"insurance": {
"type": "additional_non_perishable",
"requested_amount": 1477
},
"live_shipment": false
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
[
{
"service_name": "FedEx Priority Overnight",
"service_type": "PRIORITY_OVERNIGHT",
"carrier": "fedex",
"delivery_timestamp": "2022-08-31T10:30:00",
"residential": false,
"currency": "USD",
"retail_rate": "89.12",
"customer_discount": "0.30",
"subtotal": "62.38",
"additional_charges": [
{
"type": "carrier_insurance",
"cost": 0,
"message": "Carrier Insurance"
}
],
"total": "62.38",
"customer_rate": "62.38",
"surcharges": [
{
"SurchargeType": "SIGNATURE_OPTION",
"Description": "Direct signature required",
"Amount": {
"Currency": "USD",
"Amount": "5.9"
}
},
{
"SurchargeType": "FUEL",
"Description": "Fuel",
"Amount": {
"Currency": "USD",
"Amount": "14.39"
}
}
],
"insurance": {
"type": "additional_non_perishable",
"cost": 0,
"amount": 1477
}
}
]
Received response:
Request failed with error:
Check authentication status
Used primarily for a quick check to a token's status, both through Sanctum and our custom active
Example request:
curl --request GET \
--get "https://api.allproshipping.com/api/v1/handshake" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}"
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://api.allproshipping.com/api/v1/handshake',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/handshake"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Authenticated and active."
}
Received response:
Request failed with error:
Schedule A Pickup
Schedule a carrier pickup for a package
Example request:
curl --request POST \
"https://api.allproshipping.com/api/v1/pickup" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"address\": {
\"name\": \"quia\",
\"phone\": \"quia\",
\"address1\": \"ipsam\",
\"city\": \"omnis\",
\"state\": \"beatae\",
\"postal_code\": \"et\"
},
\"carrier\": {
\"type\": \"FDXE\",
\"remarks\": \"cupiditate\"
},
\"packages\": {
\"number\": 36,
\"location\": \"NONE\",
\"total_weight\": 5007.0936
},
\"time\": {
\"scheduled_date\": \"2021-10-14T15:00:00\",
\"company_close\": \"18:00\"
}
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://api.allproshipping.com/api/v1/pickup',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'json' => [
'address' => [
'name' => 'quia',
'phone' => 'quia',
'address1' => 'ipsam',
'city' => 'omnis',
'state' => 'beatae',
'postal_code' => 'et',
],
'carrier' => [
'type' => 'FDXE',
'remarks' => 'cupiditate',
],
'packages' => [
'number' => 36.0,
'location' => 'NONE',
'total_weight' => 5007.0936,
],
'time' => [
'scheduled_date' => '2021-10-14T15:00:00',
'company_close' => '18:00',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/pickup"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"address": {
"name": "John Doe",
"address1": "9220 Teddy Lane",
"city": "Lone Tree",
"state": "CO",
"postal_code": "80124"
"phone": "1234567890",
},
"carrier": {
"type": "FDXE",
"remarks": "cupiditate"
},
"packages": {
"number": 36,
"location": "NONE",
"total_weight": 5007.0936
},
"time": {
"scheduled_date": "2021-10-14T15:00:00",
"company_close": "18:00"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": "Error",
"pickup_details": {
"carrier": "FDXE",
"packages_amount": 36,
"total_weight": 5007.0936,
"pickup_details": {
"remarks": "cupiditate",
"package_location": "NONE",
"latest_available": "18:00"
},
"scheduled_date": "2021-10-14T15:00:00",
"status": "Error",
"updated_at": "2022-08-30T20:30:53.000000Z",
"created_at": "2022-08-30T20:30:52.000000Z",
"api_response": {
"HighestSeverity": "ERROR",
"Notifications": {
"Severity": "ERROR",
"Source": "disp",
"Code": "508C",
"Message": "Cannot schedule a pickup request for a previous day",
"LocalizedMessage": "Cannot schedule a pickup request for a previous day"
},
"TransactionDetail": {
"CustomerTransactionId": "*** Create Pickup Request using PHP ***"
},
"Version": {
"ServiceId": "disp",
"Major": 22,
"Intermediate": 0,
"Minor": 0
}
},
"address": {
"organization": null,
"first_name": "Test",
"last_name": "Lane",
"phone": "1234567890",
"address1": "9220 Teddy Lane",
"address2": null,
"city": "Lone Tree",
"state": "CO",
"postal_code": "80124",
"updated_at": "2022-08-30T20:30:52.000000Z",
"created_at": "2022-08-30T20:30:52.000000Z"
}
}
}
Received response:
Request failed with error:
Associate Token
Associate a given token with the given plainText key For example, from the Shopify app, tie the app to the customer's token from the API
Example request:
curl --request POST \
"https://api.allproshipping.com/api/v1/associate" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"association\": \"myshopifystore.com\"
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://api.allproshipping.com/api/v1/associate',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'json' => [
'association' => 'myshopifystore.com',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/associate"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"association": "myshopifystore.com"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
Association created
Received response:
Request failed with error:
Create An Order
Take an array of labels to be created and create a corresponding order with those labels. These are to be tied to external orders provided by the call.
Example request:
curl --request POST \
"https://api.allproshipping.com/api/v1/orders" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"labels\": [
{
\"order_id\": \"illum\",
\"from\": [],
\"to\": [],
\"package\": []
}
]
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://api.allproshipping.com/api/v1/orders',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'json' => [
'labels' => [
[
'order_id' => "1337",
'service_type' => "PRIORITY_OVERNIGHT",
'live_shipment' => false,
'delivery_confirmation' => true,
'from' => [
'name' => 'John Doe',
'address1' => '9220 Teddy Lane',
'city' => 'Lone Tree',
'state' => 'CO',
'postal_code' => '80124',
'phone' => '1234567890',
],
'to' => [
'first_name' => 'Jane',
'last_name' => 'Doe',
'address1' => '1600 Amphitheater Pkway',
'city' => 'Mountain View ',
'state' => 'CA',
'postal_code' => '94043',
'phone' => '1234567890',
],
'package' => [
'weight' => 2,
'dimensions' => [
'length' => 2,
'width' => 3,
'height' => 4,
],
'description' => "Snake",
],
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/orders"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"labels": [
{
"order_id": "illum",
"from": [],
"to": [],
"package": []
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Order processed",
"labels": [
{
"external_order": "1337",
"to": "Jane Doe",
"status": "Complete",
"tracking_number": "277403582191",
"carrier": "fedex"
}
],
"issues": []
}
Received response:
Request failed with error:
Retrieve Labels
Return a number of label hexes, along with their tracking numbers
Example request:
curl --request POST \
"https://api.allproshipping.com/api/v1/labels" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"orders\": [
222,
334235,
8875
]
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://api.allproshipping.com/api/v1/labels',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'json' => [
'orders' => [
222,
334235,
8875,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/labels"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"orders": [
222,
334235,
8875
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
[
{
"tracking": "794656778259",
"hex": "JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0..."
},
{
"tracking": "794656778226",
"hex": "JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YWx..."
}
]
Received response:
Request failed with error:
Check Existing Orders
Check a given array of external order ids to determine if orders exist in the system
Example request:
curl --request POST \
"https://api.allproshipping.com/api/v1/check" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"orders\": [
222,
334235,
8875
]
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://api.allproshipping.com/api/v1/check',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'orders' => [
222,
334235,
8875,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/check"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"orders": [
222,
334235,
8875
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
{
"existing": [
222
],
"new": [
334235,
8875
]
}
Received response:
Request failed with error:
Show Insurance Settings
Display the current insurance settings
Example request:
curl --request GET \
--get "https://api.allproshipping.com/api/v1/insurance" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}"
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://api.allproshipping.com/api/v1/insurance',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/insurance"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"availability": "enabled",
"options": [
"on_time",
"additional_perishable",
"additional_non_perishable"
],
"aps_insurance_services": [
"FIRST_OVERNIGHT",
"PRIORITY_OVERNIGHT",
"FEDEX_EXPRESS_SAVER",
"FEDEX_2_DAY_AM",
"FEDEX_GROUND",
"GROUND_HOME_DELIVERY"
],
"cost_settings": {
"on_time_insurance_cost": "2.5",
"aps_insurance_insurance_initial_cost": "5",
"aps_insurance_insurance_initial_amount": "200",
"insurance_multiplier_for_po": "2.5",
"insurance_multiplier_for_other": "1.00",
"min_insurance_threshold": "100",
"max_insurance_threshold": "10000"
}
}
Received response:
Request failed with error:
Validate address
Validate the provided address with FedEx
Example request:
curl --request GET \
--get "https://api.allproshipping.com/api/v1/address-validate?address1=in&address2=optio&city=inventore&state=vitae&postal_code=nam" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"address1\": \"odio\",
\"address2\": \"ea\",
\"city\": \"voluptas\",
\"state\": \"sit\",
\"postal_code\": \"et\"
}"
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://api.allproshipping.com/api/v1/address-validate',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'query' => [
'address1'=> '9220 Teddy Lane',
'city'=> 'Lone Tree',
'state'=> 'CO',
'postal_code'=> '80124',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/address-validate"
);
const params = {
"address1": "in",
"address2": "optio",
"city": "inventore",
"state": "vitae",
"postal_code": "nam",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"address1": "odio",
"address2": "ea",
"city": "voluptas",
"state": "sit",
"postal_code": "et"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": "success",
"message": "Address successfully validated",
"provided": {
"address1": "9220 Teddy Lane",
"city": "Lone Tree",
"state": "CO",
"postal_code": "80124"
},
"result_type": "STANDARDIZED",
"residential": false,
"validated_address": {
"address1": "9220 TEDDY LN",
"address2": null,
"city": "LONE TREE",
"state": "CO",
"postal_code": "80124-6740"
}
}
Received response:
Request failed with error:
Pickup availability
Check the availability for a pickup through FedEx
Example request:
curl --request GET \
--get "https://api.allproshipping.com/api/v1/pickup-availability?street1=repellendus&street2=quia&city=ducimus&state=placeat&postal_code=assumenda&carrier=illum&total_weight=sed" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}" \
--data "{
\"address1\": \"nemo\",
\"address2\": \"hic\",
\"city\": \"rerum\",
\"state\": \"consequuntur\",
\"postal_code\": \"est\",
\"carrier\": \"FDXG\",
\"total_weight\": 1587418.3542944
}"
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://api.allproshipping.com/api/v1/pickup-availability',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
'query' => [
'address1'=> '9220 Teddy Lane',
'city'=> 'Lone Tree',
'state'=> 'CO',
'postal_code'=> '80124',
'carrier'=> 'FDXG',
'total_weight'=> '4',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/pickup-availability"
);
const params = {
"street1": "repellendus",
"street2": "quia",
"city": "ducimus",
"state": "placeat",
"postal_code": "assumenda",
"carrier": "illum",
"total_weight": "sed",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
let body = {
"address1": "nemo",
"address2": "hic",
"city": "rerum",
"state": "consequuntur",
"postal_code": "est",
"carrier": "FDXG",
"total_weight": 1587418.3542944
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"original": {
"address1": "9220 Teddy Lane",
"city": "Lone Tree",
"state": "CO",
"postal_code": "80124",
"carrier": "FDXG",
"total_weight": "4"
},
"available_dates": {
"1": {
"Carrier": "FDXG",
"ScheduleDay": "FUTURE_DAY",
"Available": true,
"PickupDate": "2022-08-31",
"CutOffTime": "14:00:00",
"AccessTime": "PT4H0M",
"ResidentialAvailable": true
},
"2": {
"Carrier": "FDXG",
"ScheduleDay": "FUTURE_DAY",
"Available": true,
"PickupDate": "2022-09-01",
"CutOffTime": "14:00:00",
"AccessTime": "PT4H0M",
"ResidentialAvailable": true
}
}
}
Received response:
Request failed with error:
Get Customer's Shipping Configuration
Returns the customer's shipping configuration, primarily for seeing what shipping services are allowed
Example request:
curl --request GET \
--get "https://api.allproshipping.com/api/v1/configuration" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer {token}"
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://api.allproshipping.com/api/v1/configuration',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://api.allproshipping.com/api/v1/configuration"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": "success",
"message": {
"available_shipping_services": [
{
"carrier": "fedex",
"code": "FIRST_OVERNIGHT",
"description": "FedEx First Overnight"
},
{
"carrier": "fedex",
"code": "PRIORITY_OVERNIGHT",
"description": "FedEx Priority Overnight"
},
{
"carrier": "fedex",
"code": "FEDEX_EXPRESS_SAVER",
"description": "FedEx Express Saver"
},
{
"carrier": "fedex",
"code": "FEDEX_2_DAY_AM",
"description": "FedEx 2Day AM"
},
{
"carrier": "fedex",
"code": "FEDEX_2_DAY",
"description": "FedEx 2Day"
},
{
"carrier": "fedex",
"code": "FEDEX_GROUND",
"description": "FedEx Ground"
},
{
"carrier": "fedex",
"code": "GROUND_HOME_DELIVERY",
"description": "FedEx Home Delivery"
},
{
"carrier": "ups",
"code": "01",
"transit_code": "1DA",
"description": "UPS Next Day Air"
},
{
"carrier": "ups",
"code": "02",
"transit_code": "2DA",
"description": "UPS 2nd Day Air"
},
{
"carrier": "ups",
"code": "03",
"transit_code": "GND",
"description": "UPS Ground"
},
{
"carrier": "ups",
"code": "12",
"transit_code": "3DS",
"description": "UPS 3 Day Select"
},
{
"carrier": "ups",
"code": "13",
"transit_code": "1DP",
"description": "UPS Next Day Air Saver"
},
{
"carrier": "ups",
"code": "14",
"transit_code": "1DM",
"description": "UPS Next Day Air Early"
},
{
"carrier": "ups",
"code": "59",
"transit_code": "2DM",
"description": "UPS 2nd Day Air A.M."
}
],
"live_shipments": 0,
"live_shipping_services": [],
"pickup_available": 1
}
}
Received response:
Request failed with error: