pyshipstation
pyshipstation copied to clipboard
API bindings for ShipStation in Python.
Shipstation API Python Bindings
This package provides API bindings for interacting with ShipStation via Python.
Connecting to ShipStation
shipstation 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)
Sending Orders to ShipStation
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();
ShipStationOrder
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)
Setting The Order Status
Order status is set using the set_status method.
ss_order.set_status('awaiting_shipment')
Setting Customer Details
Customer username and email can be set with the set_customer_deails method.
ss_order.set_customer_details(
username='foobar',
email='[email protected]'
)
Setting The Shipping and Billing Addresses
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)
Setting The Package Dimensions and Weight
Package dimensions are represented as a ShipStationContainer instance, and
set using the set_dimensions method.
container = ShipStationContainer(...)
ss_order.set_dimensions(container)
Adding Line Items
Line items are represented as a ShipStationItem instance, and are added
individually using the add_item method.
item = ShipStationItem(...)
ss_order.add_item(item)
ShipStationWeight
This corresponds to the Weight model in ShipStation, and accepts
units and value.
weight = ShipStationWeight(units='ounces', value=12)
ShipStationContainer
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)
ShipStationItem
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)
ShipStationCustomsItem
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'
)
ShipStationInternationalOptions
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
ShipStationAddress
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]'
)
Get existing ShipStation Orders
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.