Sway API (fka Swyft API) (1.0.5)

Download OpenAPI specification:Download

Latest changes

1.0.1 : changed error response format on every v5 endpoint

1.0.1 : added optional render_zpl field in body request for [v5] Create Label and removed the accept:application/zpl header option that was used in previous create label endpoints

1.0.2 : changed [v5] Delete label 200 response format from text/html to application/json

1.0.2 : added optional render_zpl field in body request for [v5] GET label request

1.0.3: simplified [v5] Tracking status 200 response body

1.0.3: added format field in [v5] Print Label request body

1.0.3: added ability to [v5] Print Label return zpl and pdf format. Response header content-type will be application/zpl or application/pdf

1.0.4: added rate_card_type in RateV5 object

1.0.5: added optional service_add_ons field in request and response body [v5] Create Label and response in [v5] Get Label

Introduction

Sway is a middle/last-mile delivery service that offers same and next-day shipping to customers at affordable rates. The Sway technology platform with its network of warehouses and delivery companies provides merchants and their customers the best delivery experience possible.

API Overview

Welcome to the API documentation!

To use our API, make sure to set up your Swyft account by contacting your Merchant Success Manager or by contacting Swyft Support. Most user actions that can be done in our Merchant Dashboard can be done though our REST API.

Common Use Cases:

  • Creating a label
  • Deleting a label
  • Tracking a label
  • Printing a label
  • Getting package delivery rates

Authentication

AccessToken

Security Scheme Type API Key
Header parameter name: X-Swyft-Access-Token

Rates

[v5] Fetch Rates

Fetch rates for given destination, dimensions and pickup location (required only if merchant has more than one pickup location).

Authorizations:
Request Body schema: application/json
required
object (Address)

Address of the package's destination

required
object

Package dimensions.

pickup_location_slug
string

Identifier for the pickup location of the packages. Required if merchant contains more than one pickup location.

Responses

Request samples

Content type
application/json
{
  • "destination": {
    },
  • "dimensions": {
    },
  • "pickup_location_slug": "string"
}

Response samples

Content type
application/json
{
  • "rates": [
    ],
  • "errors": [
    ]
}

Labels

[v5] Get Label

Fetch a single label by id.

Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id.

render_zpl
boolean
Default: false

flag to indicate if zpl should be rendered and returned on response payload.

Responses

Request samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "client_id": "acme_corp",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "rate": {
    },
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z",
  • "service_add_ons": [
    ]
}

[v5] Create Label

Create label for specific service type.

Authorizations:
Request Body schema: application/json
service_type
required
string
Enum: "SAMEDAY" "EXPEDITED"

One of the service types returned when fetching rates.

required
object (Dimensions)

Package dimensions

required
object (Recipient with Phone)

An individual receiving or sending a package.

required
Recipient with Phone (object) or Recipient with Email (object) (Recipient)

An individual receiving or sending a package.

business_name
string

Business name on whose behalf package is being delivered. In the case of a 3PL this would be the merchant business name. Is used in communication with client via SMS, etc.

notes
string

Specific notes about delivery location for driver.

order_number
string

Order number from client's system.

shipment_id
string

Shipment id for a group of orders from client's system.

reference
string

Reference # or ID on the client side in case of any issues. Primarily to be used by our dispatcher to reach out to client but can also be used by client to attach specific metadata to label.

reference2
string

Secondary reference # or ID on the client side in case of any issues. Can be used by client to attach specific metadata to label.

tracking_number
string

Optional unique tracking number. If provided, then the tracking number will be set to the given value. Otherwise it will be randomly generated.

pickup_location_slug
string

Identifier for the pickup location of this package. Required if merchant has multiple pickup locations

render_zpl
boolean
Default: false

flag to indicate if zpl should be rendered and returned on response payload.

service_add_ons
Array of strings (ServiceAddOns)
Items Enum: "SIGNATURE" "CHECK_ID"

A string representing extra service requirements of the label.

  • SIGNATURE - the label will display a SIGNATURE requirement.
  • CHECK_ID - the label will display a CHECK ID requirement.

Responses

Request samples

Content type
application/json
{
  • "service_type": "SAMEDAY",
  • "dimensions": {
    },
  • "origin": {
    },
  • "destination": {
    },
  • "notes": "Ask concierge for elevator access",
  • "order_number": "12345ABC",
  • "shipment_id": "567890ABC",
  • "reference": "order #9000",
  • "reference2": "order #9000"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "client_id": "acme_corp",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "rate": {
    },
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z",
  • "service_add_ons": [
    ]
}

[v5] Delete Label

Cancel a recently created label. This will cause the label to not be scheduled for delivery but can still be fetched later for auditing. Can only cancel a label before the package reaches our warehouse, if successful then the label will not be billed for. To cancel after a pickup contact Swyft so that we tell the driver not to deliver.

Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "string"
}

Response samples

Content type
application/json
{
  • "msg": "string"
}

[v5] Print Label

Fetch printable PDF or ZPL format for single label by id.

Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id.

format
required
string
Enum: "zpl" "pdf"

desired format to render printable label. if zlp format is selected, response header will return content-type=application/zpl. if pdf format is selected, response header will return with content-type=application/pdf

Responses

Request samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "foramt": "pdf"
}

Response samples

Content type
application/json
{
  • "code": "InvalidValue",
  • "msg": "dimensions"
}

Tracking

Package Lifecycle

label event flow

[v5] Get Tracking Status

Fetch the delivery status of a label by id or tracking number. The list is returned by descending order of timestamp.

Here are a couple of examples on why a delivery attempt may fail:

  • Destination is an apartment but there's no buzzcode
  • At most we will attempt to deliver a package 3 times.
Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "string"
}

Response samples

Content type
application/json
[
  • {
    }
]

Deprecated

Labels (deprecated):

Label API endpoints provide a way to create, delete, fetch and print labels in Swyft's system.

Package size matrix:

Swyft Size Code Max Vol (cuft) Max Weight (lbs) Max Length on any side (in)
Small 0.5 5 26
Medium 1 10 26
Large 2 20 26
Extra Large 3.3 35 26

Rates (deprecated): Rate API endpoints return the delivery prices for the different package sizes and service types for packages given an origin and destination. Rates will differ depending on the package size and service type, in addition to the options that are configured for it.

Package size matrix:

Swyft Size Code Max Vol (cuft) Max Weight (lbs) Max Length on any side (in)
Small 0.5 5 26
Medium 1 10 26
Large 2 20 26
Extra Large 3.3 35 26

[2020-04] Fetch Rates Deprecated

Fetch rates for given origin and destination.

Authorizations:
Request Body schema: application/json
required
object (Address)

Address where the package will be picked up

required
object (Address)

Address of the package's destination

signature_required
boolean (signatureRequired)

The customer must provide their signature on delivery through the driver phone application. Requiring a signature will affect the rate for the delivery For condos:

  • If there's a doorman, they can accept the package and sign for it.
  • Even if signatureRequired is false, if the driver can't find a safe place to store the package, it will not be delivered.
  • Setting signatureRequired as true will increase the pricing of the delivery.
pickup_location_slug
string

Identifier for the pickup location of the packages.

package_count
number (Package Count)
Default: 1

Number of packages to be delivered to a single location.

object

Package dimensions.

Responses

Request samples

Content type
application/json
{
  • "origin": {
    },
  • "destination": {
    },
  • "signature_required": true,
  • "pickup_location_slug": "string",
  • "package_count": 1,
  • "dimensions": {
    }
}

Response samples

Content type
application/json
{
  • "rates": [
    ]
}

[2021-09] Bulk Fetch Rates Deprecated

Fetch rates for a bulk list of origins and destinations. Request can only either Dimensions or Package Type.

Authorizations:
Request Body schema: application/json
One of
Array of objects

Responses

Request samples

Content type
application/json
Example
{
  • "rates": [
    ]
}

Response samples

Content type
application/json
{
  • "created_at": "2021-09-21T13:23:15.000Z",
  • "rates": [
    ]
}

[2020-10] Create Label Deprecated

Create label with specific package and service type.

Authorizations:
Request Body schema: application/json
One of
package_type
required
string
Enum: "SMALL" "MEDIUM" "LARGE" "EXTRA_LARGE"

One of the package types returned when fetching rates.

service_type
required
string
Enum: "SAMEDAY" "NEXTDAY"

One of the service types returned when fetching rates.

business_name
string

Business name on whose behalf package is being delivered. In the case of a 3PL this would be the merchant business name. Is used in communication with client via SMS, etc.

required
object (Recipient with Phone)

An individual receiving or sending a package.

required
Recipient with Phone (object) or Recipient with Email (object) (Recipient)

An individual receiving or sending a package.

signature_required
boolean (signatureRequired)

The customer must provide their signature on delivery through the driver phone application. Requiring a signature will affect the rate for the delivery For condos:

  • If there's a doorman, they can accept the package and sign for it.
  • Even if signatureRequired is false, if the driver can't find a safe place to store the package, it will not be delivered.
  • Setting signatureRequired as true will increase the pricing of the delivery.
notes
string

Specific notes about delivery location for driver.

order_number
string

Order number from client's system.

shipment_id
string

Shipment id for a group of orders from client's system.

reference
string

Reference # or ID on the client side in case of any issues. Primarily to be used by our dispatcher to reach out to client but can also be used by client to attach specific metadata to label.

reference2
string

Secondary reference # or ID on the client side in case of any issues. Can be used by client to attach specific metadata to label.

tracking_number
string

Optional unique tracking number. If provided, then the tracking number will be set to the given value. Otherwise it will be randomly generated.

pickup_location_slug
string

Identifier for the pickup location of this package.

Responses

Request samples

Content type
application/json
Example
{
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "notes": "Ask concierge for elevator access",
  • "order_number": "12345ABC",
  • "shipment_id": "567890ABC",
  • "reference": "order #9000",
  • "reference2": "order #9000"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "rate": {
    },
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z"
}

[2020-04] Delete Label Deprecated

Cancel a recently created label. This will cause the label to not be scheduled for delivery but can still be fetched later for auditing. Can only cancel a label before the package reaches our warehouse, if successful then the label will not be billed for. To cancel after a pickup contact Swyft so that we tell the driver not to deliver.

Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "string"
}

Response samples

Content type
text/html
OK

[2020-04] Print Label Deprecated

Fetch printable PDF for single label by id or Shopify order number.

Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "bqofiflh5s5id0diioug"
}

Response samples

Content type
text/html
Invalid request

[2020-04] Get Tracking Status Deprecated

Fetch the delivery status of a label by id or tracking number. Here are a couple of examples on why a delivery attempt may fail:

  • Destination is an apartment but there's no buzzcode
  • signature_required is set but no one is available to sign.
  • At most we will attempt to deliver a package 3 times.
Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "string"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "signature_required": "false,",
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z",
  • "status": {
    },
  • "status_history": [
    ],
  • "associated_crossdock_id": "WslSjuF9iREfEyoF2ySH",
  • "pickup_location_id": "AM6Mz5nTsQqfODPiNdbm",
  • "manually_approved": "true,",
  • "original_ship_date": "2020-05-04,",
  • "ship_date": "2020-05-06,",
  • "state": "DELIVERED,",
  • "merchant_id": "u1BrVSwwgWEAyAZheVE2,",
  • "merchant_slug": "acme-corporation,",
  • "received": "true,",
  • "rate": {
    },
  • "organization_slug": "acme-corporation,",
  • "client_id": "acme-corporation"
}

[2021-05] Subscribe to the label updates webhook. Deprecated

Subscribe to label updates by providing a url that swyft can respond to. The server should reply with a status of 200, if that is not the case then the webhook will unsubscribe after 300 failed attempts. The notification_url must be an https endpoint or will fail with status 400. Swyft uses HMAC with the SHA-512 hash function for additional authentication, and each request comes with a X-Swyft-Signature header. To authenticate compare the header with the API Token in an HMAC hexadecimal format.

Authorizations:
Request Body schema: application/json
notification_url
required
string <uri> (Notification Url)

The https endpoint to receive label update notifications.

Responses

Callbacks

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Callback payload samples

Callback
POST: Payload that will be sent to your server when a tracking event occurs.
Content type
application/json
{
  • "id": "string",
  • "tracking_number": "string",
  • "state": "PENDING",
  • "timestamp": "2019-08-24T14:15:22Z"
}

[2021-05] Unsubscribe from the label updates webhook. Deprecated

Unsubscribe from label updates.

Authorizations:

Responses

Response samples

Content type
application/json
{}

[2020-04] Bulk Fetch Rates Deprecated

Fetch rates for a bulk list of origins and destinations.

Authorizations:
Request Body schema: application/json
Array of objects

Responses

Request samples

Content type
application/json
{
  • "rates": [
    ]
}

Response samples

Content type
application/json
{
  • "rates": [
    ]
}

[2020-04] Create Bulk Labels Deprecated

Create a bulk number of labels with a single request. Accepts a maximum of 100 labels per request. Each label will be validated against the label schema, if any do not validate then the request will fail returning the index of the invalid label from the array. If the schema is successful, the labels will be generated and returned as an array of labels, if any of these labels failed to be created due to issues such as address validation, then that row in the returned array will be an error object instead.

Authorizations:
Request Body schema: application/json
Array of objects (CreateLabelsWithPackageType)

Responses

Request samples

Content type
application/json
{
  • "labels": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

[2020-04] Create Label Deprecated

Create label with specific package and service type.

Authorizations:
Request Body schema: application/json
package_type
required
string
Enum: "SMALL" "MEDIUM" "LARGE" "EXTRA_LARGE"

One of the package types returned when fetching rates.

service_type
required
string
Enum: "SAMEDAY" "NEXTDAY"

One of the service types returned when fetching rates.

business_name
string

Business name on whose behalf package is being delivered. In the case of a 3PL this would be the merchant business name. Is used in communication with client via SMS, etc.

required
object (Recipient with Phone)

An individual receiving or sending a package.

required
Recipient with Phone (object) or Recipient with Email (object) (Recipient)

An individual receiving or sending a package.

signature_required
boolean (signatureRequired)

The customer must provide their signature on delivery through the driver phone application. Requiring a signature will affect the rate for the delivery For condos:

  • If there's a doorman, they can accept the package and sign for it.
  • Even if signatureRequired is false, if the driver can't find a safe place to store the package, it will not be delivered.
  • Setting signatureRequired as true will increase the pricing of the delivery.
notes
string

Specific notes about delivery location for driver.

order_number
string

Order number from client's system.

shipment_id
string

Shipment id for a group of orders from client's system.

reference
string

Reference # or ID on the client side in case of any issues. Primarily to be used by our dispatcher to reach out to client but can also be used by client to attach specific metadata to label.

reference2
string

Secondary reference # or ID on the client side in case of any issues. Can be used by client to attach specific metadata to label.

tracking_number
string

Optional unique tracking number. If provided, then the tracking number will be set to the given value. Otherwise it will be randomly generated.

pickup_location_slug
string

Identifier for the pickup location of this package.

Responses

Request samples

Content type
application/json
{
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "notes": "Ask concierge for elevator access",
  • "order_number": "12345ABC",
  • "shipment_id": "567890ABC",
  • "reference": "order #9000",
  • "reference2": "order #9000"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "rate": {
    },
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z"
}

[2020-04] Get Label Deprecated

Fetch a label encoded in JSON.

Authorizations:
Request Body schema: application/json
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "rate": {
    },
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z"
}

[2020-10] Create Bulk Labels Deprecated

Create a bulk number of labels with a single request. Accepts a maximum of 100 labels per request. Each label will be validated against the label schema, if any do not validate then the request will fail returning the index of the invalid label from the array. If the schema is successful, the labels will be generated and returned as an array of labels, if any of these labels failed to be created due to issues such as address validation, then that row in the returned array will be an error object instead.

Authorizations:
Request Body schema: application/json
One of
Array of objects (CreateLabelsWithPackageType)

Responses

Request samples

Content type
application/json
Example
{
  • "labels": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

[2020-10] Get Label Deprecated

Fetch a single label by id.

Authorizations:
Request Body schema: application/json
One of
id
required
string

Label id returned on create.

Responses

Request samples

Content type
application/json
Example
{
  • "id": "bqofiflh5s5id0diioug"
}

Response samples

Content type
application/json
{
  • "id": "bqofiflh5s5id0diioug",
  • "package_type": "SMALL",
  • "service_type": "SAMEDAY",
  • "business_name": "Acme Corporation",
  • "origin": {
    },
  • "destination": {
    },
  • "rate": {
    },
  • "notes": "Ask concierge for elevator access",
  • "reference": "order #9000",
  • "reference2": "order #9000",
  • "tracking_number": "9m4e2mr0ui3e8a215n4g",
  • "complete_after": "2020-05-06T21:00:00.000Z",
  • "complete_before": "2020-05-07T03:00:00.000Z",
  • "created_at": "2020-05-06T05:29:19.472Z",
  • "updated_at": "2020-05-06T05:29:19.472Z"
}

[2020-10] Get Availability Deprecated

Get availability of a zip/postal code for delivery based on a pickup location.

Authorizations:
query Parameters
pickup_location_slug
required
string

Identifier for the pickup location

postal_code
required
string

Postal/Zip code

Responses

Response samples

Content type
application/json
{
  • "availability": true
}

[2020-10] Get Coverage Areas Deprecated

Get coverage list of zip/postal codes based on a pickup location.

Authorizations:
query Parameters
pickup_location_slug
required
string

Identifier for the pickup location

Responses

Response samples

Content type
application/json
{
  • "coverage_areas": [
    ]
}