API Docs
Integrations

Shopify Integration

Receive Shopify orders via webhook and automatically create Pick & Pack shipments. When a customer places an order in your Shopify store, a shipment is created in 3PLGuys and submitted for fulfillment — no manual work required.

How It Works

Shopify OrderWebhook3PLGuys APISKU MatchingPnP Shipment Created

The shipment is automatically submitted and moves to pending status, ready for the warehouse to pick, pack, and ship.

Setup

1Generate an API key

Go to Account Settings → API Keys in your 3PLGuys dashboard. Create a key with at least the shipments and inventory scopes.

2Match your SKUs

Ensure the SKUs in your Shopify products match the SKUs in your 3PLGuys inventory. The integration uses SKU to look up products — if a SKU doesn't match, the order will fail.

3Configure Shopify webhook

In your Shopify admin, go to Settings → Notifications → Webhooks and create a webhook:

EventOrder creation
FormatJSON
URLhttps://api.3plguys.com/v0/shopify/orders

Add a custom header for authentication:

Authorization: Bearer 3pl_your_api_key_here

Orders flow automatically

Once configured, new Shopify orders will automatically create shipments in 3PLGuys. No polling or manual intervention required.

Environments

Test your integration in sandbox before going live. Use separate API keys for each environment.

Sandbox

https://sandbox.3plguys.com/v0/shopify/orders

Test orders — not processed by warehouse

Production

https://api.3plguys.com/v0/shopify/orders

Live orders — creates real shipments

Endpoint

POST
/v0/shopify/orders

Receive Shopify order webhook and create a Pick & Pack shipment

This endpoint receives the standard Shopify orders/create webhook payload. Authentication is via the Authorization header with your API key.

Request

Shopify sends the full order payload. The key fields used by 3PLGuys are:

Shopify webhook payload (key fields)
{
"id": 5678901234,
"order_number": 1042,
"shipping_address": {
"name": "John Doe",
"company": "Acme Corp",
"address1": "123 Main St",
"address2": "Suite 100",
"city": "Los Angeles",
"province_code": "CA",
"zip": "90001",
"phone": "555-123-4567"
},
"line_items": [
{
"id": 111222333,
"sku": "LINEN-KING-WHITE",
"quantity": 2
},
{
"id": 111222334,
"sku": "PILLOW-STD",
"quantity": 4
}
],
"note": "Please gift wrap"
}

Field Mapping

Shopify order fields are mapped to 3PLGuys shipment fields as follows:

Shipping Address

Shopify Field3PLGuys Field
shipping_address.nameshippingName
shipping_address.companyshippingCompany
shipping_address.address1shippingAddress1
shipping_address.address2shippingAddress2
shipping_address.cityshippingCity
shipping_address.province_codeshippingState
shipping_address.zipshippingZip
shipping_address.phoneshippingPhone

Line Items

Shopify Field3PLGuys Behavior
line_items[].skuLooked up in 3PLGuys inventory by SKU + organization to get productId
line_items[].quantityUsed as shipment item quantity
noteSet as shipment notes

Responses

Success (200 OK)

Order processed successfully. A Pick & Pack shipment has been created and submitted.

200 OK
{
"success": true,
"shipmentId": "456"
}

Duplicate Order (200 OK)

This order was already processed. The endpoint is idempotent — sending the same order again returns the existing shipment.

200 OK (duplicate)
{
"success": true,
"shipmentId": "456",
"duplicate": true
}

Authentication Failed (401 Unauthorized)

401 Unauthorized
{
"success": false,
"error": "invalid_api_key"
}

Unknown SKUs (422 Unprocessable Entity)

One or more SKUs in the order don't exist in your 3PLGuys inventory.

422 Unprocessable Entity
{
"success": false,
"error": "unknown_skus",
"skus": ["LINEN-KING-WHITE", "PILLOW-STD"]
}

No Warehouse (422 Unprocessable Entity)

Your organization doesn't have a warehouse configured.

422 Unprocessable Entity
{
"success": false,
"error": "no_warehouse"
}

Idempotency

The endpoint is idempotent based on Shopify's id field. If the same order is sent multiple times:

  • If already processed successfully → returns { duplicate: true } with the existing shipment ID
  • If previously failed → retries processing from scratch

Current Limitations

Fulfillment updates not sent to Shopify

When the warehouse ships the order, Shopify is not automatically updated. Orders will remain "Unfulfilled" in Shopify until manually marked as fulfilled by the store owner.

No inventory sync

Stock levels are not synced between Shopify and 3PLGuys. Manage inventory separately in each system.

Order cancellations

The orders/cancelled webhook is not supported. If an order is cancelled in Shopify, manually cancel the shipment in 3PLGuys.

Troubleshooting

Orders not appearing in 3PLGuys

Check that your Shopify webhook is configured correctly. Verify the URL is exactlyhttps://api.3plguys.com/v0/shopify/orders and the Authorization header includes Bearer followed by your API key.

Unknown SKUs error

The SKUs in your Shopify products must exactly match SKUs in your 3PLGuys inventory. Check for typos, extra spaces, or case differences. Add any missing products to 3PLGuys before retrying.

No warehouse error

Your 3PLGuys organization needs at least one warehouse configured. Contact support if you don't see a warehouse in your account.

Need help?

Contact us at support or email support@3plguys.com.