Async Python wrapper for the ShipStation API
Project description
ShipStation Interaction / Automation
Simple API for ShipStation.
Install
pip
pip install AsyncShipStation
Manual
git clone git@github.com:sudoDeVinci/AsyncShipStation.git
cd AsyncShipStation
pip install -r requirements.txt
Setup
Create a .env file to store your key.
API_KEY=your_api_key
Client Lifecycle
The library uses a shared httpx.AsyncClient under the hood. You have two options for managing it:
Option 1: Let it auto-start (simple)
The client starts automatically on first request. Just remember to close it when done:
import asyncio
import os
from dotenv import load_dotenv
from AsyncShipStation import ShipStationClient, InventoryPortal
load_dotenv()
API_KEY: str | None = os.getenv("API_KEY")
async def main() -> None:
ShipStationClient.configure(api_key=API_KEY)
# Connection pool starts on first request
status, warehouses = await InventoryPortal.list_warehouses(page_size=10)
print(f"Status: {status}, Warehouses: {warehouses}")
...
# Clean up when done
await ShipStationClient.close()
if __name__ == "__main__":
asyncio.run(main())
Option 2: Use the async context manager (recommended)
Scoped usage where you want automatic cleanup:
import asyncio
import os
from dotenv import load_dotenv
from AsyncShipStation import ShipStationClient, InventoryPortal
load_dotenv()
API_KEY: str | None = os.getenv("API_KEY")
async def main() -> None:
ShipStationClient.configure(api_key=API_KEY)
async with InventoryPortal.scoped_client() as _:
status, warehouses = await InventoryPortal.list_warehouses(page_size=10)
print(f"Status: {status}, Warehouses: {warehouses}")
...
# Client closes automatically when exiting the context
if __name__ == "__main__":
asyncio.run(main())
Concurrent Requests
The client uses connection pooling, so concurrent requests share connections efficiently:
import asyncio
from AsyncShipStation import (
BatchPortal,
InventoryPortal,
LabelPortal,
ShipStationClient,
)
...
ShipStationClient.configure(api_key=API_KEY)
async with ShipStationClient.scoped_client() as _:
results = await asyncio.gather(
InventoryPortal.list_warehouses(),
InventoryPortal.list(),
BatchPortal.list(),
LabelPortal.list(),
)
for status, data in results:
if status in (200, 207, 201):
print(f"Success :: {data}")
else:
print(f"Error :: {data}")
...
Rate Limiting
Accounts that send too many requests in quick succession will receive a 429 Too Many Requests error response and include a Retry-After header with the number of seconds to wait for. By default we get 200 requests per minute. ShipStation has bulk op endpoints. These only count as a single request.
Endpoints
/batches Process labels in bulk and receive a large number of labels and customs forms in bulk responses. Batching is ideal for workflows that need to process hundreds or thousands of labels quickly. 200
/carriers Retreive useful details about the carriers connected to your accounts, including carrier IDs, service IDs, advanced options, and available carrier package types.
/fulfillments Manage fulfillments which represent completed shipments. Create fulfillments to mark orders as shipped with tracking information and notify customers and marketplaces.
/inventory Manage inventory, adjust quantities, and handle warehouses and locations.
/labels Purchase and print shipping labels for any carrier active on your account. The labels endpoint also supports creating return labels, voiding labels, and getting label details like tracking.
/manifests A manifest is a document that provides a list of the day's shipments. It typically contains a barcode that allows the pickup driver to scan a single document to register all shipments, rather than scanning each shipment individually.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asyncshipstation-0.1.0.6.tar.gz.
File metadata
- Download URL: asyncshipstation-0.1.0.6.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97cf0d8fa89a2b15aa26f822a2b0584b5215ca395a392ff96ecc4264375ec5b0
|
|
| MD5 |
359528ed182d7b4065ecb141c54cb4fd
|
|
| BLAKE2b-256 |
0961af25dd23ae8c53eca7b6b9e36a93269278beb4dfe8562557994808407794
|
File details
Details for the file asyncshipstation-0.1.0.6-py3-none-any.whl.
File metadata
- Download URL: asyncshipstation-0.1.0.6-py3-none-any.whl
- Upload date:
- Size: 38.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
063d4c543e567183bcf7ba87bc8d523c6e82a5bc8ce40fcca91e1c5c99c52eb4
|
|
| MD5 |
f438021c070f6a275729c01d07a5692f
|
|
| BLAKE2b-256 |
89de360c594e17a34492785d181421cabc74ead643136ae943f035b718ca4cb9
|