Custom Store Development Guide

The Custom Store option in ShipStation allows a developer to build a custom connection for an order source that does not have a pre-built integration with ShipStation.

A Custom Store connection allows you to import orders into ShipStation in a single click and enables ShipStation to automatically send shipment status and tracking information updates back to your cart or marketplace once a label is created.

Requires Advanced Development Skills

Please note that the Custom Store requires advanced development skills to set up. Many ShipStation customers with those skills have used this documentation to integrate their Custom Stores from start to finish.

ShipStation's support for Custom Stores is limited, but if you do encounter errors during the setup process, our support team can provide additional insight so that you or your developer can take corrective action.

Getting Started

How the Custom Store Works

To integrate with the Custom Store, you must expose a Web Endpoint that returns XML according to the format in this guide.

The Web Endpoint will be used to handle two major requests:

  • GET: Allows ShipStation to pull order information from your Custom Store, including recipient address, products, customers, etc. 

  • POST: Allows ShipStation to post shipment information back to the store when an order is shipped, including shipping method, shipping status, tracking number, and more.

When your Web Endpoint is ready, you can then connect ShipStation to your store via the Custom Store connection option. Once connected, you can then import orders and send back shipment details.

Authentication

ShipStation uses Basic HTTP Authentication when calling your Web Endpoint. Use a Basic Authentication Header to pass the credentials.

Build Your Web Endpoint

To allow ShipStation access to your order source to GET and POST data, you must build your Custom Store endpoint to the specifications defined in this guide.

GET Call

ShipStation will make a GET API call to pull order information from the connected store. 

ShipStation will request order information from the Web Endpoint you expose. It must render XML that adheres to the specification defined in the following sections.

GET Endpoint URL

ShipStation will use the following URL format when requesting order information from the Web Endpoint you build:

[Your Web Endpoint]?action=export&start_date=[Start Date]&end_date=[End Date]&page=1 [Your Web Endpoint]?action=export&start_date=[Start Date]&end_date=[End Date]&page=1

GET call URL Parameters

URL Parameters

Description

action

This value will always be "export" when ShipStation is requesting order information.

start_date

The start date in UTC time. Format: MM/dd/yyyy HH:mm (24 hour notation).

For example: 03/23/2012 21:09

end_date

The end date in UTC time. Same format as start_date.

Your page should return data for any order modified between the start and end date, regardless of the order's status. The order data should be returned in an XML format as shown in the following example. All free text fields should be enclosed in a CDATA section to ensure no parsing errors.

A CDATA section starts with "<![CDATA[" and ends with "]]>".

Paging

For stores with hundreds or thousands of orders per day, we recommend paging your results. To do this, choose the maximum number of records to return with each reply. Then include the total number of pages as an attribute in the root-level Orders element.

On the first request to your endpoint, ShipStation will append a URL parameter called "page". For example:

https://www.yourstore.com/shipstationxml.php?action=export&start_date=01%2f23%2f2012+17%3a28&end_date=01%2f23%2f2012+17%3a33&page=1 

If the Orders node indicates that there are additional pages, ShipStation will then request subsequent pages until all orders have been retrieved.

Example GET Response Body

Below is an example of the XML response body that ShipStation expects when a GET call is made for order information. You can find detailed definitions of the fields in the Custom Store Reference Guide.

<?xml version="1.0" encoding="utf-8"?>
<Orders pages="1">
  <Order>
    <OrderID><![CDATA[123456]]></OrderID>
    <OrderNumber><![CDATA[ABC123]]></OrderNumber>
    <OrderDate>10/18/2019 21:56 PM</OrderDate>
    <OrderStatus><![CDATA[paid]]></OrderStatus>
    <LastModified>12/8/2011 12:56 PM</LastModified>
    <ShippingMethod><![CDATA[USPSPriorityMail]]></ShippingMethod>
    <PaymentMethod><![CDATA[Credit Card]]></PaymentMethod>
    <CurrencyCode>EUR</CurrencyCode> 
    <OrderTotal>123.45</OrderTotal>
    <TaxAmount>0.00</TaxAmount>
    <ShippingAmount>4.50</ShippingAmount>
    <CustomerNotes><![CDATA[Please make sure it gets here by Dec. 22nd!]]></CustomerNotes>
    <InternalNotes><![CDATA[Ship by December 18th via Priority Mail.]]></InternalNotes>
    <Gift>false</Gift>
    <GiftMessage></GiftMessage>
    <CustomField1></CustomField1>
    <CustomField2></CustomField2>
    <CustomField3></CustomField3>
    <Customer>
      <CustomerCode><![CDATA[customer@mystore.com]]></CustomerCode>
      <BillTo>
        <Name><![CDATA[The President]]></Name>
        <Company><![CDATA[US Govt]]></Company>
        <Phone><![CDATA[512-555-5555]]></Phone>
        <Email><![CDATA[customer@mystore.com]]></Email>
      </BillTo>
      <ShipTo>
        <Name><![CDATA[The President]]></Name>
        <Company><![CDATA[US Govt]]></Company>
        <Address1><![CDATA[1600 Pennsylvania Ave]]></Address1>
        <Address2></Address2>
        <City><![CDATA[Washington]]></City>
        <State><![CDATA[DC]]></State>
        <PostalCode><![CDATA[20500]]></PostalCode>
        <Country><![CDATA[US]]></Country>
        <Phone><![CDATA[512-555-5555]]></Phone>
      </ShipTo>
    </Customer>
    <Items>
      <Item>
        <SKU><![CDATA[FD88821]]></SKU>
        <Name><![CDATA[My Product Name]]></Name>
        <ImageUrl><![CDATA[http://www.mystore.com/products/12345.jpg]]></ImageUrl>
        <Weight>8</Weight>
        <WeightUnits>Ounces</WeightUnits>
        <Quantity>2</Quantity>
        <UnitPrice>13.99</UnitPrice>
        <Location><![CDATA[A1-B2]]></Location>
        <Options>
          <Option>
            <Name><![CDATA[Size]]></Name>
            <Value><![CDATA[Large]]></Value>
            <Weight>10</Weight>
          </Option>
          <Option>
            <Name><![CDATA[Color]]></Name>
            <Value><![CDATA[Green]]></Value>
            <Weight>5</Weight>
          </Option>
        </Options>
      </Item>
      <Item>
        <SKU></SKU>
        <Name><![CDATA[$10 OFF]]></Name>
        <Quantity>1</Quantity>
        <UnitPrice>-10.00</UnitPrice>
        <Adjustment>true</Adjustment>
      </Item>
    </Items>
  </Order>
</Orders>

POST Call

The POST call allows ShipStation to post shipment information back to your order source when you ship orders.

ShipStation will contact the same Web Endpoint when an order is shipped so your system can be notified that the order has been shipped. ShipStation takes an action called shipNotify when sending this notification. Your Web Endpoint should be able to determine when ShipStation is requesting order information (action = export) and when it is sending a shipping notification (action = shipnotify).

Your Web Endpoint should return a 200 (or 2xx) HTTP status code to indicate that the tracking information was received successfully.

POST Endpoint URL

ShipStation will use the following URL format when sending shipment and tracking information to the Web Endpoint you build:

[Your Web Endpoint]?action=shipnotify&order_number=[Order Number]&carrier=[Carrier]&service=&tracking_number=[Tracking Number]

For example:

https://www.yourstore.com/shipstationxml.php?action=shipnotify&order_number=ABC123&carrier=USPS&service=&tracking_number=9511343223432432432

Here is a description of each URL parameter:

Parameter

Description

action

The value will always be "shipnotify" when sending shipping notifications.

order_number

This is the order's unique identifier.

carrier

Supported API codes for available carriers:

Carrier

API Code

99minutos

n9minutos

Access Worldwide

access_worldwide

Airtanss

airtranss

Angel Last Mile

angel_last_mile

APC

apc

Aramex Australia

fastway_au

Aramex AU by ShipStation

aramex_au_walleted

Aramex New Zealand

fastway_nz

Asendia

asendia

Australia Post

australia_post

Australia Post eParcel

australia_post

Australia Post MyPost Business

australia_post_mypost_business

B2C Europe

b2c_europe

Better Trucks

better_trucks

Canada Post

canada_post

Canada Post from ShipStation

canada_post_walleted

Canpar

canpar

Canpar from ShipStation

canpar_walleted

Castle Parcels

castle_parcels

Chronopost

chronopost

Colis Prive

colis_prive

Colissimo

colissimo

Colissimo from ShipStation

colissimo_walleted

CouriersPlease

couriers_please

CouriersPlease by ShipStation

couriersplease_walleted

DAI

dai

Delivengo

delivengo

Deutsche Post Cross-Border

deutsche_post_cross_border

Deutsche Post DHL

deutsche_post_dhl

DHL eCommerce

dhl_global_mail

DHL eCommerce v2

dhl_ecommerce

DHL Express

dhl_express

DHL Express Australia

dhl_express_australia

DHL Express Canada

dhl_express_canada

DHL Express Germany from ShipStation

dhl_express_de_walleted

DHL Express UK

dhl_express_uk

Direct Freight

direct_freight

Direct Link

direct_link

DPD

dpd

DPD France

dpd_france

DPD Germany

dpd_germany

DPD Germany from ShipStation

dpd_germany_walleted

DPD Ireland

dpd_ireland

DPD Local

apicode-dpd-local

DPD Netherlands

dpd_netherlands

DPD Romania

dpd_romania

DX

dx

ECMS Standard Express

ecms

Endicia

endicia

Envialia

envialia

ePost Global

rr_donnelley

Estafeta

estafeta

Evri Worldwide

evri_international

Evri from ShipStation

hermes

Evri UK

hermescorp

Express 1

express_1

Fairsenden

fairsenden

FAN

fan

Fastway AU

fastway_au

Fastway NZ

fastway_nz

FedEx

fedex

FedEx UK

fedex_uk

FirstMile

firstmile

FlashBox

flashbox

GlobalPost

global_post

Globegistics

globegistics

Glocally

glocally

GLS Canada

gls_canada

GLS Germany

gls_germany

GLS Germany from ShipStation

gls_germany_walleted

Grupo ampm

grupo_ampm

Hermes

hermes

Hermes Germany

hermes_germany

IMEX

imex

InPost

inpost

Intelcom CA

intelcom_ca

IntelliQuick Delivery

intelliquick_delivery

International Bridge

international_bridge

Landmark Global

landmark_global

Landmark Global

landmark_global_ca

Lasership

lasership

Lettre Suivie (La Poste)

lettre_suivie

Loomis Express

loomis_express

LSO

lso

Mercado Libre Shipping

mercado_libre_shipping

Metroland Parcel Services (MPS)

metroland

Mondial Relay

mondial_relay

Nationex

nationex

New Zealand CourierPost

courierpost

New Zealand Couriers

new_zealand_couriers

NZ Post Domestic

courierpost

NZ Post International

new_zealand_post_international

Newgistics

newgistics

Nova Poshta

nova_poshta

NOW Couriers

NOW Couriers

OnTrac

ontrac

Parcelforce

parcelforce

Parcll

parcll

Post Haste

post_haste

Posta Slovenije

posta_slovenije

Poste Italiane

poste_italiane

Purolator Canada

purolator_ca

Purolator from ShipStation

purolator_walleted

Quantium

quantium

Red je Pakketje

red_je_pakketje

Rivo

rivo

Royal Mail

royal_mail

RR Donnelley

rr_donnelley

SEKO LTL by ShipStation

seko_ltl_walleted

SEKO Omni-Channel Logistics

seko

SEKO Omni-Channel Logistics CA

seko_ca

SEKO Omni-Channel Logistics US

seko_us

Sendle

sendle

Seven Senders

seven_senders

Shippie

shippie

StarTrack

star_track

Swyft

swyft

The Delivery Group UK

the_delivery_group_uk

TNT Australia

tnt_australia

TNT UK

tnt_uk

Toll IPEC

toll_ipec

Toll Priority

toll_priority

Tusk

tusk

UPS

ups

UPS Mail Innovations

ups_mail_innovations

Urb-it

urb_it

USPS

usps

Via Delivery

via_delivery

Whistl

whistl

Wizmo

wizmo

Yodel

yodel

service

This will be the name of the shipping service that was used to ship the order.

tracking_number

This is the tracking number for the package.

Example POST Request Body

Below is an example of the XML request body that will be included when ShipStation makes a POST call for a shipment notification. You can find detailed definitions of the fields in the Custom Store Reference Guide.

<?xml version="1.0" encoding="utf-8"?>
<ShipNotice>
  <OrderNumber>ABC123</OrderNumber>
  <OrderID>123456</OrderID>
  <CustomerCode>customer@mystore.com</CustomerCode>
  <CustomerNotes></CustomerNotes>
  <InternalNotes></InternalNotes>
  <NotesToCustomer></NotesToCustomer>
  <NotifyCustomer></NotifyCustomer>
  <LabelCreateDate>10/19/2019 12:56</LabelCreateDate>
  <ShipDate>10/19/2019</ShipDate>
  <Carrier>USPS</Carrier>
  <Service>Priority Mail</Service>
  <TrackingNumber>1Z909084330298430820</TrackingNumber>
  <ShippingCost>4.95</ShippingCost>
  <CustomField1></CustomField1>
  <CustomField2></CustomField2>
  <CustomField3></CustomField3>
  <Recipient>
    <Name>The President</Name>
    <Company>US Govt</Company>
    <Address1>1600 Pennsylvania Ave</Address1>
    <Address2></Address2>
    <City>Washington</City>
    <State>DC</State>
    <PostalCode>20500</PostalCode>
    <Country>US</Country>
  </Recipient>
  <Items>
    <Item>
      <SKU>FD88821</SKU>
      <Name>My Product Name</Name>
      <Quantity>2</Quantity>
      <LineItemID>25590</LineItemID>
    </Item>
  </Items>
</ShipNotice> 

Connect to ShipStation

Connecting a custom store to ShipStation works the same way as adding any other direct store integration. See the detailed instructions below.

Add a Custom Store as a Selling Channel

To connect your custom store to ShipStation:

  1. Choose the Custom Store option.

    ShipStation Custom Store connection tile
  2. Enter the requested information into the form and test your connection using the Test Connection button.

    The table below provides details about the form fields in the connection window:

    Field

    Description

    URL to custom CML Page

    This is the location of your Web Endpoint. HTTPS recommended.

    Unpaid Status

    This is the name of the status in your system that indicates an order is not yet paid for and not yet ready to be shipped.

    Multiple statuses may be separated by a comma.

    Paid Status

    This is the name of the status in your system that indicates an order is paid and ready to ship.

    Shipped Status

    This is the name of the status in your system that indicates an order is shipped.

    Cancelled Status

    This is the name of the status in your system that indicates an order is cancelled.

    On-Hold Status

    This is the name of the status in your system that indicates an order is on hold.

The status fields map your order statuses to ShipStation's order statuses. This determines where orders will import to in ShipStation. These fields are case-sensitive.

Once the connection is complete, ShipStation will begin communicating with your Web Endpoint to obtain order information.

Import Orders from the Custom Store

ShipStation requests order information from your Web Endpoint using a GET call.

ShipStation users can trigger store updates manually by hovering over the import icon Import icon, or Refresh-stores icon. Grey circular arrow symbol (clockwise), inside of a black square and opting to update all stores or individual stores.

Additionally, users can enable an auto-update feature so that ShipStation periodically imports a store's orders automatically. The auto-update frequency depends the user's history of manual updates and several other factors.

Send Shipment Notifications

By default, ShipStation uses a POST call to post shipment notifications to your Web Endpoint whenever a label is created in ShipStation.

These notifications can be delayed, if the user prefers, by setting the Notification options in the Custom Store Settings window.

If the ShipStation user creates labels outside of ShipStation, the user can choose the Mark as Shipped action within ShipStation, which will move the order to the Shipped status in ShipStation and also post a shipment notification to your Web Endpoint.

Custom Store Reference Guide

This section includes Order Information and ShipNotify field definitions and the XML Schema for validating order information.

Order Information Field Definitions

* Indicates required fields

Name

XPath

Max Allowed

Type

Length

Description

Orders *

Orders

1

Container

n/a

Root node

Order *

Orders/Order

Unlimited

Container

n/a

Container node for an individual order

OrderID *

Orders/Order/OrderID

1 per Order

String

n/a

Unique identifier for an order. Not displayed to anyone.

OrderNumber *

Orders/Order/OrderNumber

1 per Order

String

1...50

User-visible order number. This value can be the same as the OrderID.

OrderDate *

Orders/Order/OrderDate

1 per Order

Date/time

16

The date the order was placed. Format: MM/dd/yyyy HH:mm. Both 12 and 24 hour notation are allowed. Default is UTC if no time zone specified.

OrderStatus *

Orders/Order/OrderStatus

1 per Order

String

1---50

The status of the order in your system. You will be able to map this status to a ShipStation status when connecting your Web Endpoint as a Selling Channel within ShipStation.

LastModified *

Orders/Order/LastModified

1 per Order

Date/time

16

The last time the order was modified in your system. Format: MM/dd/yyyy HH:mm. Default is UTC if no time zone specified.

ShippingMethod

Orders/Order/ShippingMethod

1 per Order

String

0...100

Recommended if you know the shipping method that will be used to ship the order. ShipStation can map your shipping methods to actual services.

PaymentMethod

Orders/Order/PaymentMethod

1 per Order

String

0...50

Order payment method (e.g. PayPal, Check, Money Order)

CurrencyCode

Orders/Order/CurrencyCode

1 per Order

String

3

Must be ISO 4217 currency code (USD, EUR, etc)

OrderTotal *

Orders/Order/OrderTotal

1 per Order

Decimal

9,2 (Precision, Scale)

Total amount of the order. (Nine total digits, up to 7 digits before the decimal point, and up to 2 after.)

TaxAmount

Orders/Order/TaxAmount

1 per Order

Decimal

9,2

Tax amount, if any.

ShippingAmount *

Orders/Order/ShippingAmount

1 per Order

Decimal

9,2

Shipping amount.

CustomerNotes

Orders/Order/CustomerNotes

1 per Order

String

0...1000

Notes left by the customer when placing the order.

InternalNotes

Orders/Order/InternalNotes

1 per Order

String

0...1000

Private notes that are only viewed by your company.

Gift

Orders/Order/Gift

1 per Order

Bool

"true" if this order is a gift

GiftMessage

Orders/Order/GiftMessage

1 per Order

String

0...1000

Contains the customer's gift message.

CustomField1

Orders/Order/CustomField1

1 per Order

String

0...100

Custom field that will show up in ShipStation's Orders grid. Can also be used in the criteria for ShipStation's filters and automation rules.

CustomField2

Orders/Order/CustomField2

1 per Order

String

0...100

Custom Field 2

CustomField3

Orders/Order/CustomField3

1 per Order

String

0...100

Custom Field 3

RequestedWarehouse

Orders/Order/RequestedWarehouse

1 per Order

String

0...100

Ship From Location (must match Name)

Source

Orders/Order/Source

1 per Order

String

0...50

Order source (e.g. eBay, US, Amazon, Buy.com)

Customer *

Orders/Order/Customer

1 per Order

Container

n/a

Container node for the customer's information.

CustomerCode *

Orders/Order/Customer/CustomerCode

1 per Order

String

1...50

A unique identifier of the customer in your system. This is often a username or email address.

BillTo *

Orders?Order/Customer/BillTo

1 per Order

Container

n/a

Container node for the customer's billing information.

Name *

Orders/Order/Customer/BillTo/Name

1 per Order

String

1...100

The billing name.

Company

Orders/Order/Customer/BillTo/Company

1 per Order

String

1...100

The billing company.

Phone

Orders/Order/Customer/BillTo/Phone

1 per Order

String

0...50

The billing phone.

Email

Orders/Order/Customer/BillTo/Email

1 per Order

String

0...100

Recommended so that ShipStation can notify the buyer when an order ships.

ShipTo *

Orders/Order/Customer/ShipTo

1 per Order

Container

n/a

Container node for the customer's shipping information.

Name *

Orders/Order/Customer/ShipTo/Name

1 per Order

String

1...100

Recipient's name.

Company

Orders/Order/Customer/ShipTo/Company

1 per Order

String

1...100

Recipient's company.

Address1 *

Orders/Order/Customer/ShipTo/Address1

1 per Order

String

1...200

Recipient's address line 1.

Address2

Orders/Order/Customer/ShipTo/Address2

1 per Order

String

1...200

Recipient's address line 2.

City *

Orders/Order/Customer/ShipTo/City

1 per Order

String

1...100

Recipient's city.

State *

Orders/Order/Customer/ShipTo/State

1 per Order

String

2...100

US and Canadian addresses require the 2 character state/territory code.

PostalCode *

Orders/Order/Customer/ShipTo/PostalCode

1 per Order

String

0...50

Required for domestic addresses and many international addresses.

Country *

Orders/Order/Customer/ShipTo/Country

1 per Order

String

2

2-character ISO 3116-1 country code.

Phone

Orders/Order/Customer/ShipTo/Phone

1 per Order

String

0...50

Required in some cases (e.g. overnight or international shipping). No specific format.

Items *

Orders/Order/Items

1 per Order

Container

Container node for the order's items.

Item

Orders/Order/Items/Item

Unlimited

Container

Container node for an individual order line item.

LineItemID

Orders/Order/Items/Item/LineItemID

1 per Item

String

1...50

Unique identifier for the line item.

SKU *

Orders/Order/Items/Item/SKU

1 per Item

String

1...50

Unique identifier for the product that was ordered.

Name *

Orders/Order/Items/Item/Name

1 per Item

String

1...200

Name of the product

ImageUrl

Orders/Order/Items/Item/ImageUrl

1 per Item

String

0...500

URL for the product's image

Weight

Orders/Order/Items/Item/Weight

1 per Item

Decimal

9,2

Weight of a single line item.

WeightUnits

Orders/Order/Items/Item/WeightUnits

1 per Item

Enum

Value should be one of the following: Pounds, Ounces, Grams

Quantity *

Orders/Order/Items/Item/Quantity

1 per Item

Integer

1...99999

Quantity of items ordered.

UnitPrice *

Orders/Order/Items/Item/UnitPrice

1 per Item

Decimal

9,2

Price of a single item.

Location

Orders/Order/Items/Item/Location

1 per Item

String

0...100

Location of the product in the Warehouse

Adjustment

Orders/Order/Items/Item/Adjustment

1 per Item

Bool

"true" if the line item represents a coupon, discount, or other adjustment. Note that any line item that is an adjustment must have a negative "UnitPrice" value.

Options

Orders/Order/Items/Item/Options

1 per Item

Container

Container note for item options (e.g. color, size, etc.)

Option

Orders/Order/Items/Item/Options/Option

10 per Item

Container

Container node for an individual option value.

Name *

Orders/Order/Items/Item/Options/Option/Name

1 per Option

String

1...100

The name of the option (e.g. Size).

Value *

Orders/Order/Items/Item/Options/Option/Value

1 per Option

String

1...100

The value of the option (e.g. XL).

Weight

Orders/Order/Items/Item/Options/Option/Weight

1 per Option

Decimal

9 (with 2 decimal precision)

If the option adds to the item weight, you may specify the additional weight here. This should be in the same units specified in WeightUnits. It should be the additional weight for a single quantity.

XML Schema for Validating Order Information

The Order XML will be validated against the following schema:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="Orders">  
  <xs:complexType>
   <xs:sequence>
    <xs:element name="Order" maxOccurs="unbounded" minOccurs="0">
     <xs:complexType>
      <xs:all>
       <xs:element type="String50" name="OrderID" minOccurs="0"/>
       <xs:element type="String50" name="OrderNumber"/>
       <xs:element type="DateTime" name="OrderDate"/>
       <xs:element type="String50" name="OrderStatus"/>
       <xs:element type="DateTime" name="LastModified"/>
       <xs:element type="String100" name="ShippingMethod" minOccurs="0"/>
       <xs:element type="String50" name="PaymentMethod" minOccurs="0"/>
       <xs:element type="xs:decimal" name="OrderTotal"/>
       <xs:element type="xs:decimal" name="TaxAmount" minOccurs="0"/>
       <xs:element type="xs:decimal" name="ShippingAmount" minOccurs="0"/>
       <xs:element type="String1000" name="CustomerNotes" minOccurs="0"/>
       <xs:element type="String1000" name="InternalNotes" minOccurs="0"/>
       <xs:element type="xs:boolean" name="Gift" minOccurs="0"/>
       <xs:element type="String1000" name="GiftMessage" minOccurs="0"/>
       <xs:element type="String100" name="CustomField1" minOccurs="0"/> 
       <xs:element type="String100" name="CustomField2" minOccurs="0"/>
       <xs:element type="String100" name="CustomField3" minOccurs="0"/>
       <xs:element type="String100" name="RequestedWarehouse" minOccurs="0"/>
       <xs:element type="String50" name="Source" minOccurs="0" />
       <xs:element name="Customer">   
         <xs:complexType>
          <xs:all>
           <xs:element type="String100" name="CustomerCode"/>
           <xs:element name="BillTo">
             <xs:complexType>
              <xs:all>
               <xs:element type="String100" name="Name"/>
               <xs:element type="String100" name="Company" minOccurs="0"/>
               <xs:element type="String50" name="Phone" minOccurs="0"/>
               <xs:element type="Email" name="Email" minOccurs="0"/>
               <xs:element type="String200" name="Address1" minOccurs="0"/>
               <xs:element type="String200" name="Address2" minOccurs="0"/>
               <xs:element type="String100" name="City" minOccurs="0"/>
               <xs:element type="String100" name="State" minOccurs="0"/>
               <xs:element type="String50" name="PostalCode" minOccurs="0"/>
               <xs:element type="StringExactly2" name="Country" minOccurs="0"/>
              </xs:all>
             </xs:complexType>
           </xs:element>
           <xs:element name="ShipTo">
            <xs:complexType>
              <xs:all>
               <xs:element type="String100" name="Name"/>
               <xs:element type="String100" name="Company" minOccurs="0"/>
               <xs:element type="String200" name="Address1"/>
               <xs:element type="String200" name="Address2" minOccurs="0"/>
               <xs:element type="String100" name="City"/>
               <xs:element type="String100" name="State" minOccurs="0"/>
               <xs:element type="String50" name="PostalCode" minOccurs="1"/>
               <xs:element type="StringExactly2" name="Country"/>
               <xs:element type="String50" name="Phone" minOccurs="0"/>
            </xs:all>
           </xs:complexType>
          </xs:element>
         </xs:all>
        </xs:complexType>
       </xs:element>
       <xs:element name="Items">
        <xs:complexType>
          <xs:sequence>
           <xs:element name="Item" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>
              <xs:all>
               <xs:element type="String50" name="LineItemID" minOccurs="0"/>
               <xs:element type="String100" name="SKU"/>
               <xs:element type="String200" name="Name"/>
               <xs:element type="xs:boolean" name="Adjustment" minOccurs="0"/>
               <xs:element type="xs:anyURI" name="ImageUrl" minOccurs="0"/>
               <xs:element type="xs:decimal" name="Weight" minOccurs="0"/>
               <xs:element name="WeightUnits" minOccurs="0">
               <xs:simpleType>
               <xs:restriction base="xs:string">
               <xs:patternvalue="pound|pounds|lb|lbs|gram|grams|gm|oz|ounces|Pound|Pounds|Lb|Lbs|Gram|Grams|Gm|Oz|Ounces|POUND|POUNDS|LB|LBS|GRAM|GRAMS|GM|OZ|OUNCES"/>
              </xs:restriction>
             </xs:simpleType>
            </xs:element>
            <xs:element type="xs:int" name="Quantity"/>
            <xs:element type="xs:decimal" name="UnitPrice"/>
            <xs:element type="String100" name="Location" minOccurs="0"/>
            <xs:element name="Options" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Option" maxOccurs="100" minOccurs="0">
                    <xs:complexType>
                      <xs:all>
                        <xs:element type="String100" name="Name"/>
                        <xs:element type="String100" name="Value"/>
                        <xs:element type="xs:decimal" name="Weight" minOccurs="0"/>
                     </xs:all>
                    </xs:complexType>
                   </xs:element>
                 </xs:sequence>
                </xs:complexType>
               </xs:element>
              </xs:all>
             </xs:complexType>
            </xs:element>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
        </xs:all>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
     <xs:attribute type="xs:short" name="pages"/>
    </xs:complexType>
   </xs:element>
   <xs:simpleType name="DateTime">  
    <xs:restriction base="xs:string">
     <xs:pattern value="[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9][0-9]?[0-9]? [0-9][0-9]?:[0-9][0-9]?:?[0-9]?[0-9]?. ?[aApP]?[mM]?"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="Email">
  <xs:restriction base="xs:string">
  </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="StringExactly2">
   <xs:restriction base="xs:string">
    <xs:minLength value="2"/>
    <xs:maxLength value="2"/>
   </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String30">
    <xs:restriction base="xs:string">
      <xs:maxLength value="30"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String50">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String100">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String200">
    <xs:restriction base="xs:string">
      <xs:maxLength value="200"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String1000">
    <xs:restriction base="xs:string">
      <xs:maxLength value="1000"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

ShipNotify Field Definitions

Name

XPath

Max Occurrence

Type

Length

Description

ShipNotice

ShipNotice

1

Container

n/a

Root Node

OrderID

ShipNotice/OrderID

1

String

1...50

Unique identifier for an order

OrderNumber

ShipNotice/OrderNumber

1

String

1...50

User-visible order identifier.

CustomerCode

ShipNotice/CustomerCode

1

String

1...50

A unique identifier of the customer in your system. This is often a username or email address.

CustomerNotes

ShipNotice/CustomerNotes

1

String

0...1000

Notes left by the customer when placing the order.

InternalNotes

ShipNotice/InternalNotes

1

String

0...1000

Private notes that are only viewed by your company.

NotesToCustomer

ShipNotice/NotesToCustomer

1

String

0...1000

Public notes to be communicated to the customer.

NotifyCustomer

ShipNotice/NotifyCustomer

1

Bool

If ShipStation send the customer a shipment notification email, this value will be "false".

LabelCreateDate

ShipNotice/LabelCreateDate

1

Date/time

The date the shipping label was created. UTC time. Format: MM/dd/yyyy HH:MM.

ShipDate

ShipNotice/ShipDate

1

Date

The date the package will be shipped.

Carrier

ShipNotice/Carrier

1

String

0...50

The shipping carrier used (USPS, UPS, FedEx)

Service

ShipNotice/Service

1

String

0...50

The shipping service used.

TrackingNumber

ShipNotice/TrackingNumber

1

String

0...50

The package's tracking number.

ShippingCost

ShipNotice/ShippingCost

1

Decimal

9,2

The cost to ship the package.

Recipient

ShipNotice/Recipient

1

Container

n/a

Container node for the recipient's address.

Name

ShipNotice/Recipient/Name

1

String

1...100

Recipient's name.

Company

ShipNotice/Recipient/Company

1

String

0...100

Recipient's company.

Address1

ShipNotice/Recipient/Address1

1

String

1...200

Recipient's address line 1.

Address2

ShipNotice/Recipient/Address2

1

String

1...200

Recipient's address line 2.

City

ShipNotice/Recipient/City

1

String

0...100

Recipient's city.

State

ShipNotice/Recipient/State

1

String

US and Canadian addresses require the 2 character state/territory code.

PostalCode

ShipNotice/Recipient/PostalCode

1

String

0...50

Required for domestic addresses and many international addresses.

Country

ShipNotice/Recipient/Country

1

String

2

2-character country code.

Items

ShipNotice/Items

1

Container

Container node for the shipment's items.

Item

ShipNotice/Items/Item

Unlimited

Container

Container node for an individual shipment line item.

LineItemID

ShipNotice/Items/Item/LineItemID

1 per Item

String

1...50

Unique identifier for the line item.

SKU

ShipNotice/Items/Item/SKU

1 per Item

String

1...100

Unique identifier for the product that was shipped.

Name

ShipNotice/Items/Item/Name

1 per Item

String

1...200

Name of the product.

Quantity

ShipNotice/Items/Item/Quantity

1 per Item

Integer

1...99999

Quantity of items shipped.