Webhook

shipments.replaced

​

All of a shipment's items moved to a new shipment, for example when a new label was bought for it, the seller added tracking from their own label, or Whatnot support changed its label. The previous shipment is usually cancelled. The body has both shipments. Requires read:shipments.

Headers

  • Unique ID of the event. Retries of a delivery send the same ID, so use it to deduplicate.

  • When this delivery attempt was sent, as a Unix timestamp in seconds. Each retry sends a new timestamp.

  • Space-separated signatures, each v1, followed by the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{body}, keyed with your webhook secret.

Body·ShipmentReplacedWebhookBody

required
application/json
  • The event's data. Its shape depends on the topic.

    Properties: 2
  • The ID of the seller the event belongs to.

  • When the event happened, in ISO 8601. Stable across retries; the webhook-timestamp header is when each attempt was sent.

  • The webhook topic.

  • The payload version.

Responses

  • Acknowledge delivery. Any 2XX status counts.

  • Fail delivery. Non-2XX statuses and timeouts are retried.

Request Example for postshipments.replaced
{
  "type": "shipments.replaced",
  "timestamp": "2026-10-20T16:00:00.123Z",
  "data": {
    "previous_shipment": {
      "created_at": "2026-09-21T12:00:00.000Z",
      "dimensions": {
        "height": 1,
        "length": 6,
        "unit": "inch",
        "width": 4
      },
      "documents": {
        "bundled_url": "https://example.com/documents.pdf",
        "label_url": "https://example.com/label.pdf"
      },
      "dropoff_due": "2026-09-23T07:00:00.000Z",
      "fulfillment_method": "shipping",
      "hazardous_material": "not_hazardous",
      "id": "12345",
      "insurance": {
        "amount": {
          "amount": "25.00",
          "currency": "USD"
        },
        "contents": "Trading cards"
      },
      "recipient": {
        "display_name": "Card Collector",
        "id": "6789",
        "username": "cardcollector"
      },
      "required_actions": [],
      "seller_paid_shipping_cost": {
        "amount": "5.99",
        "currency": "USD"
      },
      "signature_required": false,
      "status": "label_generated",
      "tracking": {
        "carrier": "usps",
        "service": "usps_ground_advantage",
        "tracking_code": "9400111899223100012345"
      },
      "updated_at": "2026-09-21T13:00:00.000Z",
      "url": "https://www.whatnot.com/dashboard/shipments/U2hpcG1lbnROb2RlOjUxMjU0MTM5Mw==",
      "weight": {
        "unit": "ounce",
        "value": 4
      }
    },
    "replacement_shipment": {
      "created_at": "2026-09-21T12:00:00.000Z",
      "dimensions": {
        "height": 1,
        "length": 6,
        "unit": "inch",
        "width": 4
      },
      "documents": {
        "bundled_url": "https://example.com/documents.pdf",
        "label_url": "https://example.com/label.pdf"
      },
      "dropoff_due": "2026-09-23T07:00:00.000Z",
      "fulfillment_method": "shipping",
      "hazardous_material": "not_hazardous",
      "id": "12345",
      "insurance": {
        "amount": {
          "amount": "25.00",
          "currency": "USD"
        },
        "contents": "Trading cards"
      },
      "recipient": {
        "display_name": "Card Collector",
        "id": "6789",
        "username": "cardcollector"
      },
      "required_actions": [],
      "seller_paid_shipping_cost": {
        "amount": "5.99",
        "currency": "USD"
      },
      "signature_required": false,
      "status": "label_generated",
      "tracking": {
        "carrier": "usps",
        "service": "usps_ground_advantage",
        "tracking_code": "9400111899223100012345"
      },
      "updated_at": "2026-09-21T13:00:00.000Z",
      "url": "https://www.whatnot.com/dashboard/shipments/U2hpcG1lbnROb2RlOjUxMjU0MTM5Mw==",
      "weight": {
        "unit": "ounce",
        "value": 4
      }
    }
  },
  "version": "v2",
  "seller_id": "1234567"
}
No Body