Skip to content

Fulfillment SOP

Owner: Solo Operator Last Updated: 2026-02-26 Review Cadence: Monthly Systems: Medusa Admin, BTCPay Server, ACH Processor (Paycron), ShipStation


1. Order Received

When a new order is placed, Medusa fires an order.placed event. If SendGrid notifications are configured, you receive an email alert.

  1. Open Medusa Admin > Orders.
  2. New orders appear at the top with status Pending.
  3. Click the order to view details: items, quantities, shipping address, payment method, customer info.
  4. Confirm the order has a valid payment session (see Section 2).

Frequency: Check orders at minimum twice daily (morning + afternoon). During high-volume periods, check hourly.


2. Payment Verification

Payment must be confirmed before any fulfillment activity begins.

2a. BTC / Lightning (BTCPay Server)

  1. BTCPay Server sends a webhook to Medusa when payment is confirmed.
  2. In Medusa Admin, the order's payment status should show Captured after sufficient confirmations.
  3. If payment status is still Awaiting:
  4. Open BTCPay Server Dashboard > Invoices.
  5. Locate the invoice by order ID.
  6. Check confirmation count. Require a minimum of 1 on-chain confirmation (configurable in BTCPay settings). Lightning payments settle instantly.
  7. If the invoice is Expired or Invalid, do NOT fulfill. Contact the customer to arrange re-payment or cancel the order.

2b. ACH (Paycron) / Card (Future)

  1. The ACH processor sends a webhook to Medusa on successful charge.
  2. In Medusa Admin, the order's payment status should show Captured.
  3. If payment is Authorized but not Captured:
  4. If auto-capture is enabled, wait up to 15 minutes for the webhook.
  5. If manual capture is configured, go to the order in Medusa Admin and click Capture Payment.
  6. For ACH payments, note that bank debits can take 3-5 business days to settle. The processor marks the payment as succeeded once the debit is initiated, but returns are possible for up to 60 days.
  7. If payment has Failed, contact the customer. Do NOT fulfill.

2c. Verification Checklist

  • Payment status is Captured in Medusa Admin
  • Payment amount matches order total
  • For BTC: BTCPay invoice shows Settled
  • For ACH: Processor dashboard shows charge as Succeeded

3. Order Review

Before picking and packing, review each order for issues.

3a. Fraud Signals

Check for the following red flags:

  1. Mismatched billing/shipping: Different names or wildly different geographic regions.
  2. Multiple failed payment attempts: Visible in Medusa Admin order activity timeline.
  3. Unusual quantities: Orders significantly larger than typical. Cross-reference with customer history.
  4. New customer + high value: First-time customer placing a large order.
  5. Shipping to freight forwarder: Addresses that appear to be forwarding services.

Action on fraud suspicion: Place the order on hold (see Section 7). Do NOT fulfill until reviewed.

3b. Shipping Address Verification

  1. Confirm the address is complete: street, city, state, ZIP, country.
  2. Verify the address is deliverable (ShipStation validates addresses during label creation).
  3. For PO Boxes: confirm the selected shipping method supports PO Box delivery (USPS does, UPS/FedEx generally do not).

3c. RUO Compliance Check

  1. Confirm the customer acknowledged the RUO disclaimer during checkout (stored as order metadata or checkout acknowledgment record).
  2. If the customer included notes referencing non-research use, do NOT fulfill. Flag the order and contact the customer to clarify intended use.
  3. Verify all ordered products are currently approved for sale (not recalled, not expired, not restricted).

4. Pick and Pack

4a. Pick from Inventory

  1. Open the order in Medusa Admin. Note the line items, variants, and quantities.
  2. Medusa automatically creates inventory reservations when an order is placed. Verify reserved quantities match in Medusa Admin > Inventory.
  3. Go to the storage location. Pull items matching the exact SKU, variant, and lot number.
  4. If lot tracking is implemented (custom Lot module), record the lot number(s) being fulfilled against the order.
  5. Verify the item condition: sealed packaging, correct labeling, no visible damage.

4b. Packing Checklist

Every shipment MUST include:

  • Ordered product(s) -- correct SKU, variant, quantity
  • Certificate of Analysis (COA) -- printed copy for each product (or a card with URL to download COA)
  • RUO Disclaimer Insert -- pre-printed card stating:
FOR RESEARCH USE ONLY (RUO)
Not for human or veterinary use.
Not for diagnostic or therapeutic use.
Not for food or cosmetic use.
By purchasing, you confirm this product will be used
solely for in-vitro research purposes.
  • Packing slip -- generated from Medusa/ShipStation with order details (no pricing if preferred)
  • Appropriate packaging material -- bubble wrap, cold packs if temperature-sensitive
  • Sealed outer packaging -- tamper-evident if required by product type

4c. Temperature-Sensitive Products

  1. Check the product's storage requirements (custom field in Medusa product metadata).
  2. If the product requires cold storage:
  3. Use insulated packaging (foam-lined box or insulated mailer).
  4. Include gel ice packs (frozen minimum 24 hours prior).
  5. Ship via expedited service (2-day or overnight).
  6. Do NOT ship temperature-sensitive items on Fridays unless overnight delivery is guaranteed for Saturday.
  7. Add a "Temperature Sensitive" sticker to the outer package.

5. Shipping

5a. Generate Shipping Label

  1. In Medusa Admin, navigate to the order and click Create Fulfillment.
  2. Select the items being fulfilled (all items for full fulfillment, or a subset for partial).
  3. If ShipStation integration is active:
  4. The order syncs to ShipStation automatically.
  5. Open ShipStation > Awaiting Shipment.
  6. Verify the order details, weight, and dimensions.
  7. Select carrier and service level:
    • Standard: USPS Priority Mail or UPS Ground (3-5 days)
    • Expedited: USPS Priority Mail Express or UPS 2nd Day Air
    • Temperature-sensitive: UPS Next Day Air or USPS Priority Mail Express
  8. Generate and print the shipping label.
  9. If using manual fulfillment (no ShipStation):
  10. Generate the label directly from USPS.com, UPS.com, or Pirate Ship.
  11. Enter tracking number manually in Medusa Admin on the fulfillment record.

5b. Carrier Selection Guidelines

Scenario Recommended Carrier Service
Standard domestic (< 1 lb) USPS Priority Mail
Standard domestic (> 1 lb) USPS or UPS Priority Mail / Ground
Expedited domestic USPS Priority Mail Express
Temperature-sensitive UPS Next Day Air
PO Box USPS Priority Mail (only USPS delivers to PO Boxes)
International USPS Priority Mail International (if offered)

5c. Package Handoff

  1. Affix the printed shipping label to the package.
  2. Verify the label matches the order (recipient name, address, weight).
  3. Schedule a carrier pickup or drop off at the designated shipping location.
  4. Record the handoff time for your own tracking.

6. Post-Ship

6a. Update Medusa

  1. In Medusa Admin, open the order.
  2. On the fulfillment record, enter the tracking number and carrier (if not auto-populated by ShipStation).
  3. Mark the fulfillment as Shipped.
  4. Medusa fires a fulfillment.shipped event, which triggers a tracking notification email to the customer (via SendGrid).

6b. Inventory Update

  1. Medusa automatically decrements inventory and clears the reservation when a fulfillment is created.
  2. Verify in Medusa Admin > Inventory that the stocked quantity reflects the shipment.
  3. If inventory for any SKU drops below the reorder threshold, flag it for reorder (see Daily Workflow below).

6c. Verify Tracking

  1. Within 24 hours of handoff, verify the tracking number shows a scan event from the carrier.
  2. If no scan within 24 hours:
  3. Check the label was applied correctly.
  4. Contact the carrier if the package was picked up but not scanned.
  5. Notify the customer proactively if there is a delay.

7. Exception Handling

7a. Address Issues

  1. If ShipStation flags an invalid address during label creation:
  2. Attempt address correction using ShipStation's suggestion.
  3. If no valid suggestion, email the customer to confirm their address.
  4. Place the order on hold in Medusa Admin (add a note: "Address verification needed").
  5. Do NOT ship to an unverified address.

7b. Out of Stock

  1. If an ordered item is out of stock (inventory discrepancy between order time and fulfillment):
  2. Check if the item is expected back in stock within 3 business days.
  3. If yes: email the customer with the expected ship date. Hold the order.
  4. If no: email the customer with options -- wait for restock, substitute (if available), or partial fulfillment + partial refund.
  5. Record the decision in the order notes in Medusa Admin.

7c. Partial Fulfillment

  1. In Medusa Admin, create a fulfillment for the available items only.
  2. Leave the remaining items in Not Fulfilled status.
  3. Email the customer explaining the partial shipment and expected timeline for the remainder.
  4. When remaining items are available, create a second fulfillment for the rest.
  5. Generate a separate shipping label for the second shipment.

7d. Held Orders

Orders may be held for: - Fraud review (Section 3a) - Address verification (Section 7a) - Out of stock (Section 7b) - Payment issues (Section 2) - RUO compliance concern (Section 3c)

Process: 1. Add a note to the order in Medusa Admin explaining the hold reason. 2. Review all held orders daily during the morning routine. 3. If an order has been held for more than 3 business days without resolution, escalate (email the customer with a deadline to respond, or cancel the order).


8. Daily Workflow

8a. Morning Routine (15-30 minutes)

  1. Open Medusa Admin > Orders. Filter by status: Pending and Requires Action.
  2. Review new orders received since last session:
  3. Run through Sections 2-3 (payment verification + order review) for each.
  4. Flag any exceptions.
  5. Check held orders: Review any orders on hold. Follow up with customers if needed.
  6. Check inventory alerts: Review any low-stock notifications (from scheduled job or manual check in Medusa Admin > Inventory).
  7. Check BTCPay Server: Verify no stuck or unresolved invoices.

8b. Batch Processing (30-60 minutes)

  1. Pick and pack all verified orders (Section 4).
  2. Generate shipping labels in batch via ShipStation (select multiple orders > batch print labels).
  3. Print COAs and RUO inserts for all orders in the batch.
  4. Package all orders.
  5. Schedule carrier pickup or prepare for drop-off.

8c. End-of-Day Reconciliation (10-15 minutes)

  1. Verify all shipped orders have tracking numbers entered in Medusa Admin.
  2. Confirm inventory counts in Medusa match physical stock for items fulfilled today.
  3. Review ShipStation for any failed label generations or errors.
  4. Check email for any customer responses to held-order inquiries.
  5. Quick scan of ACH processor dashboard: Confirm no failed payments or disputes.
  6. Quick scan of BTCPay Dashboard: Confirm no expired invoices that need attention.
  7. Note any items approaching reorder threshold for tomorrow's purchasing action.

Appendix A: Key Medusa Admin Navigation

Task Path
View all orders Orders (left sidebar)
View single order Orders > click order row
Create fulfillment Order detail > Fulfillment section > Create Fulfillment
Capture payment Order detail > Payment section > Capture
Add order note Order detail > Activity section > Add Note
View inventory Inventory (left sidebar)
Check customer history Customers > click customer > Orders tab

Appendix B: Key ShipStation Navigation

Task Path
View orders awaiting shipment Orders > Awaiting Shipment
Create single label Click order > Create Label
Batch print labels Select multiple orders > Create Labels
Address validation Automatic on label creation
Schedule pickup Shipments > Schedule Pickup
View tracking Shipments > shipped tab

Appendix C: Packing Materials Inventory

Maintain minimum stock of the following:

Item Minimum Quantity Reorder Trigger
Shipping boxes (small) 50 < 15 remaining
Shipping boxes (medium) 25 < 10 remaining
Bubble wrap roll 2 rolls < 0.5 roll remaining
Gel ice packs 20 < 5 remaining
Insulated mailers 15 < 5 remaining
RUO disclaimer inserts (pre-printed) 200 < 50 remaining
COA printouts Print on demand Maintain printer ink/toner
Packing tape 5 rolls < 1 roll remaining
Shipping label stock 100 labels < 25 remaining