Printago API
POST
/v1/integrations/shipstation/connect
Connect ShipStation
Connect a ShipStation account and begin importing from the chosen stores.
Request Body
Credentials plus the stores to leave out and the initial settings
RequestBody
apiKeyrequired
string
apiSecretrequired
string
autoCloseOrdersoptional
"shipped" | "never"
shippednever
autoPrintoptional
boolean
excludedStoreIdsoptional
number[]
showMarketplaceoptional
boolean
Example Request
application/json
{
"apiKey": "string",
"apiSecret": "string",
"excludedStoreIds": [
1
],
"autoPrint": true,
"autoCloseOrders": "shipped",
"showMarketplace": true
}
Response Schema
Integration
createdAtrequired
string
format: date-time
externalIdoptionalnullable
string
External identifier for deduplication (e.g., shopId for Etsy)
idrequired
string
pattern: ^[a-z0-9]{24}$
publicDataoptionalnullable
object
Public metadata safe to expose to frontend
lastSyncedAtoptional
number
shopIdrequired
string
shopNamerequired
string
shopUrloptional
string
lastSyncedAtoptional
number
shopDomainrequired
string
shopNamerequired
string
usernameoptional
string
Variant 4CloudStoragePublicDataPublic data for cloud-storage integrations (safe to expose to frontend).
authErroroptionalnullable
string
Set when a token refresh fails because the grant was revoked. The stored
tokens are dead once this is set; the UI prompts a reconnect. Cleared on a
successful reconnect.
displayNamerequired
string
emailrequired
string
lastSyncedAtoptional
number
lastSyncErroroptionalnullable
string
lastSyncResultoptional
object
createdrequired
number
deletedrequired
number
errorsrequired
number
updatedrequired
number
lastSyncStartedAtoptional
number
syncStatusoptional
"idle" | "syncing"
Coarse run state used as the concurrency claim for background syncs.
idlesyncing
lastSyncedAtoptional
number
marketplaceIdrequired
string
eBay marketplace ID (e.g., EBAY_US, EBAY_UK, EBAY_DE, EBAY_AU)
sellerIdrequired
string
usernamerequired
string
disconnectedAtoptional
number
Set when TikTok notifies us (SELLER_DEAUTHORIZATION webhook) that the seller
revoked our app's access. The stored tokens are dead once this is set, so
syncs stop and the UI prompts a reconnect. Cleared when the seller
re-authorizes through OAuth.
disconnectReasonoptional
"seller_deauthorized"
Why the integration was auto-disconnected (only `seller_deauthorized` today).
lastSyncedAtoptional
number
regionrequired
string
TikTok Shop region (e.g., US, UK, ID)
shopIdrequired
string
shopNamerequired
string
lastSyncedAtoptional
number
lastWebhookAtoptional
number
When the last signed webhook delivery arrived. Webhook delivery on
WordPress hosts is WP-cron driven and unreliable, so the UI surfaces this
next to the polling interval.
storeNamerequired
string
The WordPress site title, for display.
storeUrlrequired
string
Normalized store URL (origin + path, no trailing slash).
syncWatermarkoptional
number
Watermark (epoch millis) for the incremental order sync: the start time of
the last successful sync, minus overlap. Orders modified after this are
re-fetched and reconciled on the next run.
webhookSetupErroroptionalnullable
string
Set when webhook registration failed at connect time; polling still runs.
accountNamerequired
string
ShipStation has no account id on the v1 API; the first store's account name identifies it.
authErroroptionalnullable
string
Set when ShipStation rejects the stored credentials. Syncs stop until the
seller reconnects; cleared on a successful reconnect.
lastSyncedAtoptional
number
ordersSyncedThroughoptional
string
Watermark: the ShipStation `modifyDate` (ISO, account-local) the last sync
read through. The next sync resumes from here rather than re-walking the
seller's whole order history, which a 40 req/min key cannot afford.
storesrequired
object[]
Discovered stores, refreshed on every sync so the picker can show new ones.
activerequired
boolean
ShipStation's own active flag; inactive stores stop producing orders.
marketplaceNamerequired
string
The underlying channel, e.g. "Walmart", "Shopify", "Manual Orders".
storeIdrequired
number
storeNamerequired
string
settingsoptionalnullable
object
User-configurable settings
autoCloseOrdersoptional
"shipped" | "delivered" | "never"
shippeddeliverednever
autoPrintoptional
boolean
ignoredVariantNamesoptional
string[]
Variant option names to exclude from SKU matching (e.g., ["Size"])
autoCloseOrdersoptional
"partial" | "never" | "fulfilled"
When to automatically close orders in Printago based on Shopify status.
- 'fulfilled': Close when Shopify order is fully fulfilled (shipped)
- 'partial': Close when any items are fulfilled
- 'never': Never auto-close based on fulfillment
partialneverfulfilled
autoPrintoptional
boolean
ignoredVariantNamesoptional
string[]
Variant option names to exclude from SKU matching (e.g., ["Size"])
propertyWhitelistoptional
string[]
Property names to import as SKU options (e.g., ["Logo", "Back Color"])
tagWhenPrintedoptional
string
Tag to add to orders when fully printed (empty string disables)
writeProgressTagsoptional
boolean
Keep Shopify order tags in sync with Printago print job progress (e.g. "2/5 printed").
autoCloseOrdersoptional
"shipped" | "never"
When to close the Printago order.
Only 'shipped' and 'never' exist here, unlike Etsy: eBay's Fulfillment API
reports an order as FULFILLED once tracking is uploaded but never tells us
it was delivered, so a 'delivered' option could only ever have behaved as
'shipped' or never fired at all.
shippednever
autoPrintoptional
boolean
autoCloseOrdersoptional
"shipped" | "delivered" | "never"
shippeddeliverednever
autoPrintoptional
boolean
autoCloseOrdersoptional
"never" | "completed"
WooCommerce has no shipped/delivered distinction; 'completed' is the
seller's own "fulfilled" signal, so it is the only close trigger.
nevercompleted
autoPrintoptional
boolean
ignoredVariantNamesoptional
string[]
Variant option names to exclude from SKU matching (e.g., ["Size"])
autoCloseOrdersoptional
"shipped" | "never"
Defaults to 'shipped' here, unlike Shopify and eBay: ShipStation is where
the seller actually ships, so SHIP_NOTIFY is a first-hand signal rather
than a marketplace's echo of one.
shippednever
autoPrintoptional
boolean
excludedStoreIdsoptional
number[]
ShipStation store ids NOT to import from. An exclusion list rather than an
allowlist so a store the seller adds in ShipStation later imports without
them having to come back here — the seller already knows what they
connected, and turning one off is the rarer action.
showMarketplaceoptional
boolean
Show the underlying marketplace alongside the source, so an order reads
"ShipStation - Walmart" rather than just "ShipStation".
autoSyncoptional
boolean
Re-enqueue the next sync (~60 min) when a background sync completes.
keepPartsOnRemoteDeleteoptional
boolean
Whether to keep Printago parts when their source file is removed remotely.
Defaults to true: deleting parts is a destructive side effect, opt-in only.
syncFileTypesoptional
string[]
File extensions to import (defaults to all supported).
watchedFolderIdoptionalnullable
string
The remote folder ID to watch.
watchedFolderNameoptionalnullable
string
The remote folder name/path (for display).
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
typerequired
enum
bambulabetsyshopifyebaytiktok-shopwoocommerceshipstationgoogle-driveonedrive
updatedAtrequired
string
format: date-time
Example Response
201 OK — application/json
{
"type": "bambulab",
"externalId": "string",
"publicData": {
"shopId": "string",
"shopName": "string",
"shopUrl": "string",
"lastSyncedAt": 1
},
"settings": {
"autoPrint": true,
"autoCloseOrders": "shipped",
"ignoredVariantNames": [
"string"
]
},
"id": "string",
"storeId": "string",
"createdAt": "2025-01-15T12:00:00.000Z",
"updatedAt": "2025-01-15T12:00:00.000Z"
}