Last updated

Creating Manifests

If you need to manifest labels created using ShipStation, you can do so with our /v2/manifests endpoint. This guide will walk you through the steps for creating a daily manifest.

To learn more about what manifests are, why they are useful, and how they work in ShipStation, you can review our Manifests & SCAN Forms page.

A common manifest workflow has three main tasks:

  • Determine which labels to include in the manifest and how you want to specify them in your request
  • Create the manifest
  • Download the manifest

Requirements

  • You must create your manifest on the same calendar date as the ship date of the labels included in the manifest.
  • You must have either the label_ids (for explicit manifests) or the properties you wish to use as criteria (for implicit manifests) in your request.

Determine Which Labels to Manifest

The first step in creating a manifest is determining which labels to include in the manifest and the best way to specify them in your request. In this example, we'll use the simple case of creating a manifest for all labels created today.

To get a list of the labels that were created today, we will use the list labels endpoint and pass some query parameters to filter the data.

Example Request & Response

GET /v2/labels

In this example, we'll use created_at_start and created_at_end query parameters. These parameters define a time range and allow us to get the list of labels that were created on a particular business day. Without these parameters, this endpoint will return all labels.

GET /v2/labels?created_at_start=2023-11-05T0800:26:59.91Z&created_at_end=2023-11-05T15:26:59.91Z HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
Content-Type: application/json

Response

Depending on how many labels were created in this time range, we could expect a very long response. In this example, we truncate the response to just two labels.

{
 "labels": [
   {
     "label_id": "se-29602037",
     "status": "completed",
     "shipment_id": "se-6470112",
     "ship_date": "2023-11-05T00:00:00Z",
     "created_at": "2023-11-05T14:26:59.91Z",
     "shipment_cost": {
       "currency": "usd",
       "amount": 3.18
     },
     "insurance_cost": {
       "currency": "usd",
       "amount": 0.0
     },
     "tracking_number": "9400111899223674205955",
     "is_return_label": false,
     "rma_number": null,
     "is_international": false,
     "batch_id": "",
     "carrier_id": "se-82785",
     "service_code": "usps_first_class_mail",
     "package_code": "package",
     "voided": false,
     "voided_at": null,
     "label_format": "pdf",
     "display_scheme": "label",
     "label_layout": "4x6",
     "trackable": true,
     "label_image_id": null,
     "carrier_code": "stamps_com",
     "tracking_status": "in_transit",
     "label_download": {
       "pdf": "https://api.shipstation.com/v2/downloads/0/VIYxvqt0CEaeE6kVeQq7DQ/label-1049004.pdf",
       "png": "https://api.shipstation.com/v2/downloads/0/VIYxvqt0CEaeE6kVeQq7DQ/label-1049004.png",
       "zpl": "https://api.shipstation.com/v2/downloads/0/VIYxvqt0CEaeE6kVeQq7DQ/label-1049004.zpl",
       "href": "https://api.shipstation.com/v2/downloads/0/VIYxvqt0CEaeE6kVeQq7DQ/label-1049004.pdf"
     },
     "form_download": null,
     "insurance_claim": null,
     "packages": [
       {
         "package_code": "package",
         "weight": {
           "value": 1.00,
           "unit": "ounce"
         },
         "dimensions": {
           "unit": "inch",
           "length": 0.0,
           "width": 0.0,
           "height": 0.0
         },
         "insured_value": {
           "currency": "usd",
           "amount": 0.00
         },
         "tracking_number": "9400111899223674205955",
         "label_messages": {
           "reference1": null,
           "reference2": null,
           "reference3": null
         },
         "external_package_id": null
       }
     ],
     "charge_event": "carrier_default"
   },
   {
     "label_id": "se-29544722",
     "status": "completed",
     "shipment_id": "se-6470260",
     "ship_date": "2023-11-05T00:00:00Z",
     "created_at": "2023-11-05T16:53:41.127Z",
     "shipment_cost": {
       "currency": "usd",
       "amount": 3.18
     },
     "insurance_cost": {
       "currency": "usd",
       "amount": 0.0
     },
     "tracking_number": "9400111899223674665629",
     "is_return_label": false,
     "rma_number": null,
     "is_international": false,
     "batch_id": "",
     "carrier_id": "se-82785",
     "service_code": "usps_first_class_mail",
     "package_code": "package",
     "voided": false,
     "voided_at": null,
     "label_format": "pdf",
     "display_scheme": "label",
     "label_layout": "4x6",
     "trackable": true,
     "label_image_id": null,
     "carrier_code": "stamps_com",
     "tracking_status": "in_transit",
     "label_download": {
       "pdf": "https://api.shipstation.com/v2/downloads/0/KVAY5M7MG0GvNLCBFBbM9Q/label-1049067.pdf",
       "png": "https://api.shipstation.com/v2/downloads/0/KVAY5M7MG0GvNLCBFBbM9Q/label-1049067.png",
       "zpl": "https://api.shipstation.com/v2/downloads/0/KVAY5M7MG0GvNLCBFBbM9Q/label-1049067.zpl",
       "href": "https://api.shipstation.com/v2/downloads/0/KVAY5M7MG0GvNLCBFBbM9Q/label-1049067.pdf"
     },
     "form_download": null,
     "insurance_claim": null,
     "packages": [
       {
         "package_code": "package",
         "weight": {
           "value": 1.00,
           "unit": "ounce"
         },
         "dimensions": {
           "unit": "inch",
           "length": 0.0,
           "width": 0.0,
           "height": 0.0
         },
         "insured_value": {
           "currency": "usd",
           "amount": 0.00
         },
         "tracking_number": "9400111899223674665629",
         "label_messages": {
           "reference1": null,
           "reference2": null,
           "reference3": null
         },
         "external_package_id": null
       }
     ],
     "charge_event": "carrier_default"
   }
 ],
 "total": 2,
 "page": 1,
 "pages": 1,
 "links": {
   "first": {
     "href": "https://api.shipstation.com/v2/labels?created_at_end=2023-11-05T20%3A00%3A00.263Z&created_at_start=2023-11-05T00%3A00%3A00.263Z&page=1&page_size=25"
   },
   "last": {
     "href": "https://api.shipstation.com/v2/labels?created_at_end=2023-11-05T20%3A00%3A00.263Z&created_at_start=2023-11-05T00%3A00%3A00.263Z&page=1&page_size=25"
   },
   "prev": {},
   "next": {}
 }
}

Create the Manifest

When creating a manifest, you can explicitly or implicitly specify which labels to include in a manifest.

  • Explicit manifests specify exactly which labels to include in the manifest with an array of label_ids. You may specify up to 500 labels in a single manifest.
  • Implicit manifests specify criteria for including labels in the manifest by adding the desired properties to the request body.

We've included examples of both types below.

Explicit Manifest Example

Using the two labels from the above GET labels request + one additional label, this request creates a manifest explicitly for these three labels.

POST /v2/manifests

POST /v2/manifests HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
Content-Type: application/json

{
 "label_ids": ["se-29602037", "se-29544722", "se-29475869"]
}

Response

Each manifest contains an href property with a URL where you can downlaod the manifest. There is also a top-level href property that will contain the URL for the first manifest if more than one is returned.

{
 "manifests": [
   {
     "manifest_id": "se-11118",
     "form_id": "se-11118",
     "created_at": "2023-11-09T18:21:10.59Z",
     "ship_date": "2023-11-09T00:00:00Z",
     "shipments": 3,
     "label_ids": [
       "se-29602037",
       "se-29544722",
       "se-29475869"
     ],
     "warehouse_id": null,
     "submission_id": "1120014041604946070483",
     "carrier_id": "se-88270",
     "manifest_download": {
       "href": "https://api-stage.shipstation.com/v2/downloads/0/pj37Bb5hi0qdslHc7_wCVQ/manifest-11118.pdf"
     }
   }
 ],
 "manifest_requests": [
   {
     "manifest_request_id": "se-28529731",
     "status": "in_progress"
   }
 ],
   "manifest_id": "se-11118",
   "form_id": "se-11118",
   "created_at": "2023-11-09T18:21:10.59Z",
   "ship_date": "2023-11-09T00:00:00Z",
   "shipments": 1,
   "warehouse_id": null,
   "submission_id": "1120014041604946070483",
   "carrier_id": "se-88270",
   "manifest_download": {
    "href": "https://api-stage.shipstation.com/v2/downloads/0/pj37Bb5hi0qdslHc7_wCVQ/manifest-11118.pdf"
   },
   "label_ids": [
     "se-29602037",
     "se-29544722",
     "se-29475869"
   ],
   "request_id": "7de36d42-8343-4247-95ce-153d8b615d1f",
   "errors": [],
}

Implicit Manifest Example

You may instead want to create a manifest that includes all the labels that match specific criteria. Labels that do not meet the specified criteria will be excluded from the manifest.

You may specify values for one or more of the properties below. ShipStation will create a manifest that includes all labels that match the criteria you specify.

PropertyTypeDescription
carrier_idstringrequired
The carrier ID you wish to create a manifest for. This will exclude labels that do not use this specified carrier_id.
warehouse_idstringrequired
The Warehouse ID this manifest is being created for. This will exclude labels that do not use the specified warehouse_id.
ship_datedate stringrequired, ISO 8601 Standard
The ship date you want to include labels for. Example: `2024-07-25T15:24:46.657Z
excluded_label_idsstring arrayThe label_ids that you do NOT wish to manifest, even if they meet the rest of the specified criteria.

Each manifest is created for a specific warehouse, so you'll need to provide the warehouse_id rather than the ship_from address. You can create a warehouse for each location that you want to create manifests for.

POST /v2/manifests

POST /v2/manifests HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
Content-Type: application/json

{
 "carrier_id": "se-123890",
 "excluded_label_ids": [],
 "warehouse_id": "se-11921",
 "ship_date": "2024-07-25T05:00:00.000Z"
}

Response

As is the case with the explicit manifests, each manifest contains an href property with a URL to downlaod the manifest.

{
   "manifests": [
       {
           "manifest_id": "se-11119",
           "form_id": "se-11119",
           "created_at": "2024-11-09T19:59:22.837Z",
           "ship_date": "2024-11-09T00:00:00Z",
           "shipments": 3,
           "label_ids": [
               "se-1050678",
               "se-1050679",
               "se-1050680"
           ],
           "warehouse_id": "se-107273",
           "submission_id": "9475711201080306735429",
           "carrier_id": "se-82785",
           "manifest_download": {
               "href": "https://api-stage.shipstation.com/v2/downloads/0/WPZ_DNt2dUKPX4L9pOh71g/manifest-11119.pdf"
           }
       }
   ],
   "manifest_requests": [
    {
     "manifest_request_id": "se-28529731",
     "status": "in_progress"
    }
   ],
   "manifest_id": "se-11119",
   "form_id": "se-11119",
   "created_at": "2024-11-09T19:59:22.837Z",
   "ship_date": "2024-11-09T00:00:00Z",
   "shipments": 3,
   "warehouse_id": "se-107273",
   "submission_id": "9475711201080306735429",
   "carrier_id": "se-82785",
   "manifest_download": {
       "href": "https://api-stage.shipstation.com/v2/downloads/0/WPZ_DNt2dUKPX4L9pOh71g/manifest-11119.pdf"
    },
   "label_ids": [
       "se-1050678",
       "se-1050679",
       "se-1050680"
   ],
   "request_id": "ed87e59c-bd95-468b-a4fb-5b55e8630df9",
   "errors": [],
}

About the Manifest Response

In the above examples, the responses included a single manifest. However, your response could include multiple.

Each manifest includes labels with the same ship_date, carrier_id, and warehouse_id. ShipStation will create multiple manifests if you send labels with different values for those properties. For example, if you specify label_ids for USPS and FedEx labels for the same warehouse and ship date, ShipStation will return two manifests—one for USPS labels with the specified warehouse and ship date and one for FedEx labels with the specified warehouse and ship date.

You can also receive multiple manifests in the response if your request includes more than 500 labels since ShipStation only includes 500 labels per manifest.

Manifests are separated by Ship From addresses. If you do not use warehouses, ShipStation still assigns a warehouse_id to your Ship From address so you can create manifests by Ship From address.

To minimize the number of manifests you need to create, ShipStation matches the manifest addresses to your Ship From addresses. Because each manifest has one Ship From address, we recommend that you have consistent Ship From addresses, like a warehouse.

Response with Multiple Manifests

If the response you receive is split into multiple manifests, you'll notice that each manifest object contains an href property with a URL where you can download a PDF version of the manifest. There is also a top-level href that includes a URL where you can download the first manifest if multiple manifests are returned. Each manifest object indicates the specific label_ids that are included in the manifest.

This example response includes two manifests.

{
 "manifests": [
   {
     "manifest_id": "se-11116",
     "form_id": "se-11116",
     "created_at": "2024-11-09T18:16:09.793Z",
     "ship_date": "2024-11-09T00:00:00Z",
     "shipments": 1,
     "label_ids": [
       "se-1050621"
     ],
     "warehouse_id": null,
     "submission_id": "9475711201080306528571",
     "carrier_id": "se-82785",
     "manifest_download": {
       "href": "https://api-stage.shipstation.com/v2/downloads/0/mQ3QZQL6-0SLESTz43Y8vw/manifest-11116.pdf"
     }
   },
   {
     "manifest_id": "se-11117",
     "form_id": "se-11117",
     "created_at": "2024-11-09T18:16:11.233Z",
     "ship_date": "2024-11-09T00:00:00Z",
     "shipments": 1,
     "label_ids": [
       "se-1050622"
     ],
     "warehouse_id": null,
     "submission_id": "1120014041604945770433",
     "carrier_id": "se-88270",
     "manifest_download": {
       "href": "https://api-stage.shipstation.com/v2/downloads/0/5GOUrT4TRkWgygJyvJt0kA/manifest-11117.pdf"
     }
   }
 ],
   "manifest_requests": [
    {
     "manifest_request_id": "se-28529731",
     "status": "in_progress"
    }
   ],
 "manifest_id": "se-11116",
 "form_id": "se-11116",
 "created_at": "2024-11-09T18:16:09.793Z",
 "ship_date": "2024-11-09T00:00:00Z",
 "shipments": 1,
 "warehouse_id": null,
 "submission_id": "9475711201080306528571",
 "carrier_id": "se-82785",
 "manifest_download": {
   "href": "https://api-stage.shipstation.com/v2/downloads/0/mQ3QZQL6-0SLESTz43Y8vw/manifest-11116.pdf"
 },
 "label_ids": [
   "se-1050621",
   "se-1050622"
 ],
 "request_id": "9367f24f-9aa6-4358-8dd7-a73bb38e8870",
 "errors": [],
}

Example Error Response

If no labels meet the specified criteria, you will get a response similar to the one below.

{
   "request_id": "47b3f327-2dd1-4e24-8570-cda6fba8a00f",
   "errors": [
       {
           "error_source": "shipstation",
           "error_type": "system",
           "error_code": "unspecified",
           "message": "No labels were found matching the given criteria."
       }
   ]
}

Download the Manifest

Now that you've created the manifest(s), you have a URL to download the manifest PDF.

You can enter this value directly in a web browser to view and download the file, or you can download it programmatically.

Example Request

This example downloads the manifest using the URL returned in the response above. Notice that you must change the Content-Type to Accept-type: application/pdf.

GET https://api.shipstation.com/v2/downloads/0/BpP_fo0d9EiiQJ7hqDQGmA/manifest-11102.pdf HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
Accept-Type: application/pdf

Group Labels into Multiple Manifests

If you have multiple outgoing shipments per day, you may want to group your daily labels into more than one manifest.

You can use either the label_ids property or the excluded_label_ids property to group or control which labels are included in each manifest and avoid overlap. A label should be included in only one manifest.

You may use either the label_ids property or the excluded_label_ids property but not both. If you use the excluded_label_ids property, you must also include the carrier_id, warehouse_id, and ship_date in your request.