Connect ShipStation to Syncaut to automate multi-carrier shipping, label generation, rate quoting, fulfillment tracking, and more — all from within your workflows.
Before adding a ShipStation node to your workflow, you need one thing:
A ShipStation API Key
ShipStation V2 uses a single API key for authentication — there is no separate API secret for V2. This is different from ShipStation V1 which used both a key and a secret.
Log in to your ShipStation account
Go to Account Settings → API Settings
Verify your email if prompted — ShipStation requires email verification before generating API keys
Set the expiration for your key — options are 3, 6, or 12 months
Click Generate API Key
Click the Copy icon to copy the key immediately
⚠️ Important: Your API key is shown only once. Copy it immediately after generating it — it will be hidden from view as soon as you navigate away from the page. If you lose it, you will need to delete it and generate a new one.
⚠️ Production vs Sandbox: ShipStation sandbox keys start with
TEST_. However, the V2 sandbox environment is not yet fully available. In practice you will be using a production key for all API calls. Any actions that create labels or shipments with a production key can incur real shipping costs — test carefully before running automations at scale.
ShipStation credentials are stored as a single API Key string.
In Syncaut, go to your Workspace → Credentials
Click Add Credential
Select ShipStation as the type
Paste your API Key as the credential value
Give it a recognisable name (e.g. "Client Store — ShipStation")
Save
⚠️ Do not paste a V1 API key here. ShipStation V1 and V2 keys are not interchangeable. Syncaut uses the V2 API exclusively. If you are unsure which key you have, generate a new one from Account Settings → API Settings and look for the V2 key option.
Your key is encrypted at rest and never exposed after saving.
When adding a ShipStation node to your workflow, you go through three steps:
Step name — a variable name used to reference this node's output in later steps (e.g. createLabel). Must start with a letter or underscore, no spaces.
Credential — select the ShipStation credential you added above
Choose what you want this node to do. Actions are grouped by resource:
Carriers — List carriers, Get carrier, Get rates
Shipments — Create shipment, Get shipment rates
Labels — Create label, Create label from rate, Create label from shipment
Fulfillments — Create fulfillment, List fulfillments
Each action comes with a pre-loaded JSON template. Replace the {{placeholders}} with actual values or reference outputs from previous workflow steps using {{stepName.data}}.
List carriers Fetches all shipping carriers connected to your ShipStation account. No payload required. Use this to find carrier IDs needed for rate quoting and label creation.
The carrier list is available as {{stepName.carriers}}.
Get carrier Fetches details and available services for a specific carrier. Required payload field: carrier_id — the ShipStation carrier ID (e.g. se-123890)
Get rates Returns rate quotes from one or more carriers for a given shipment. Use this before creating a label to find the best rate.
Required payload fields:
rate_options.carrier_ids — array of carrier IDs to get rates from
shipment.ship_to — recipient address with name, address_line1, city_locality, state_province, postal_code, country_code
shipment.ship_from — sender address in the same format
shipment.packages[0].weight.value — package weight
shipment.packages[0].weight.unit — weight unit, e.g. ounce, pound, gram
Rates are available in the output as {{stepName.rates}}. Each rate has a rate_id you can pass to Create Label from Rate.
Create shipment Creates a shipment record in ShipStation without generating a label. Useful for booking a shipment first and generating the label separately.
Required payload fields:
shipments — array of shipment objects, each with service_code, ship_to, ship_from, and packages
service_code — the carrier service to use (e.g. usps_priority_mail, ups_ground, fedex_ground)
ship_to and ship_from — address objects with name, address_line1, city_locality, state_province, postal_code, country_code
packages[0].weight — package weight object with value and unit
The shipment ID is available as {{stepName.shipmentId}}.
Get shipment rates Fetches available rates for an existing shipment. Required payload field: shipment_id — the ShipStation shipment ID
Create label Creates a shipment and generates a shipping label in one step. This is the most common action for agencies automating order fulfillment.
Required payload fields:
shipment.carrier_id — the carrier to use
shipment.service_code — the service level (e.g. ups_ground, usps_priority_mail)
shipment.ship_to — recipient address
shipment.ship_from — sender address
shipment.packages[0].weight — weight with value and unit
shipment.packages[0].dimensions — optional but recommended: height, width, length, unit (use inch or centimeter)
The tracking number is available as {{stepName.trackingNumber}} and the label download URL as {{stepName.labelUrl}}.
Create label from rate Creates a label using a rate quote obtained from a previous Get Rates step. More efficient when you already have a rate selected.
Required payload fields:
rate_id — the rate ID from a Get Rates response ({{getRates.rates[0].rate_id}})
label_format — pdf or zpl
label_layout — 4x6 or letter
Create label from shipment Generates a label for an existing ShipStation shipment.
Required payload fields:
shipment_id — the shipment ID from a Create Shipment response ({{createShipment.shipmentId}})
label_format — pdf or zpl
label_layout — 4x6 or letter
label_download_type — use url to get a download link in the response
Create fulfillment Marks an order as fulfilled and optionally notifies the customer and connected order source (e.g. Shopify or WooCommerce).
Required payload fields:
fulfillments — array of fulfillment objects, each with:
shipment_id — the ShipStation shipment ID
tracking_number — the carrier tracking number
carrier_code — the carrier code (e.g. ups, usps, fedex)
ship_date — the ship date in YYYY-MM-DD format
notify_customer — set to true to send a shipping notification email to the customer
notify_order_source — set to true to push the fulfillment back to the connected store (Shopify, WooCommerce, etc.)
List fulfillments Fetches all fulfillment records in your ShipStation account. No payload required.
A typical label automation in Syncaut follows this pattern:
Get Rates — pass the shipment details and get back a list of rates with rate_id values
Create Label from Rate — pass the chosen rate_id to generate the label
Create Fulfillment — mark the order as shipped and notify the customer
This is more efficient than Create Label directly because you can inspect rates and apply business logic (e.g. always use the cheapest rate under $10) between the steps.
Reference outputs from previous workflow steps inside the payload using Handlebars syntax:
{{stepName.data}}
For example, if a previous step named getOrder fetched a WooCommerce order, reference the customer's shipping address as:
{{getOrder.data.shipping.address_1}}
Reference a rate ID from a Get Rates step:
{{getRates.rates[0].rate_id}}
Use the variable picker (+ variable) above the payload editor to insert common variables without typing them manually.
Every ShipStation node stores its result under the step name you provide. The full output structure is:
{
"data": {},
"action": "create_label",
"trackingNumber": "1Z999AA10123456784",
"labelUrl": "https://...",
"rates": [],
"carriers": [],
"shipmentId": "se-123456",
"labelId": "se-789012",
"carrierId": "se-123890",
"status": "completed"
}
{{stepName.data}} — the full raw ShipStation API response
{{stepName.trackingNumber}} — extracted tracking number
{{stepName.labelUrl}} — label download URL (label actions only)
{{stepName.rates}} — array of rate options (Get Rates only)
{{stepName.carriers}} — array of carriers (List Carriers only)
{{stepName.shipmentId}} — ShipStation shipment ID
{{stepName.labelId}} — generated label ID
{{stepName.carrierId}} — carrier ID used
401 Unauthorized Your API key is incorrect, expired, or has been deleted. API keys have an expiration date (3, 6, or 12 months). Go to ShipStation → Account Settings → API Settings to check whether the key is still active or needs to be regenerated. Update the credential in Syncaut after generating a new one.
Credential not found The credential attached to the node was deleted from your workspace. Re-add it under Workspace → Credentials and update the node.
shipment object is required in payload The Create Label payload is missing the shipment object. Make sure your payload is structured correctly with the full shipment details nested under a shipment key.
rate_options.carrier_ids is required The Get Rates payload is missing rate_options.carrier_ids. Use the List Carriers action first to get your carrier IDs, then add them to your payload.
shipment_id is required You are using Get Shipment Rates, Create Label from Shipment, or Create Fulfillment but the shipment_id field is empty. Reference it from a previous Create Shipment step using {{createShipment.shipmentId}}.
rate_id is required The Create Label from Rate payload is missing rate_id. Reference it from a Get Rates step using {{getRates.rates[0].rate_id}} or the specific rate index you want.
Invalid JSON payload The payload has a syntax error or an unresolved variable returned an unexpected value. Check the payload in the node editor.
Label created but incurring unexpected costs Remember that production API keys create real shipments. Any label created with a production key will incur carrier charges. Always verify your workflow logic before enabling it at scale or on a schedule.
Navigate