MachShip Fundamentals


The objective of this getting started guide is to provide you a quick summary of key knowledge you will need to build a successful integration with MachShip and understand the options available.

The target for this guide is developers and IT teams that are looking to create consignments, generate prices and integrate their internal systems with MachShip - this guide is NOT for carriers looking to be integrated with MachShip.

If you are a carrier looking to be integrated, or have questions about our integration with your platform, please reach out to carriers@support.machship.com for further information.

Organisations & Companies

Organisation

An organisation in MachShip is the billable account that all companies exist under.

Any consignment created on any company under an organisation is billed to that organisation.

Data, consignments or information is never shared, and cannot be accessed, across organisations.

Organisations are rarely a factor when it comes to your integration as they are typically only connected to a single organisation.

Companies

MachShip refers to the different business units that are setup under an organisations account in our platform as companies, and these companies exist in a tree structure with multiple levels.

Companies are very imporant to integrations, as the company allocated to a consignment affects who can and cannot see that consignment.

A common tree structure for a MachShip account would be:

  • Surefoot Enterprises
    • Surefoot Melbourne
    • Surefoot Sydney

In this structure, Surefoot enterprises is the parent company, and Surefoot Melbourne and Sydney would be child companies.

There are no limitations to the number of levels you have in the tree structure.

When being used by brokers, it's not uncommon for accounts to have 4-5 levels of depth in the tree structure.

The reason for using the tree structure on a MachShip account is that it allows the account holder to control:

  1. User Access - By allocating a consignment to a given company (or child company) users in a given warehouse or location can be restricted to consignments at their location
  2. Warehouse Workflow - Similar to user access, by limiting the consignments that show to a given set of users, you can better manage their daily workflow and allow them to take advantage of bulk actions. For example, if you had two pick up locations at the same warehouse facility, that wanted to generate seperate manifests, you could setup two split companies, allowing each location to "select all consignments" without accidently selecting consignments from the other pick up location.
  3. Carrier Access - Specific carrier accounts can be linked to specific child companies, restricting which locations and business units can use which carriers, or carrier accounts
  4. Branding - Each company can have a different logo and brand set, which shows on outbound communications and tracking pages

Based on this, while the companies that are setup tend to be represent locations or warehouses, they are not always so.

For example, another common account structure is:

  • Surefoot Enterprises
    • VIC
      • Big Widget Inc.
      • Sallys Flower Co
    • NSW
      • Big Widget Inc.
      • Sallys Flower Co

In this case, the example company trades as multiple brands, that are dispatched out of two warehouse locations.

The above setup would allow users added to the VIC and NSW companies to dispatch for both of the brands (Big Widget and Sallys Flowers) underneath them, while not being able to access the other warehouse consignments.

Company Impacts On Integrations

From an integration perspective, companies are important when:

  • Allocating Consignments On Creation - when you create a consignment, you need to ensure that the consignment is showing in MachShip underneath the correct company so the users attached to that company can see the consignment.
  • Routing/Pricing - when you generate a quote for a job via our API, the prices will likely differ between parent and child accounts because different carriers and carrier accounts with different rates are allocated to the various business units. Allocating the correct company will ensure the prices are correct.
  • API Key Access - when you create an API key in MachShip, it's attached to a user, who is attached to a company. If you create an API key on a user that is setup on a child company, then try and create a consignment on a sibling, it will fail as that user is not able to see or create consignments on that sibling. Therefore, the API key would be best created on a parent, which is just above those two child companies, granting it access to both.

How companies are allocated when creating or routing consignments differs based on integration method.

For further info, see our specific API and flat file documentation.

Inheritance

Inheritance is a time-saving feature used throughout MachShip that allows you to make addresses, items, dangerous goods and carrier accounts visible to child companies of the company they are setup on.

Let's say you have an address book for all of your customers delivery addresses - and you have the following account setup:

  • Surefoot Enterprises
    • Surefoot Melbourne
    • Surefoot Sydney

If you were to upload this address book under Surefoot enterprises, by default, your two warehouses would not be able to see or access the addresses in that address book. It's locked so only users logged into Surefoot Enterprises (the parent and owner of the addresses) could see them.

Normally this would mean you would need to upload the address book to both of these locations - which is time consuming, and they could quickly become mis-aligned.

Instead, on the "Surefoot Enterprises" company, you can enable "Inherit Locations".

With this enabled, the children underneath can access the parents locations.

{danger.fa-close} Do not enable inheritance without first considering what the child will be able to see. For example, if you have setup 3PLs as child companies so they can dispatch on your behalf, you likely do NOT want them to see your entire customer address book. In those instances, you would not enable inheritance, but simply upload or create a few addresses on the child company instead.

Inheritance Impacts On Integrations

  • Errors - It is very common to be given carrier account ids, or locations and then when you go to use them in your integration there is errors such as "Unable to access From Company Location". This is a sign that the user has provided the incorrect ID, or it's been setup on the parent, and you're trying to dispatch on the child, but inheritance has NOT been enabled.
  • Company Setup - When companies are setup, be mindful of what you want them to be able to access from the parent and enable inheritance on the appropriate items.

Users, Roles & Permissions

When a user is created in MachShip, they are allocated to a company and they can see all consignments on their company and below in the structure.

Let's use this structure as an example:

  • Surefoot Enterprises
    • Surefoot Melbourne
    • Surefoot Sydney

Based on this:

  1. Users linked to Surefoot Melbourne would only see consignments under Surefoot Melbourne.
  2. Users created on Surefoot Enterprises could see consignments across Surefoot Enterprises, Surefoot Melbourne and Surefoot Sydney as those companies are underneath Surefoot Enterprises in the tree.

Roles

Each user has a role, and that role has certain permissions attached to it that controls what a user can see and do inside the MachShip platform.

Here are two example roles to demonstrate:

  • Despatch - this role may only allow users to create consignments, but not access any settings
  • View Only - this role may allow a user to view consignments, but not create them

Test Mode / Sandbox

Users have a "test mode setting" field which controls whether a user creates or can view test consignments.

This field has the following options:

  • Disabled from seeing test consignments - user creates real consignments, cannot see test consignments
  • Enabled to see test consignments - user creates real consignments, but can view test consignments
  • User is in test mode - User creates test consignments, and can see them

If this setting is set to "User is in test mode", then the user, and any attached API keys should be considered as the "sandbox".

A test mode user will only ever create test consignments, which are not billed, and never go through to the carrier when manifested.

This is the setting that is used when building your integration to ensure the consignments you create are not sent to carriers.

API Keys & Tokens

API keys are created on users in MachShip, and inherit that users company access, permissions (role) and test mode setting.

A user can have multiple keys created against them, and tokens can also be revoked.

For the steps to create an API key, view our guide here.

Users, Tokens & Impact On Integrations

In the context of integrations, users and their roles are applicable as your API key is linked to a user and that users test mode and permissions affect what your token is able to see and do via our API.

It is common for a developer to be given a token with more restricted permissions than are required, or for the token to be linked to a company that is not the target company for the integration. If you try and query a listed endpoint and get a permissions issue, it is likely related to the users role, or company.

Carriers & Accounts

A carrier in MachShip refers to a shipping provider, for example Australia Post.

Carrier Services

Carriers offer different services for different types of freight, with different delivery speeds.

These services are unique for every carrier, with common descriptions being "Express", "Overnight", "Same Day" or "Tailgate Delivery".

Other services are referred to by the size of the vehicle, for example, "1 Tonne Truck".

Carrier Accounts

When a MachShip customer wants to connect their MachShip account to a given carrier, they use a "Carrier Account."

The carrier account contains details such as a customer's account number with that carrier, shipping rates, usernames and passwords, carrier reference pools, and other essential data we need to store to create and price a shipment with that carrier.

Without a carrier account, Machship would be unable to create consignments for a carrier or price those consignments.

Company Carrier Accounts

Carrier accounts are typically setup against the top most level company inside MachShip, then a company Carrier Account is created which links the carrier account to a given company.

This linkage, known as a company carrier account, allows a MachShip customer to create several carrier accounts once, then link specific accounts to specific dispatch companies where they want to use that carrier, and provide some company specific configuration as required.

This objective of this primary carrier account setup, with multiple linked company carrier accounts, prevents duplication of carrier account setup and carrier account configuration and doubling up of key references with that carrier.

Carrier Integration Types

When MachShip integrates with a carrier, there are two areas of integration:

  1. Consignment Creation - we programmatically create consignments in their system using their available integration methods
  2. Routing & Pricing - we programmatically get the price or quote for a potential shipment from their system

For carriers that do not have programmatic routing & pricing options available, we load those carriers rate cards and consignment pricing methods into MachShip, and the pricing is generated inside the MachShip platform against the carrier account.

We have three different integration types with carriers:

  • Integrated - we have fully integrated with these carriers to programmatically create consignments in their systems and generate a compliant label.
  • Generic - these carriers have accepted our standard outbound file and standard label - the integration may not be fully featured
  • Label only - for these carriers, we simply generate a label, and have the ability to send them an email notifying them.

The majority of carriers in MachShip are integrated, with a smaller selection being generic.

Carriers & Accounts Impact On Integrations

Common considerations relating to carriers and integrations are:

  • Pre-selecting carriers and services - when creating a consignment, you can not select a carrier, in which case MachShip will allocate the cheapest carrier/service for that movement. If you were to provide a carrier only, we would select the cheapest service under that carrier. You can also opt to provide both a carrier and service.
  • Carriers not returning as expected - often the company carrier account has not been created on the company the request is being made for

Consignment Types

The MachShip platform has 3 types of consignments that you may opt to create.

Pending

Pending consignments are draft consignments that are partially completed and not yet allocated a carrier consignment ID.

The primary use of a pending consignment is to speed up despatch and prevent data entry issues by providing a dispatcher with a mostly filled-out consignment, where they only have to add a few final details before creating the consignment.

While a full consignment in MachShip must be 100% complete with a valid from and to address, all of the package details and a carrier and service selected - a pending consignment is not fully validated and can be partially completed or filled out, ready for a despatcher to finalise.

The primary reasons you would create a pending consignment over a regular consignment are:

  • You want your users to be able to add, edit/modify packages prior to allocating a carrier
  • Your system cannot capture package details in full- we require length x width x height, weight and item type (carton, pallet etc) of each box on the consignment.
  • You want your users to be able to see prices and select a carrier - and the system being integrated does not allow you to do so

By using a pending consignment, you can prefill most of the information and then have the user do the last part before getting the labels.

Consignment

A consignment is a finalised shipment with a carrier, service, packages and a carrier consignment id allocated.

A consignment is created in an "unmanifested" status, which means it exists, but the carrier has not yet notified of the job.

Consignments are typically manifested in bulk to the carrier by a user in MachShip, notifying the carrier about the consignments and their details.

Benign/Existing Consignment

A benign consignment is a consignment that is created in MachShip purely for billing or consignment tracking purposes.

The consignment is not passed to the carrier from our system - it's purely there for tracking and reconciliation reasosn.

No labels are created or generated for these types of consignments.

These types of consignments are created relatively rarely.

Consignment Lifecycle & Statuses

Lifecycle Overview

Consignments in MachShip have 3 key stages, with one optional proceeding stage:

  1. Pending (optional)
    • Stage Summary: the consignment has not yet been created and is in draft, partially filled out.
    • Stage Features:
      • No labels available
      • Carrier and service may or may not be allocated
      • Package data may or may not be allocated
      • No carrier consignment ID allocated (unless it was pre-allocated on creation)
      • Consignment may contain invalid data - like mismatching suburbs/postcodes
  2. Unmanifested
    • Stage Summary: the consignment has been created, is completely validated, but the carrier allocated to the consignment has not yet been notified.
    • Stage Features:
      • Carrier and service has been allocated
      • Package data has been added
      • Consignment is editable - Can be cancelled, carrier/service and packages could be changed or modified
      • Labels available, but are not scannable by the carrier, as they have not been notified of the consignment and the barcodes used
  3. Manifested
    • Stage Summary: manifesting is the process by which the carrier is notified about the consignment, and the consignment ids and label barcodes are sent into their system
    • Stage Features:
      • Manifesting is typically done once per day, per carrier in MachShip by selecting a group of unmanifested consignments and clicking "manifest", triggering a data send to a carrier.
      • The consignment is no longer editable once manifested
      • The carrier is able to scan the labels once manifesting occurs
      • The carriers' consignments status will start to reflect in MachShip after manifesting has occured
  4. In Transit & Completed
    • Stage Summary: the consignment is in flight with the carrier, with status updates coming back until the consignment has been delivered
    • Stage Features:
      • Consignment actively getting status updates from the carrier
      • Once delivered, the consignment has a completed date and time
      • The carrier may upload proof of pick up (PUP) and proof of deliveries (POD) as an attachment to the consignment. PODs can be delayed and are not always available immediately on delivery.

Manifesting

Manifesting is the critical step in the consignment lifecycle where the data is sent from MachShip to the carrier.

Manifesting is typically done once per day, per carrier, per warehouse via the MachShip UI by selecting a group of unmanifested consignments and clicking "manifest", triggering a data send to a carrier.

Once manifesting has been done, the carriers consignment status will begin to reflect in MachShip, and the labels will be scannable by the carrier.

Once a consignment has been manifested, it is no longer editable - any cancellations need to be processed directly with the carrier.

On manifest, a manifest document can be sent to an A4 printer that contains details of all consignments manifested.

Auto-manifesting

MachShip has the capability to "auto-manifest" consignments the instant they are created.

Typically this method is only used in two instances:

  1. A carrier requires manifesting to be able to get a consignment id (rare)
  2. It is a same day courier service, so the pick up needs to be booked immediately for the ETA to be true

The downside of auto-manifesting is that consignments cannot be merged together or editted in anyway once manifesting has occured.

This can be enabled on a per carrier and per service basis.

Consignment Statuses

Below is a current list of status in the MachShip system, followed by their status ID in MachShip.

Note, not all status are used by all carriers, and carriers do sometimes "skip" statuses in the process of delivering consignments.

Most Common Status Flow

  • Unmanifested (2)
  • Manifested (3)
  • Booked (4)
  • Picked Up (15)
  • In Transit (5)
  • Scanned into Depot (16)
  • Sorted for Delivery (18)
  • On For Delivery (13)
  • Delayed (6)
  • Complete (7)

Remaining Less Common Statuses

  • Deleted (21)
  • Complete - Returned To Sender (30)
  • Lost (8)
  • Damaged (9)
  • Cancelled (10)
  • Cancelled - Failed Pickup (27)
  • Cancelled - Failed Delivery (28)
  • Delivery Attempted (17)
  • Partial Delivery (19)
  • Delivery Time Scheduled (20)
  • At Delivery (22)
  • Partial On For Delivery (23)
  • At Pickup (24)
  • Tracking Expired (26)
  • Awaiting Collection (29)

Consignment Identifiers, Tracking URLs & Customer References

Here we will outline the key identifiers that you can use to identify consignments in our platform.

Pending Consignments

id - example: 543210

The pending consignment id is a unique identifier for a pending consignment, with no two pending consignments having the same id.

This id is useful to store if:

  • you are interacting with pending consignments via the API - all endpoints require this ID to update or delete a pending a consignment.
  • you are looking to trace the relationship betwen a consignment and it's originating pending consignment - consignments will reference their origin pending consignment id as a field on the consignment (linkedPendingIds)

Note, this id is not the same as a consignment ID, and if a pending consignment is turned into a consignment, the id will be different on the consignment than it was on the pending as they are different entities.

consignmentNumber - example: PC543210

The pending consignment consignmentNumber is the consignment ID with a PC prefix.

This is used to display in the MachShip UI.

CustomerReference - example: SO-12345

The first reference field on a consignment, that can be used to store any ID or value you require.

The field displays on most screens in MachShip, is searchable across the platform and shows in all reports and on most carrier labels.

Customer reference carries over to a consignment when it is created from a pending.

CustomerReference2 - example: PO-54321

The second reference field on a consignment, that can be used to store any ID or value you require.

Displays on some screens in MachShip, and all reports. Does not typically show on labels.

Customer reference 2 carries over to a consignment when it is created from a pending.

Consignments

id - example: 12345678

The consignment id is a unique number used to identify a consignment in our database. No two records would ever have the same id.

This id is useful when interacting with our API, as most endpoints for create, edit, update and manifest require this value.

consignmentNumber - example: MS12345678

The consignments id, with an MS prefix.

carrierConsignmentId - example: ACME1234567

The carrier consignment id is the unique identifier that an allocated carrier would use to reference this consignment once it has been manifested with them.

Carrier consignment ids are typically managed in MachShip on a per carrier account basis based on the carriers preference.

They are typically made up of a prefix for that account (ABC), and a carrier reference pull, or series of numbers such us 000000 to 999999.

The end outcome is a carrier consignment id like ABC000123.

Given multiple carriers could have the same prefix and carrier pools, it is possible, and not unusual for two different consignments to have the same Carrier Consignment Id.

In addition, some carriers do not have MachShip manage the carrier consignment id, and instead they are allocated to the consignment from the carrier programtically at the point the consignment is created.

trackingPageAccessToken - example: ji342oi3jcnoiew

The unique token is allocated to a consignment when it is created, and can be used to generate a unique tracking link for the consignment.

To generate a tracking url from this, you simply append it to our standard base URL https://mship.io/v2/.

For example, https://mship.io/v2/ji342oi3jcnoiew

Note, a carrier consignment ID cannot be used to generate a tracking page link, as they are not always unique across carriers in our system.

consignmentItemReferences - example: ACME12345670001

The consignment item references are the unique strings that are to be applied as barcodes on each label inside a consignment.

Typically consignment item references contain the carrier consignment id, followed by a count or increment for each label.

For example, a consignment (ACME1234567) with 3 items would need 3 labels, and the following consignment item references may be generated: ACME12345670001 ACME12345670002 ACME12345670003

Consignment item references tend to be generated by MachShip, provided MachShip is going to be generating the labels.

Clients that want to use SSCCs can apply them as the consignment item references during consignment creation via our API - provided the carrier can accept SSCCs or externally provided barcodes (not all do).

CustomerReference - example: SO-12345

The first reference field on a consignment, that can be used to store any ID or value you require.

The field displays on most screens in MachShip, is searchable across the platform and shows in all reports and on most carrier labels.

CustomerReference2 - example: PO-54321

The second reference field on a consignment, that can be used to store any ID or value you require.

Displays on some screens in MachShip, and all reports. Does not typically show on labels.

Items, Packages & Products

When creating a consignment in MachShip for either dispatch or pricing, MachShip requires the items (packages) that will be sent for that consignment in order to price it and select an appropriate carrier.

A consignment can have multiple items (packages) going to the same receiver on the same consignment, and one label is printed per item.

While a consignments items are occassionally the same as the products being shipped to a customer, it is not common, and generally products should not be mapped as items.

This is because when a customer orders multiple products, most customers tend to pack those products down into a satchel, carton or pallet prior to shipping.

When we refer to items in MachShip, we are talking about the final shippable items - not the contents of those packages, or the products being purchased.

It is the final shippable units weights and dimensions that affect the price and carrier service availability - and that is the information we need.

For example:

  • If someone purchased 5 shirts, and they were placed in a satchel/bag, we would need the weights and dimensions of that satchel
  • If someone ordered 3 air conditioners, and they were packaged onto a pallet, we would need the weights and dimensions of that pallet

The only time this is not the case is if your goods are pre-packaged, and sent as they are. This is common in a 3PL environment.

In that case, then the product package weights and dimensions are you shipping weights and dimensions.

Item Dimensions

All items (packages) in MachShip must be allocated a length, width and height in CM.

We cannot use volume as the basis for items as some carriers have length based surcharges, and service restrictions based on item dimensions.

If you are forced to use volume, please read this article here on best practice when converting that to package dimensions.

Item Type

Item type refers to the type of packaging that applies to this given item.

Common item types are Carton, Satchel, Pallet, Skid - but there are 30 plus item types available.

Item Quantity

When creating items, you need to specify how many of this item you are going to send - this is the item quantity.

If you have multiple items of the same size and type, you can simply increment this value to get an additional label for each item.

If you have multiple items of different types or sizes, they would be different lines with their own quantity.

For example, if you have the following items:

  • 50 x 50 x 50 x 5kg - Carton
  • 50 x 50 x 50 x 5kg - Carton
  • 25 x 25 x 25 x 3kg - Carton
  • 25 x 25 x 25 x 1kg - Carton

These could be applied as follows:

  • 50 x 50 x 50 x 5kg - Carton x 2
  • 25 x 25 x 25 x 3kg - Carton x 1
  • 25 x 25 x 25 x 1kg - Carton x 1

Item Contents

When creating a consignment in MachShip, and adding an item (package), you can specify the contents of that package as "Item Contents".

This set of fields allows you to specify the skus, names, quantity and dollar value of the products or goods inside that package.

When shipping internationally, these fields are requried for customs declaration. They are not required for domestic shipping.

Storing Item Master Data In MachShip

MachShip has an area that allows you to create, edit, upload and manage your commonly used package sizes.

In this area, you can create a record of the following information:

  • SKU
  • Name
  • Length
  • Width
  • Height
  • Weight
  • Qty
  • Item Type

Then, when creating a consignment, you can simply apply the SKU and a qty and it will prefill out the missing information.

These items can be used when interacting with the MachShip UI, and when creating consignments via our API.

It is common to use this area to store your most frequently used packages, and set the qty and weight values when creating a consignment.

For example, you could specify these in your item master:

  • CARTA - Carton Size A - 50 x 50 x 50 x 1kg - Carton
  • CARTB - Carton Size B - 25 x 25 x 25 x 1kg - Carton

You could then send a request to apply these items to your consignment as follows:

  • CARTA x 5kg x 2

And it would prefill the consignment as:

  • CARTA - Carton Size A - 50 x 50 x 50 x 5kg - Carton x 2

Documents & Labels

MachShip has several types of documents available in our platform that relate to consignments and manifests.

The most commonly used documents in our platform are:

  • Item labels - these are the individual package labels with the carrier barcodes on them
  • Manifest - a summary document containing a summary of all data on the consignments inside a manifest
  • Dangerous Goods - this is document containing key dangerous goods information that a carrier requires when sending dangerous goods.

Less commonly used documents in the platform include:

  • Consignment document - consignment containing information about the consignment, not used by majority of carriers
  • Special instructions - a special label containing only special instructions

Item labels are the most commonly interacted with via our API, and are available once a consignment is created as a multi-page PDF.

MachShip also has the ability to send the labels for a given consignment directly to a targetting printer using our printer application.

This avoids the requirement for you to get the labels from us, and send them to the printer yourself and is lower latency.

Key Terms

Here is a glossary of key terms you may read in this documentation and what they mean:

  • Organisation: The billable account in MachShip under which all companies exist.
  • Company: A business unit set up under an organisation's account in MachShip, existing in a tree structure.
  • Carrier: A shipping provider, for example, Australia Post.
  • Carrier Service: Different services offered by carriers for various types of freight with different delivery speeds.
  • Carrier Account: Contains details necessary for MachShip to create and price shipments with a specific carrier.
  • Company Carrier Account: A linkage that connects a carrier account to a specific company in MachShip.
  • Consignment: A finalised shipment with a carrier, service, packages, and a carrier consignment ID allocated.
  • Pending Consignment: A draft consignment that is partially completed and not yet allocated a carrier consignment ID.
  • Benign/Existing Consignment: A consignment created in MachShip purely for billing or tracking purposes, not passed to the carrier.
  • Manifesting: The process by which the carrier is notified about a consignment, and consignment IDs and label barcodes are sent to their system.
  • Item: In MachShip, this refers to the final shippable packages, not the individual products being shipped.
  • Item Type: The type of packaging that applies to a given item (e.g., Carton, Satchel, Pallet).
  • Item Contents: Specifies the SKUs, names, quantity, and dollar value of goods inside a package.
  • API Key: Created on users in MachShip, inheriting that user's company access, permissions, and test mode setting.
  • Tracking Page Access Token: A unique token allocated to a consignment used to generate a unique tracking link.
  • Quotes: In MachShip, you can generate a quote for a potential consignment and save the response - we refer to this saved consignment as a quote. A request where you want to get pricing back is referred to as a "routes request".
  • Routes Request: A request to determine available shipping options and their prices for a given shipment.