This package provides the basic API bindings for interacting with ShipStation via Python.
pyshipstation provides the class ShipStation
to instantiate a new connection
to ShipStation.
from shipstation.api import *
api_key = '[your key]'
api_secret = '[your secret]'
ss = ShipStation(key=api_key, secret=api_secret)
Once you have a ShipStation
object and a ShipStationOrder
ready, you can
send the order to the ShipStation API like so:
ss.add_order(...)
ss.submit_orders();
Orders can be provided using the ShipStationOrder
class.
The constructor accepts both order_key
and order_number
, but in practice
only order_number
is actually required. ShipStation will generate a unique
key for you on submission.
id = '[a reference number]'
ss_order = ShipStationOrder(order_number=id)
Order status is set using the set_status
method.
ss_order.set_status('awaiting_shipment')
Customer username and email can be set with the set_customer_deails
method.
ss_order.set_customer_details(
username='foobar',
email='[email protected]'
)
Addresses are represented as a ShipStationAddress
instance, and set
using the set_shipping_address
or set_billing_address
method.
shipping_address = ShipStationAddress(...)
billing_address = ShipStationAddress(...)
ss_order.set_shipping_address(shipping_address)
ss_order.set_billing_address(billing_address)
Package dimensions are represented as a ShipStationContainer
instance, and
set using the set_dimensions
method.
container = ShipStationContainer(...)
ss_order.set_dimensions(container)
Line items are represented as a ShipStationItem
instance, and are added
individually using the add_item
method.
item = ShipStationItem(...)
ss_order.add_item(item)
This corresponds to the Weight model in ShipStation, and accepts
units
and value
.
weight = ShipStationWeight(units='ounces', value=12)
This corresponds to the Dimensions model in ShipStation.
Weight is represented as a ShipStationWeight
instance and added via the
set_weight
method.
weight = ShipStationWeight(...)
ss_container = ShipStationContainer(
units='inches',
length=5,
width=5,
height=5
)
ss_container.set_weight(weight)
This corresponds to the Product model in ShipStation.
Weight is represented as a ShipStationWeight
instance and added via the
set_weight
method.
weight = ShipStationWeight(...)
ss_item = ShipStationItem(
sku='[your sku]',
name='[item name]',
image_url='[item image url]',
quantity=1,
unit_price=10
)
ss_item.set_weight(weight)
This corresponds to the CustomsItem model in ShipStation.
ss_customs_item = ShipStationCustomsItem(
description='Satan\'s horns',
quantity=1,
value=Decimal('10'),
harmonized_tariff_code='tariff code',
country_of_origin='US'
)
This corresponds to the InternationalOptions model in ShipStation.
customs_item
objects are represented as ShipStationCustomsItem
instances and added via the add_customs_item
method.
customs_item = ShipStationCustomsItem(...)
ss_intl_options = ShipStationInternationalOptions(
contents='merchandise',
non_delivery='return_to_sender'
)
ss_intl_options.add_customs_item(customs_item)
ss_order.set_international_options(ss_intl_options)
contents
can be one of:
- merchandise
- documents
- gift
- returned_goods
- sample
delivery_options
can be one of:
- return_to_sender
- treat_as_abandoned
This corresponds to the Address model in ShipStation
ss_shipping_address = ShipStationAddress(
name='[customer name]',
street1='[street line 1]',
street2='[street line 2]',
street3='[street line 3]',
city='[city]',
state='[state]',
postal_code=['zip code'],
country='[two letter country code]'
)
You can get existing orders from ShipStation with parameter filtering, and do what you wish with the Response object returned.
response = ss.fetch_orders()
The allowed filter list is:
customer_name,
item_keyword,
create_date_start,
create_date_end,
modify_date_start,
modify_date_end,
order_date_start,
order_date_end,
order_number,
order_status,
payment_date_start,
payment_date_end,
store_id,
sort_by,
sort_dir,
page,
page_size.
Syntax for using a filter:
response = ss.fetch_orders(parameters_dict={'order_status': 'shipped', 'page': '2'})
The Response object has some handy methods and attributes. For example, you can get the output in a text form with response.text
, or in JSON with response.json()
. Please refer to (Requests' documentation)[https://2.python-requests.org/en/master/user/quickstart/#response-content] for more details.