ShipEngine API
shipengine · Company
ShipEngine's easy-to-use REST API lets you manage all of your shipping needs without worrying about the complexities of different carrier APIs and protocols. We handle all the heavy lifting so you can focus on providing a first-class shipping experience for your customers at the best possible prices. Each of ShipEngine's features can be used by itself or in conjunction with each other to build powerful shipping functionality into your application or service. ## Getting Started If you're new to
Authentication
Sample Requests
List Batches associated with your Shipengine account
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/batches?page=1&status=example&sort_by=example&sort_dir=desc&page_size=25&batch_number=example"
import requests
params = {
"page": "1",
"status": "example",
"sort_by": "example",
"sort_dir": "desc",
"page_size": "25",
"batch_number": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/batches",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/batches');
url.searchParams.set('page', '1');
url.searchParams.set('status', 'example');
url.searchParams.set('sort_by', 'example');
url.searchParams.set('sort_dir', 'desc');
url.searchParams.set('page_size', '25');
url.searchParams.set('batch_number', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/batches")
q := baseURL.Query()
q.Set("page", "1")
q.Set("status", "example")
q.Set("sort_by", "example")
q.Set("sort_dir", "desc")
q.Set("page_size", "25")
q.Set("batch_number", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/batches")
uri.query = URI.encode_www_form({
"page" => "1",
"status" => "example",
"sort_by" => "example",
"sort_dir" => "desc",
"page_size" => "25",
"batch_number" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/batches?" . http_build_query([
"page" => "1",
"status" => "example",
"sort_by" => "example",
"sort_dir" => "desc",
"page_size" => "25",
"batch_number" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));This endpoint returns a list of labels that you've [created](https://www.shipengine.com/docs/labels/create-a-label/). You can optionally filter the results as well as control their sort order and the number of results returned at a time. By default, all labels are returned, 25 at a time, starting w
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/labels?page=1&rate_id=example&sort_by=created_at&batch_id=example&sort_dir=desc&page_size=25&carrier_id=example&shipment_id=example&label_status=example&service_code=example&warehouse_id=example&created_at_end=example&tracking_number=example&created_at_start=example"
import requests
params = {
"page": "1",
"rate_id": "example",
"sort_by": "created_at",
"batch_id": "example",
"sort_dir": "desc",
"page_size": "25",
"carrier_id": "example",
"shipment_id": "example",
"label_status": "example",
"service_code": "example",
"warehouse_id": "example",
"created_at_end": "example",
"tracking_number": "example",
"created_at_start": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/labels",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/labels');
url.searchParams.set('page', '1');
url.searchParams.set('rate_id', 'example');
url.searchParams.set('sort_by', 'created_at');
url.searchParams.set('batch_id', 'example');
url.searchParams.set('sort_dir', 'desc');
url.searchParams.set('page_size', '25');
url.searchParams.set('carrier_id', 'example');
url.searchParams.set('shipment_id', 'example');
url.searchParams.set('label_status', 'example');
url.searchParams.set('service_code', 'example');
url.searchParams.set('warehouse_id', 'example');
url.searchParams.set('created_at_end', 'example');
url.searchParams.set('tracking_number', 'example');
url.searchParams.set('created_at_start', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/labels")
q := baseURL.Query()
q.Set("page", "1")
q.Set("rate_id", "example")
q.Set("sort_by", "created_at")
q.Set("batch_id", "example")
q.Set("sort_dir", "desc")
q.Set("page_size", "25")
q.Set("carrier_id", "example")
q.Set("shipment_id", "example")
q.Set("label_status", "example")
q.Set("service_code", "example")
q.Set("warehouse_id", "example")
q.Set("created_at_end", "example")
q.Set("tracking_number", "example")
q.Set("created_at_start", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/labels")
uri.query = URI.encode_www_form({
"page" => "1",
"rate_id" => "example",
"sort_by" => "created_at",
"batch_id" => "example",
"sort_dir" => "desc",
"page_size" => "25",
"carrier_id" => "example",
"shipment_id" => "example",
"label_status" => "example",
"service_code" => "example",
"warehouse_id" => "example",
"created_at_end" => "example",
"tracking_number" => "example",
"created_at_start" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/labels?" . http_build_query([
"page" => "1",
"rate_id" => "example",
"sort_by" => "created_at",
"batch_id" => "example",
"sort_dir" => "desc",
"page_size" => "25",
"carrier_id" => "example",
"shipment_id" => "example",
"label_status" => "example",
"service_code" => "example",
"warehouse_id" => "example",
"created_at_end" => "example",
"tracking_number" => "example",
"created_at_start" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Similar to querying shipments, we allow you to query manifests since there will likely be a large number over a long period of time.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/manifests?page=1&label_ids=example&page_size=25&carrier_id=example&warehouse_id=example&ship_date_end=example&created_at_end=example&ship_date_start=example&created_at_start=example"
import requests
params = {
"page": "1",
"label_ids": "example",
"page_size": "25",
"carrier_id": "example",
"warehouse_id": "example",
"ship_date_end": "example",
"created_at_end": "example",
"ship_date_start": "example",
"created_at_start": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/manifests",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/manifests');
url.searchParams.set('page', '1');
url.searchParams.set('label_ids', 'example');
url.searchParams.set('page_size', '25');
url.searchParams.set('carrier_id', 'example');
url.searchParams.set('warehouse_id', 'example');
url.searchParams.set('ship_date_end', 'example');
url.searchParams.set('created_at_end', 'example');
url.searchParams.set('ship_date_start', 'example');
url.searchParams.set('created_at_start', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/manifests")
q := baseURL.Query()
q.Set("page", "1")
q.Set("label_ids", "example")
q.Set("page_size", "25")
q.Set("carrier_id", "example")
q.Set("warehouse_id", "example")
q.Set("ship_date_end", "example")
q.Set("created_at_end", "example")
q.Set("ship_date_start", "example")
q.Set("created_at_start", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/manifests")
uri.query = URI.encode_www_form({
"page" => "1",
"label_ids" => "example",
"page_size" => "25",
"carrier_id" => "example",
"warehouse_id" => "example",
"ship_date_end" => "example",
"created_at_end" => "example",
"ship_date_start" => "example",
"created_at_start" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/shipengine.com/1.1.202303022103/v1/manifests?" . http_build_query([
"page" => "1",
"label_ids" => "example",
"page_size" => "25",
"carrier_id" => "example",
"warehouse_id" => "example",
"ship_date_end" => "example",
"created_at_end" => "example",
"ship_date_start" => "example",
"created_at_start" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with ShipEngine API?
ShipEngine API is a Company API. Developers commonly use company APIs for:
- enriching CRM records with company firmographics
- building lead-generation and prospecting tools
- verifying business identity and registration details
- monitoring competitors and market intelligence
- powering B2B data enrichment pipelines
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. ShipEngine API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?