Inbound Receiving & Container Shipments
Inbound shipments track goods arriving at your warehouse — whether full shipping containers or small parcel deliveries. This guide covers listing, filtering, and monitoring inbound shipments via the API.
Required Scope
Your OAuth application needs the shipments scope to access these endpoints.
Inbound Shipment Types
The API supports two inbound shipment types:
| Type | Code | Description |
|---|---|---|
| Container | inbound-container | Full shipping containers arriving at the warehouse — typically from overseas manufacturers via freight |
| Small Parcel | inbound-spd | Individual packages arriving via parcel carriers (UPS, FedEx, USPS) |
Listing Inbound Shipments
Use the shared shipments endpoint with type filters to list inbound shipments:
/v0/shipmentsList all shipments (filterable by type and status)
curl "https://api.3plguys.com/v0/shipments?type=inbound-container&take=50" \-H "Authorization: Bearer YOUR_TOKEN"
// Fetch both inbound typesconst [containers, parcels] = await Promise.all([fetch("https://api.3plguys.com/v0/shipments?type=inbound-container&take=50",{ headers: { Authorization: `Bearer ${token}` } }).then(r => r.json()),fetch("https://api.3plguys.com/v0/shipments?type=inbound-spd&take=50",{ headers: { Authorization: `Bearer ${token}` } }).then(r => r.json()),]);console.log(`${containers.length} containers, ${parcels.length} parcels inbound`);
res = httpx.get("https://api.3plguys.com/v0/shipments",params={"type": "inbound-container", "take": 50},headers={"Authorization": f"Bearer {token}"},)containers = res.json()
Filtering by Status
Track shipments at each stage of the receiving process:
curl "https://api.3plguys.com/v0/shipments?type=inbound-container&status=pending&take=50" \-H "Authorization: Bearer YOUR_TOKEN"
async function getInboundByStatus(status) {const res = await fetch(`https://api.3plguys.com/v0/shipments?type=inbound-container&status=${status}&take=50`,{ headers: { Authorization: `Bearer ${token}` } });return res.json();}const pending = await getInboundByStatus("pending");const processing = await getInboundByStatus("processing");const received = await getInboundByStatus("forwarded");
Getting Shipment Details
Fetch full details for a specific inbound shipment:
/v0/shipments/:idGet full details of a single shipment
curl "https://api.3plguys.com/v0/shipments/42" \-H "Authorization: Bearer YOUR_TOKEN"
const shipment = await fetch(`https://api.3plguys.com/v0/shipments/${shipmentId}`,{ headers: { Authorization: `Bearer ${token}` } }).then(r => r.json());console.log(`Type: ${shipment.type}`);console.log(`Status: ${shipment.status}`);console.log(`Warehouse: ${shipment.warehouse.name}`);console.log(`Cartons: ${shipment.cartons?.length ?? 0}`);
{"id": "42","status": "pending","type": "inbound-container","warehouse": { "id": "1", "name": "Main Warehouse" },"notes": "Container #MSKU1234567 — 40ft HC","cartons": [{"id": "5","name": "24-Pack Case","quantity": 200,"contents": [{ "productId": "1", "sku": "ABC123", "productName": "Egg Shells", "quantity": 24 }]}],"totalCartonQuantity": 200,"totalProductQuantity": 4800,"invoiceId": "5","createdAt": "2026-03-01T08:00:00.000Z","updatedAt": "2026-03-01T08:00:00.000Z"}
Tracking Receiving Progress
Poll inbound shipments to detect when they've been received and stocked:
const BASE = "https://api.3plguys.com/v0";async function trackInboundShipments(token) {// Get all inbound container shipmentsconst shipments = await fetch(`${BASE}/shipments?type=inbound-container&take=50`,{ headers: { Authorization: `Bearer ${token}` } }).then(r => r.json());for (const shipment of shipments) {console.log(`Shipment #${shipment.id}: ${shipment.status} at ${shipment.warehouse.name}`);if (shipment.status === "forwarded") {// Inventory has been added — trigger downstream syncawait onShipmentReceived(shipment);}}// Return only shipments still in progressreturn shipments.filter(s => !["forwarded", "cancelled"].includes(s.status));}
Inventory Replenishment Monitoring
Combine inbound shipment tracking with stock level monitoring to build a complete replenishment pipeline:
const BASE = "https://api.3plguys.com/v0";const auth = { Authorization: `Bearer ${token}` };const REORDER_THRESHOLD = 100; // Set your own reorder thresholdasync function checkReplenishment() {// 1. Get current stock levels by productconst products = await fetch(`${BASE}/inventory/products/breakdown?take=50`,{ headers: auth }).then(r => r.json());// 2. Find low-stock products (quantity is the total units across all warehouses)const lowStock = products.filter(p => !p.archived && p.quantity < REORDER_THRESHOLD);// 3. Check if replenishment is already inboundconst inbound = await fetch(`${BASE}/shipments?type=inbound-container&status=pending&take=50`,{ headers: auth }).then(r => r.json());for (const product of lowStock) {const hasInbound = inbound.some(s =>s.cartons?.some(c =>c.contents.some(item => item.productId === product.id)));if (hasInbound) {console.log(`${product.sku}: Low stock but replenishment inbound`);} else {console.log(`${product.sku}: Low stock — needs reorder!`);await sendReorderAlert(product);}}}// Run dailysetInterval(checkReplenishment, 24 * 60 * 60 * 1000);
Pagination for Large Volumes
If you receive many inbound shipments, paginate through the results:
async function getAllInboundShipments(token) {const all = [];let skip = 0;const take = 50; // Maximum allowed per requestwhile (true) {const batch = await fetch(`${BASE}/shipments?type=inbound-container&take=${take}&skip=${skip}`,{ headers: { Authorization: `Bearer ${token}` } }).then(r => r.json());all.push(...batch);if (batch.length < take) break;skip += take;}return all;}
Inventory impact
When an inbound shipment reaches forwarded status, the warehouse has received and stocked the goods. Stock levels are updated automatically — poll the stock levels endpoint to see the updated quantities.
Next Steps
- Syncing Inventory — Detect stock changes after receiving completes
- Automating SPD Shipments — Ship received inventory to Amazon FBA
- Automating Pick & Pack — Fulfill customer orders from received stock
- Multi-Channel Fulfillment — Distribute received inventory across all sales channels