Packfleet logo

Packfleet API (1.0)

Download OpenAPI specification:Download

Automate your Packfleet deliveries using our public API

Authentication

The Packfleet API uses access tokens to authenticate requests. Packfleet offers two methods for obtaining the access tokens:

  • API key
  • OAuth2

Once you have obtained an access token it should be used by providing the following header in your API calls.

Header Parameter Value
Authorization Valid access token following the format: Bearer <Access Token>

API Key

For more information on how to generate API keys please see this page.

Security Scheme Type: HTTP
HTTP Authorization Scheme bearer
Bearer format: "JWT"

OAuth2

OAuth can be useful if building an integration that is to be used by multiple Packfleet accounts as it provides a flow to generate access tokens. If this is something that you would like to consider using please reach out to our customer support team.

When using OAuth to generate your access tokens please be aware that these access tokens can be used for 24 hours before they need to be refreshed. This can be achieved by calling /oauth/authorize with grant_type set to refresh_token and the refresh token in the refresh_token field. Refresh tokens last for 3 months, if they are not used within this time then the user will need to complete the authentication flow again. Refreshing the access token will assign a new access token and refresh token pair with an updated expiry time.

Security Scheme Type: OAuth2
Flow type: authorizationCode
Authorization URL: /oauth/authorize
Token URL: /oauth/token

How-Tos

Creating a shipment

Prerequisites

  • You have created a Packfleet account (either in the production or test environment)
  • You have obtained an active API key

Create a collection location

The first step is to create a collection location so we know where to pick the shipment up from and to enable us to provide accurate rates. To do this using the Packfleet dashboard:

  1. Click "Manage locations" and then "New location"
  2. Enter your location details and click "Save location"
  3. Once the location has been created click on the new location item
  4. Extract the collection location ID from the URL. For example: https://app.packfleet.com/locations/cloc_YOUR_ID_HERE/edit. Alternatively you can create a collection location using the API, for more information see here. You can also optionally set up a recurring collection or create a one-off collection now.

Creating a shipment

Using the Bulk create endpoint create one or more shipments. Make sure that:

  • You use your newly created collection location ID
  • If you have not created a collection then leave the collectionId field blank
  • You are only using brandId if you want to override the sender details (for example if you are acting on behalf of other brands) and you have previously created a brand

This endpoint will include the shipment IDs that you will need when generating your labels, they will have the ship_ prefix. The response will not contain the label PDF, this must be done using the process described in the next step.

Printing labels

Now that you have created one or more shipments you can generate the labels. This is done using the generate labels endpoint. You can choose to generate the labels as PDF, PNG or raw HTML files. Packfleet currently supported the rect (4” x 6”) and square (4” x 4”) formats.

Sandbox

Change shipment status (Sandbox only)

Changes the status of a shipment to help with testing.

When using this API and setting the shipment status to "OUT_FOR_DELIVERY", the tracking API returns "simulated" live tracking information for the shipment. If the status is set to "DELIVERED", a simulated proof of delivery is also available.

SecurityAPI Key
Request
path Parameters
id
required
string

The shipment that you wish to update

Example: ship_clb19k5yl00006aul274377nx
Request Body schema: application/json
required
status
required
string

Changes the status this shipment to this value. This will also change the status of all packs within the shipment to this value. Only available in the sandbox environment!

Enum: "SCHEDULED" "OUT_FOR_COLLECTION" "COLLECTED" "IN_DEPOT" "EXTERNAL_CARRIER_COLLECTED" "EXTERNAL_CARRIER_IN_TRANSIT" "OUT_FOR_DELIVERY" "AVAILABLE_FOR_RECIPIENT_PICKUP" "DELIVERED" "FAILED_DELIVERY" "ON_HOLD" "TO_RETURN_TO_SENDER" "RETURNED_TO_SENDER" "UNDELIVERABLE"
Responses
200

Status changed successfully

default
put/v1/sandbox/shipments/{id}/status
Request samples
application/json
{
  • "status": "SCHEDULED"
}
Response samples
application/json
{ }

Brands

id
required
string
organizationId
required
string
name
required
string

Name of the brand that is displayed in notifications and on the tracking page

emoji
required
string

Emoji that is used on the tracking page, if not set then 📦 is used instead

createdAt
required
string <date-time>

ISO8601 Datetime of creation

updatedAt
required
string <date-time>

ISO8601 datetime of last update

{
  • "id": "brand_cl8yhq9vm0000rful6wgz8jw5",
  • "organizationId": "org_cl8yhq10a0000rful4xomfypk",
  • "name": "string",
  • "emoji": "string",
  • "createdAt": "2022-01-02T12:34:56.123Z",
  • "updatedAt": "2022-01-02T12:34:56.123Z"
}

Create

Create a new brand which can be used to override the details of a shipments sender. This can be used to ship packages on behalf of another merchant

SecurityAPI Key
Request
Request Body schema: application/json
required
name
required
string

Name of the brand that is displayed in notifications and on the tracking page

emoji
string

Emoji that is used on the tracking page, if not set then 📦 is used instead

Responses
201

The brand has been successfully created.

default
post/v1/brands
Request samples
application/json
{
  • "name": "string",
  • "emoji": "string"
}
Response samples
application/json
{
  • "brand": {
    }
}

List

Lists all brands for your organisation

SecurityAPI Key
Responses
200
default
get/v1/brands
Response samples
application/json
{
  • "brands": [
    ]
}

Read

Reads a brand

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
get/v1/brands/{id}
Response samples
application/json
{
  • "brand": {
    }
}

Update

Updates the details of an already created brand

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
name
string

Name of the brand that is displayed in notifications and on the tracking page

emoji
string

Emoji that is used on the tracking page, if not set then 📦 is used instead

Responses
201

The brand has been successfully updated.

default
patch/v1/brands/{id}
Request samples
application/json
{
  • "name": "string",
  • "emoji": "string"
}
Response samples
application/json
{
  • "brand": {
    }
}

Delete

Deletes a brand

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
delete/v1/brands/{id}
Response samples
application/json
{ }

Collections

id
required
string
organizationId
required
string
date
required
string <date>

Local date of when the collection is booked for

earliestTime
string <HH:MM>

Earliest local time the driver should arrive

latestTime
string <HH:MM>

Latest local time the driver should arrive

required
object (CollectionLocation)
createdAt
required
string <date-time>

ISO8601 datetime of creation

updatedAt
required
string <date-time>

ISO8601 datetime of last update

{
  • "id": "string",
  • "organizationId": "string",
  • "date": "2022-01-02",
  • "earliestTime": "10:30",
  • "latestTime": "14:30",
  • "location": {
    },
  • "createdAt": "2022-01-02T12:34:56.123Z",
  • "updatedAt": "2022-01-02T12:34:56.123Z"
}

Create

Creates a collection

SecurityAPI Key
Request
Request Body schema: application/json
required
locationId
required
string

The location where the collection should take place

date
required
string

Date of the collection

earliestTime
string <HH:MM>

Earliest time the collection should take place. If not provided, the default earliest time value from the collection location is used

latestTime
string <HH:MM>

Latest time the collection should take place. Must be at least 1 hour greater than earliestTime. If not provided, the default latest time value from the collection location is used.

Responses
201

The collection has been successfully created.

400
default
post/v1/collections
Request samples
application/json
{
  • "locationId": "string",
  • "date": "2022-05-01",
  • "earliestTime": "12:00",
  • "latestTime": "14:00"
}
Response samples
application/json
{
  • "collection": {
    }
}

List

Lists collections

SecurityAPI Key
Request
query Parameters
startDate
required
string <date>

Local date of collection. Must in the format yyyy-mm-dd

Responses
200
default
get/v1/collections
Response samples
application/json
{
  • "collections": [
    ]
}

Read

Reads a collection

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
get/v1/collections/{id}
Response samples
application/json
{
  • "collection": {
    }
}

Update

Updates a collection

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
locationId
string

The location where the collection should take place

date
string

Date of the collection

earliestTime
string <HH:MM>

Earliest time the collection should take place. If not provided, the default earliest time value from the collection location is used

latestTime
string <HH:MM>

Latest time the collection should take place. Must be at least 1 hour greater than earliestTime. If not provided, the default latest time value from the collection location is used.

Responses
200
default
patch/v1/collections/{id}
Request samples
application/json
{
  • "locationId": "string",
  • "date": "2022-05-01",
  • "earliestTime": "12:00",
  • "latestTime": "14:00"
}
Response samples
application/json
{
  • "collection": {
    }
}

Delete

Deletes a collection, this may incur a fee for last-minute cancellation

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200

Empty response

default
delete/v1/collections/{id}
Response samples
application/json
{ }

Assign shipments

Assign multiple shipments to the collection

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
shipmentIds
required
Array of strings

IDs of the shipments that should be assigned to this collection

Responses
200
default
post/v1/collections/{id}/assign-shipments
Request samples
application/json
{
  • "shipmentIds": "ship_clb19k5yl00006aul274377nx,ship_clb19k9j800006aul617id4nf"
}
Response samples
application/json
{
  • "collection": {
    }
}

Collection Locations

id
required
string
organizationId
required
string
name
string

Nickname of the collection location

phone
string <E.164>

Phone number of a point of contact at this location

defaultCollectionEarliestTime
string <HH:MM>

Default "earliest time" for a driver to collect from this location

defaultCollectionLatestTime
string <HH:MM>

Default "latest time" for a driver to collect from this location

required
object (Address)
createdAt
required
string <date-time>

ISO8601 Datetime of creation

updatedAt
required
string <date-time>

ISO8601 datetime of last update

{
  • "id": "string",
  • "organizationId": "string",
  • "name": "Warehouse",
  • "phone": "+447912345678",
  • "defaultCollectionEarliestTime": "12:00",
  • "defaultCollectionLatestTime": "15:00",
  • "address": {
    },
  • "createdAt": "2022-01-02T12:34:56.123Z",
  • "updatedAt": "2022-01-02T12:34:56.123Z"
}

Create

Creates a collection location

SecurityAPI Key
Request
Request Body schema: application/json
required
required
object (AddressDto)
name
required
string

Nickname of location, for your convenience

phone
required
string <E.164>

Contact number for collections at this location

defaultCollectionEarliestTime
string <HH:MM>

Default "earliest time" for a driver to collect from this location

defaultCollectionLatestTime
string <HH:MM>

Default "latest time" for a driver to collect from this location. Must be at least 1 hour greater than the earliest time

skipRecurringCollectionsOnBankHolidays
boolean

If set to true, recurring collections at this location will not be scheduled on bank holidays. Default to true.

Responses
201

The location has been successfully created.

400
default
post/v1/collection-locations
Request samples
application/json
{
  • "address": {
    },
  • "name": "Warehouse",
  • "phone": "+447912345678",
  • "defaultCollectionEarliestTime": "12:00",
  • "defaultCollectionLatestTime": "15:00",
  • "skipRecurringCollectionsOnBankHolidays": true
}
Response samples
application/json
{
  • "collectionLocation": {
    }
}

List

Lists all collection locations for your organisation

SecurityAPI Key
Responses
200
default
get/v1/collection-locations
Response samples
application/json
{
  • "collectionLocations": [
    ]
}

Read

Reads a collection location

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
get/v1/collection-locations/{id}
Response samples
application/json
{
  • "collectionLocation": {
    }
}

Update

Updates a collection location

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
name
string

Nickname of location, for your convenience

phone
string <E.164>

Contact number for collections at this location

defaultCollectionEarliestTime
string <HH:MM>

Default "earliest time" for a driver to collect from this location

defaultCollectionLatestTime
string <HH:MM>

Default "latest time" for a driver to collect from this location. Must be at least 1 hour greater than the earliest time

skipRecurringCollectionsOnBankHolidays
boolean

If set to true, recurring collections at this location will not be scheduled on bank holidays. Default to true.

object (UpdateAddressDto)
Responses
200
default
patch/v1/collection-locations/{id}
Request samples
application/json
{
  • "name": "Warehouse",
  • "phone": "+447912345678",
  • "defaultCollectionEarliestTime": "12:00",
  • "defaultCollectionLatestTime": "15:00",
  • "skipRecurringCollectionsOnBankHolidays": true,
  • "address": {
    }
}
Response samples
application/json
{ }

Delete

Deletes a collection location

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
delete/v1/collection-locations/{id}
Response samples
application/json
{ }

Coverage

Supported areas

Returns all available postcode areas that Packfleet delivers to

SecurityAPI Key
Responses
200
default
get/v1/coverage
Response samples
application/json
{
  • "postcodes": [
    ]
}

Check postcodes

Checks if Packfleet delivers to the given postcodes

SecurityAPI Key
Request
query Parameters
postcodes
required
Array of strings

Comma-separated list of postcodes. May or may not contain a space within the postcode

Example: postcodes=AB123CD,XX123YY
Responses
200
default
get/v1/coverage/check
Response samples
application/json
{
  • "postcodes": [
    ]
}

Shipments

id
required
string
organizationId
required
string
brandId
string
trackingNumber
required
string

Hyphen-separated unique words to identify this shipment

trackingUrl
required
string
externalReference
string
externalId
string
createdAt
required
string <date-time>

ISO8601 datetime of creation

updatedAt
required
string <date-time>

ISO8601 datetime of last update

status
required
string

Overall status of the shipment. This reflects the majority status of each Pack within the Shipment, or the more advanced status if there is a tie.

For more detail about how a shipment was delivered or why it failed check proofsOfDelivery

Enum: "SCHEDULED" "OUT_FOR_COLLECTION" "COLLECTED" "IN_DEPOT" "EXTERNAL_CARRIER_COLLECTED" "EXTERNAL_CARRIER_IN_TRANSIT" "OUT_FOR_DELIVERY" "AVAILABLE_FOR_RECIPIENT_PICKUP" "DELIVERED" "FAILED_DELIVERY" "ON_HOLD" "TO_RETURN_TO_SENDER" "RETURNED_TO_SENDER" "UNDELIVERABLE"
statusDescription
required
string

Overall status of the shipment as a human readable value

serviceType
required
string
Enum: "nextDay" "sameDay" "twoDay"
gift
boolean

If true, we'll tell the recipient to expect a gift when sending notifications.

object (Brand)
required
object (Collection)
required
object (CollectionLocation)
required
object (Delivery)
required
Array of objects (Pack)
Array of objects (ProofOfDelivery)

Contains more detailed information about how a shipment was delivered or why it failed along. May also contain images taken by the driver of the delivery attempt.

Only populated if shipment has been delivered or failed delivery in the past. One ProofOfDelivery per delivery attempt

{
  • "id": "string",
  • "organizationId": "string",
  • "brandId": "string",
  • "trackingNumber": "beautiful-ship",
  • "externalReference": "string",
  • "externalId": "string",
  • "createdAt": "2022-01-02T12:34:56.123Z",
  • "updatedAt": "2022-01-02T12:34:56.123Z",
  • "status": "SCHEDULED",
  • "statusDescription": "string",
  • "serviceType": "nextDay",
  • "gift": true,
  • "brand": {
    },
  • "collection": {
    },
  • "collectionLocation": {
    },
  • "delivery": {
    },
  • "packs": [
    ],
  • "proofsOfDelivery": [
    ]
}

Bulk create

Creates multiple shipments

SecurityAPI Key
Request
Request Body schema: application/json
required
collectionId
string

The collection ID when the shipment should be collected. Either the collectionId or collectionLocationId MUST be present

collectionLocationId
string

The collection location ID where the shipment should be collected from. Either the collectionId or collectionLocationId MUST be present

required
Array of objects (CreateShipmentDto)
Responses
201

The records have been successfully created.

400
default
post/v1/shipments/bulk
Request samples
application/json
{
  • "collectionLocationId": "cloc_REPLACE_ME",
  • "shipments": [
    ]
}
Response samples
application/json
{
  • "shipments": [
    ]
}

List

Lists shipments

SecurityAPI Key
Request
query Parameters
limit
number

Return at most limit shipments. Max limit is 200

Example: limit=50
cursor
string

Fetch the next limit shipments after provided cursor

Responses
200
default
get/v1/shipments
Response samples
application/json
{
  • "cursor": "string",
  • "shipments": [
    ]
}

Read

Reads a shipment

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
get/v1/shipments/{id}
Response samples
application/json
{
  • "shipment": {
    }
}

Update

Updates a shipment

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
brandId
string

An optional ID of a brand to be used for this shipment, if present the brand details will be used in notifications and on the tracking page in place of your organizations default details. This can be useful if shipping on behalf of another merchant or if you operate multiple stores

externalReference
string

External reference included in shipment label, for example an order ID

externalId
string

External system identifier, this is not shown on the shipment label

externalStoreType
string

The eCommerce platform used for this order if one is used

Enum: "BIGCOMMERCE" "DEMO_SHOPIFY" "LINNWORKS" "MAGENTO" "MINTSOFT" "SHOPIFY" "SQUARESPACE" "VEEQO" "WOOCOMMERCE"
externalStoreReference
string

Identifier used to determine what store the shipment is being booked for, this can be used to determine what branding information should be used when delivering for multiple stores through a single Packfleet account.

If you are using Shopify this should contain the store hyphenated store name, this is the value that can be found before '.myshopify.com'
numberOfPacks
number

How many individual packages does this shipment contain? Each package must have a unique label. Either packs or numberOfPacks must be present, numberOfPacks can be used if you just need to specifiy the number of packs being shipped and don't need to validate the pack dimensions/weight

Array of objects (PackDto)

Information about the individual packs. Either packs or numberOfPacks must be present, packs should be used if you are able to provide the pack dimensions/weight otherwise use numberOfPacks

serviceType
string

Influences the delivery date and time of the shipment, as well as the cost.

Next day shipments are usually delivered 7am-10pm the day following the collections, except Sundays.

Enum: "nextDay" "sameDay" "twoDay"
gift
boolean

If true, we'll tell the recipient to expect a gift when sending notifications.

object (UpdateDeliveryDto)
collectionId
string

The collection ID when the shipment should be collected

collectionLocationId
string

The collection location ID where the shipment should be collected from

Responses
200
default
patch/v1/shipments/{id}
Request samples
application/json
{
  • "brandId": "brand_REPLACE_ME",
  • "externalReference": "ORDER123",
  • "externalId": "string",
  • "externalStoreType": "SHOPIFY",
  • "externalStoreReference": "string",
  • "numberOfPacks": 1,
  • "packs": [
    ],
  • "serviceType": "nextDay",
  • "gift": true,
  • "delivery": {
    },
  • "collectionId": "col_REPLACE_ME",
  • "collectionLocationId": "cloc_REPLACE_ME"
}
Response samples
application/json
{
  • "shipment": {
    }
}

Change delivery date

Changes the delivery date of a shipment. This can be done at any point before the shipment is in a delivered state.

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
deliveryDate
required
string <date>

The new delivery date. Must be in the future, and within the next 30 days. Must in the format yyyy-mm-dd

Responses
200
default
put/v1/shipments/{id}/delivery-date
Request samples
application/json
{
  • "deliveryDate": "2023-03-28"
}
Response samples
application/json
{
  • "shipment": {
    }
}

Change delivery address

Changes the delivery address of a shipment. This can be done at any point before the shipment is in a delivered state. Changing the address after weʼve collected your shipment may push the delivery date to the next available date.

SecurityAPI Key
Request
path Parameters
id
required
string
Request Body schema: application/json
required
required
object

The new delivery address. Must be a valid address within Packfleet’s coverage area

Responses
200
default
put/v1/shipments/{id}/delivery-address
Request samples
application/json
{
  • "address": {
    }
}
Response samples
application/json
{
  • "shipment": {
    }
}

Shipping Labels

Generate labels

Generates a PDF of shipping labels for provided shipments

SecurityAPI Key
Request
header Parameters
Accept
string

Specify the format that the labels should be generated in. Defaults to 'application/pdf'

Enum: "application/pdf" "text/html" "image/png"
Request Body schema: application/json
required
shipmentIds
required
Array of strings

The shipments that you wish the labels to be generated for. If the label format is image/png then exactly one ID must be specified

packIds
Array of strings

The packs that you wish the labels to be generated for. If empty then the all labels will be generated for the requested shipments. If the label format is image/png then exactly one ID must be specified

labelSize
required
string
Enum: "rect" "square"
Responses
200
default
post/v1/shipping-labels/generate
Request samples
application/json
{
  • "shipmentIds": [
    ],
  • "labelSize": "rect"
}
Response samples
application/json
{
  • "error": {
    }
}

Rates

Check available rates

Fetch the available rates to deliver the requested packs

SecurityAPI Key
Request
Request Body schema: application/json
required
numberOfPacks
integer

How many individual packages does this shipment contain? Each package must have a unique label. Either packs or numberOfPacks must be present

Array of objects (PackDto)

Information about the individual packs. Either packs or numberOfPacks must be present

collectionDate
string <date>

Date that the shipment will be collected on. Must in the format yyyy-mm-dd

earliestTime
string <HH:MM>

Earliest time the delivery should take place. May incur an additional charge

latestTime
string <HH:MM>

Latest time the delivery should take place. Must be at least 3 hours after earliestDeliveryTime, if set. May incur an additional charge

timeWindows
Array of strings <HH:MM>

List of possible time windows that the delivery should take place. The response will contain a rate for each time window. This is equivalent to using earliestTime/latestTime however allows multiple windows to be calculated in a single request

required
object

Destination that the shipment is being collected from

required
object

Destination that the shipment is being delivered to

Responses
200
default
post/v1/rates
Request samples
application/json
{
  • "numberOfPacks": 1,
  • "packs": [
    ],
  • "collectionDate": "2022-05-01",
  • "earliestTime": "12:00",
  • "latestTime": "15:00",
  • "timeWindows": "15:00",
  • "originAddress": {
    },
  • "destinationAddress": {
    }
}
Response samples
application/json
{
  • "rates": [
    ]
}

Tracking

shipmentId
required
string
trackingNumber
required
string

A unique two or three word phrase representing this shipment

trackingUrl
required
string
status
required
string

Overall status of the shipment. If some packs within the shipment are in a different state, the shipment reflects the majority status, or the "later" status in case of a tie.

For more detail about how a shipment was delivered or why it failed check proofOfDelivery.

Enum: "SCHEDULED" "OUT_FOR_COLLECTION" "COLLECTED" "IN_DEPOT" "EXTERNAL_CARRIER_COLLECTED" "EXTERNAL_CARRIER_IN_TRANSIT" "OUT_FOR_DELIVERY" "AVAILABLE_FOR_RECIPIENT_PICKUP" "DELIVERED" "FAILED_DELIVERY" "ON_HOLD" "TO_RETURN_TO_SENDER" "RETURNED_TO_SENDER" "UNDELIVERABLE"
deliveryDate
string <date>

Local date of delivery

required
object

Details for the sender of the shipment

required
object

Details for the recipient of the shipment

object

Information about the status of the shipment, present once the shipment has been assigned to a route

object

Evidence of the most recent shipment attempt and contains more detailed information about how a shipment was delivered or why it failed along. May also contain images taken by the driver of the delivery attempt

required
Array of objects (PackTracking)

Each individual pack within a shipment is tracked separately

{
  • "shipmentId": "string",
  • "trackingNumber": "beautiful-ship",
  • "status": "SCHEDULED",
  • "deliveryDate": "2022-05-05",
  • "sender": {
    },
  • "recipient": {
    },
  • "delivery": {
    },
  • "proofOfDelivery": {
    },
  • "packs": [
    ]
}

Tracking

Gets tracking information about a shipment

SecurityAPI Key
Request
path Parameters
trackingNumber
required
string
Responses
200
default
get/v1/tracking/{trackingNumber}
Response samples
application/json
{
  • "shipmentId": "string",
  • "trackingNumber": "beautiful-ship",
  • "status": "SCHEDULED",
  • "deliveryDate": "2022-05-05",
  • "sender": {
    },
  • "recipient": {
    },
  • "delivery": {
    },
  • "proofOfDelivery": {
    },
  • "packs": [
    ]
}

Bulk Tracking

Gets tracking information about up to 50 shipments

SecurityAPI Key
Request
query Parameters
trackingNumbers
required
Array of strings

Comma-separated list of tracking numbers

Example: trackingNumbers=first-phrase,second-phrase
Responses
200
default
get/v1/tracking
Response samples
application/json
{
  • "shipments": [
    ]
}

Collection Tracking

Gets tracking information about a collection

SecurityAPI Key
Request
path Parameters
collectionId
required
string
Responses
200
default
get/v1/tracking/collections/{collectionId}
Response samples
application/json
{
  • "collectionId": "string",
  • "status": "SCHEDULED",
  • "date": "2022-01-02",
  • "location": {
    },
  • "collection": {
    },
  • "proofOfCollection": {
    }
}

Webhooks

Webhooks can be used to receive notifications to objects such as Shipments and Collections whenever they change. Once you have registered a webhook you will start receiving POST requests to the configured endpoint which can be used to trigger business logic instead of relying on polling the API periodically.

  • You can create up to 10 webhooks at a time
  • The webhook URL must be an absolute URL that is accessible over the internet
  • The webhook must use HTTPS
  • Webhook events are not ordered and you may receive duplicate events
  • If your webhook endpoint is unavailable we will periodically attempt to deliver any failed messages for up to 24 hours
  • If your webhook endpoint is unable to receive any events for 7 days then your webhook will be disabled. Re-create the webhook to re-enable it
  • Each webhook request will contain a signature that can be used to verify that Packfleet sent the request, see the Callbacks section for more info
id
required
string
organizationId
required
string
status
required
string

Current status of the webhook. If disabled no requests will be made to the webhook

Enum: "ENABLED" "DISABLED"
topic
required
string

Name of the topic the webhook is subscribed to

url
required
string

Endpoint that the webhook is configured to send data to

version
required
string

The version of the API that should be used to construct webhook requests

Value: "V1"
lastSuccessfulRequest
required
string <date-time>

ISO8601 datetime of last successful call to the webhook endpoint

createdAt
required
string <date-time>

ISO8601 Datetime of creation

updatedAt
required
string <date-time>

ISO8601 datetime of last update

{
  • "id": "webhook_cl8yhq9vm0000rful6wgz8jw5",
  • "organizationId": "org_cl8yhq10a0000rful4xomfypk",
  • "status": "ENABLED",
  • "topic": "shipment.created",
  • "version": "V1",
  • "lastSuccessfulRequest": "2022-01-02T12:34:56.123Z",
  • "createdAt": "2022-01-02T12:34:56.123Z",
  • "updatedAt": "2022-01-02T12:34:56.123Z"
}

Create

SecurityAPI Key
Request
Request Body schema: application/json
required
topic
required
string

Name of the topic the webhook is subscribed to

Enum: "shipment.created" "shipment.updated" "shipment.deleted" "collection.created" "collection.updated" "collection.deleted"
url
required
string

Endpoint that the webhook is configured to send data to

version
required
string

The version of the API that should be used to construct webhook requests

Value: "V1"
Responses
201

The webhook has been successfully created.

400
default
Callbacks
postshipment.created
postshipment.updated
postshipment.deleted
postcollection.created
postcollection.updated
postcollection.deleted
post/v1/webhooks
Request samples
application/json
{}
Response samples
application/json
{
  • "webhook": {
    },
  • "secret": "18A1E3894B3B9549EF5B18A4764ED7B888B15474411855BE424518C68FB4EC87"
}
Callback payload samples
application/json
{
  • "id": "string",
  • "organizationId": "string",
  • "brandId": "string",
  • "trackingNumber": "beautiful-ship",
  • "externalReference": "string",
  • "externalId": "string",
  • "createdAt": "2022-01-02T12:34:56.123Z",
  • "updatedAt": "2022-01-02T12:34:56.123Z",
  • "status": "SCHEDULED",
  • "statusDescription": "string",
  • "serviceType": "nextDay",
  • "gift": true,
  • "brand": {
    },
  • "collection": {
    },
  • "collectionLocation": {
    },
  • "delivery": {
    },
  • "packs": [
    ],
  • "proofsOfDelivery": [
    ]
}

List

Lists all webhooks for your organisation

SecurityAPI Key
Responses
200
default
get/v1/webhooks
Response samples
application/json
{
  • "webhooks": [
    ]
}

Read

Reads a webhook

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
get/v1/webhooks/{id}
Response samples
application/json
{
  • "webhook": {
    }
}

Delete

Deletes a webhook

SecurityAPI Key
Request
path Parameters
id
required
string
Responses
200
default
delete/v1/webhooks/{id}
Response samples
application/json
{ }