Fulfill orders

Pull orders with the full ship-to address, mark them shipped, attach tracking and notify the marketplace.

The order loop for a WMS/ERP integration (requires orders:read + orders:write):

1. Get orders as they arrive

Subscribe to order.created, or poll:

curl "https://api.nembol.com/rest/v1/orders?limit=50" \
  -H "Authorization: Bearer $NEMBOL_API_KEY"

Every order is normalized to one shape regardless of channel: status, fulfillment_status, lines[], tracking, and buyer including the ship-to address (buyer.address).

2. Ship it

curl -X POST https://api.nembol.com/rest/v1/orders/{id}/fulfillment \
  -H "Authorization: Bearer $NEMBOL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ship-EBAY-12345" \
  -d '{
    "mark_shipped": true,
    "tracking": {"number": "1Z999...", "carrier": "UPS", "url": "https://..."}
  }'

With tracking present, Nembol also notifies the source marketplace by default (eBay, Etsy, Shopify, WooCommerce, Amazon, TikTok Shop, OnBuy, Square, Squarespace) — the buyer gets the channel's own shipping notification. Disable with "notify_channel": false.

Gotchas

  • The write applies to the whole channel order. Nembol stores one row per line; marking any line shipped ships the order (all its lines).
  • Marketplace notification is once-per-order, hard-idempotent. Retrying the call never notifies (or emails) the buyer twice.
  • Terminal orders refuse fulfillment: canceled/refunded orders return 422 order_not_fulfillable.
  • Buyer data is PII — it sits behind orders:read; process it lawfully and don't store more than you need.
  • channel_notification in the response tells you exactly what happened: {attempted, delivered, error}.

Last updated on July 30, 2026

Need help?

The API is in private beta — email us and a human replies, usually within one business day.

On this page