Find an API

Search public APIs with auth details & Postman guides

← All APIs

ShipEngine API

shipengine · Company

Company No Auth Free & Open transport

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

No authentication requiredFree to use with no key needed.

Sample Requests

GET List Batches

List Batches associated with your Shipengine account

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

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));
GET List labels

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

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

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));
GET List Manifests

Similar to querying shipments, we allow you to query manifests since there will likely be a large number over a long period of time.

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

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

Get Postman ↗
  1. 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?

Open documentation ↗