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
The shipment is automatically submitted and moves to pending status, ready for the warehouse to pick, pack, and ship.
Setup
Go to Account Settings → API Keys in your 3PLGuys dashboard. Create a key with at least the shipments and inventory scopes.
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.
In your Shopify admin, go to Settings → Notifications → Webhooks and create a webhook:
| Event | Order creation |
| Format | JSON |
| URL | https://api.3plguys.com/v0/shopify/orders |
Add a custom header for authentication:
Authorization: Bearer 3pl_your_api_key_here
Orders flow automatically
Environments
Test your integration in sandbox before going live. Use separate API keys for each environment.
Sandbox
https://sandbox.3plguys.com/v0/shopify/ordersTest orders — not processed by warehouse
Production
https://api.3plguys.com/v0/shopify/ordersLive orders — creates real shipments
Endpoint
/v0/shopify/ordersReceive 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:
{"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 Field | 3PLGuys Field |
|---|---|
shipping_address.name | shippingName |
shipping_address.company | shippingCompany |
shipping_address.address1 | shippingAddress1 |
shipping_address.address2 | shippingAddress2 |
shipping_address.city | shippingCity |
shipping_address.province_code | shippingState |
shipping_address.zip | shippingZip |
shipping_address.phone | shippingPhone |
Line Items
| Shopify Field | 3PLGuys Behavior |
|---|---|
line_items[].sku | Looked up in 3PLGuys inventory by SKU + organization to get productId |
line_items[].quantity | Used as shipment item quantity |
note | Set as shipment notes |
Responses
Success (200 OK)
Order processed successfully. A Pick & Pack shipment has been created and submitted.
{"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.
{"success": true,"shipmentId": "456","duplicate": true}
Authentication Failed (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.
{"success": false,"error": "unknown_skus","skus": ["LINEN-KING-WHITE", "PILLOW-STD"]}
No Warehouse (422 Unprocessable Entity)
Your organization doesn't have a warehouse configured.
{"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.