---
title: "`v1:order.update` Order updated webhook"
method: POST
path: "orderUpdated"
---

# \`v1:order.update\` Order updated webhook

`POST orderUpdated` (webhook)

This webhook is sent whenever the shipping status of an order changes, for example when the parcel enters transit or is delivered.
The payload has the same shape as the `v1:order.new` webhook, with `status` reflecting the new status of the order.
**Required OAuth Scope:** `orders_read`
**Notes:**
- `status` is derived from the carrier tracking status as follows: `AWAITING_SHIPPING` → `SHIPPING_PENDING`, `IN_TRANSIT` → `SHIPPED`, `DELIVERED` → `COMPLETED`, `RETURNED` → `REFUNDED`, `CANCELLED` → `CANCELLED`, `FAILED` → `FAILED`. Any other tracking status does not produce a webhook.
- Only orders using Depop managed shipping produce this webhook. Orders where the seller arranges shipping themselves are not covered yet.
- The `id` is derived from the purchase ID, so every update for a given order shares the same `id`. Do not use it on its own to de-duplicate deliveries.
- Delivery is best effort. Please use the orders endpoint to reconcile if you need a guaranteed up-to-date view of an order.

## Payload

- Webhook
  - `id` string, required: The identifier of the webhook. For the order webhooks (`v1:order.new`, `v1:order.refund`, `v1:order.update`) this is derived from the purchase ID, so it is stable per order and shared across those event types rather than unique per delivery. Combine it with `event_type` and `created_at` if you need to de-duplicate.
  - `event_type` 'v1:order.new' | 'v1:order.refund' | 'v1:order.update' | 'v1:product.create' | 'v1:product.like' | 'v1:product.unlike' | 'v1:product.update', required: The type of event that triggered the webhook.
  - `created_at` string, date-time, required: The date and time the webhook was created.
  - `data` union, required: The data of the webhook.
    - OrderWebhook: The payload of the `v1:order.new` and `v1:order.update` webhooks.
      - `seller_id` number, required: The seller's Depop user ID.
      - `purchase_id` string, required: Depop's internal purchase ID. Useful to be logged and to report any issues back to us.
      - `status` 'SHIPPING_PENDING' | 'SHIPPED' | 'REFUNDED' | 'CANCELLED' | 'COMPLETED' | 'FAILED', required: The status of the order. For `v1:order.new` this is always `SHIPPING_PENDING`. For `v1:order.update` it reflects the latest status, derived from the carrier tracking status.
      - `currency` string, required: The currency code of the item's price.
      - `buyer_pays_amount` string, required: The final amount the buyer paid for the item. This includes the item price considering discounts and offers, shipping cost and any taxes we may need to collect.
      - `seller_receives_amount` string, required: The amount you'll receive after Depop's fees are deducted.
      - `fee_amount` string, required: The total fees charged to the seller for this order.
      - `buyer_shipping_price` string, required: The shipping price paid by the buyer.
      - `buyer_address` WebhookShippingAddress, required: The buyer's shipping address as delivered in order webhook payloads. Note: unlike the Orders endpoint's address, the country is delivered in the `country` field (not `country_code`).
        - `name` string: The name of the buyer.
        - `address` string: The first line of the buyer's address.
        - `address2` string: The second line of the buyer's address.
        - `city` string, required: The city of the buyer's address.
        - `postal_code` string, required: The postal code of the buyer's address.
        - `state` string: The state of the buyer's address.
        - `country` string, required: The country code of the buyer's address.
        - `phone_number` string: The phone number of the buyer.
      - `line_items` OrderLineItem[], required
        - `purchase_item_id` number, required: Depop's internal purchase line item ID. Useful to be logged and to report any issues back to us.
        - `sku` string, nullable: SKU of the product. This field is optional and will be null if no SKU was assigned to the product.
        - `product_id` number, required: Depop's internal product ID.
        - `slug` string, required: The unique slug identifier for the product on Depop.
        - `parcel_id` string, required: Depop's internal parcel ID. Note that multiple line items can share in the same parcel. This is currently true for all buyer orders with multiple items.
        - `description` string, required: The description of the product.
        - `original_price` string, required: The original price of the product before any discounts or offers.
        - `sold_price` string, required: How much it sold for, which includes any discounts or negotiated offers.
        - `sold_via_offers` boolean, required: Whether the item was sold via an offer negotiation with the buyer.
        - `image_url` string, required: The URL of the first image of the product.
      - `depop_shipping` DepopShippingResponse
        - `shipping_provider_id` string, required: The identifier for the shipping provider used for this order. Common providers include: USPS, MY_HERMES (EVRI), SENDLE.
    - RefundedOrder
      - `purchase_id` string, required: Depop's internal purchase ID. Useful to be logged and to report any issues back to us.
      - `refunded_by` 'PARTNER' | 'DEPOP', required: Who triggered the refund. Can be either PARTNER or DEPOP. PARTNER indicates the refund was requested by a partner via the API, or in the Depop app. DEPOP indicates the refund was triggered by Depop, for example due to a dispute or if the order was auto-cancelled.
    - ProductLike
      - `seller_id` number, required: The Depop user ID of the product seller.
      - `product_id` number, required: The unique identifier of the product.
      - `sku` string: The SKU of the product.
      - `slug` string, required: The URL-friendly identifier for the product on Depop.
      - `liker_id` number, required: The Depop user ID of the user who liked or unliked the product.
    - ProductCreate: The payload of the `v1:product.create` webhook, containing the full state of the newly created product.
      - `seller_id` number, required: The Depop user ID of the product seller.
      - `product` Product, required
        - `sku` string, nullable: SKU of the product. This field is optional and will be null if no SKU was assigned to the product.
        - `product_id` number, required: The id of the product.
        - `slug` string, required: The URL-friendly slug of the product. Can be used to construct the product URL as `https://www.depop.com/products/{slug}/`.
        - `status` 'STATUS_ONSALE' | 'STATUS_PURCHASED' | 'STATUS_MARKED_AS_SOLD' | 'STATUS_DELETED' | 'STATUS_DELETED_ONSALE' | 'STATUS_DELETED_PURCHASED' | 'STATUS_DELETED_MARKED_AS_SOLD' | 'STATUS_PRODUCT_BANNED_ONSALE' | 'STATUS_USER_BANNED_ONSALE' | 'STATUS_PRODUCT_BANNED_PURCHASED' | 'STATUS_USER_BANNED_PURCHASED', required: The status of the product.
        - `address` Address, required
          - `country_code` string, required
          - `state` string: The state/county of the product's address.
        - `description` string, required: A good description should contain key attribute information (brand, category, color, size, age etc), clarifying information about flaws, condition, fit, size and measurements. Commonly they end with hash tags (for example, \#summer). Constraints: * Limited to 1000 characters * Email addresses are not allowed * Can only have up to 5 hashtags (for example, \#summer).
        - `price_currency` string, required: The currency code of the item's price.
        - `price_amount` string, required: The price of the item. Must be at least $1.00 or £1.00. Up to 2 decimal places.
        - `current_price` string: The current effective price of the item, reflecting any active discount. Equal to price_amount when no discount is applied.
        - `discount_price` string: The discounted price of the item. Only present when the seller has an active discount on the product.
        - `auto_send_offer_price` string: The price to automatically send to buyers who liked or have bagged the product. There's a fixed 1h delay before an offer is sent. If not set, the product will not automatically send offers. Must be less at least 5% off the price_amount. Up to 2 decimal places. **Note:** Requires `offers_read` OAuth scope to include this field in the response. If scope is not provided, this field will be omitted.
        - `auto_negotiate_offer_price` string: The price to automatically respond with when a buyer sends an offer in this product: * If the buyer offer is higher or equal to this value, then the offer will be automatically accepted. * If the buyer offer is lower than this value, then the offer will be automatically countered with this price. If the buyer counters again, the same value will be used to counter the buyer's offer. If not set, the offers will not be automatically responded to. Must be less at least 5% off the price_amount. Up to 2 decimal places. **Note:** Requires `offers_read` OAuth scope to include this field in the response. If scope is not provided, this field will be omitted.
        - `international_shipping_cost` string: The cost of shipping the product internationally. Only set this if the product can be shipped internationally. Same currency as price_currency.
        - `national_shipping_cost` string: The cost of shipping the product nationally. Same currency as price_currency. If set to 0, the product has free shipping for buyers. **Important:** Either `national_shipping_cost` OR `depop_shipping` must be provided. If using Depop managed shipping, use `depop_shipping` instead and omit this field.
        - `depop_shipping` DepopShippingDetails
          - `address_id` integer, required: The ID of the seller address to ship from. This must be an address ID obtained from the `/api/v1/shop/seller-addresses/` endpoint. The address determines which shipping providers and parcel sizes are available.
          - `shipping_provider_id` string, required: The identifier for the shipping provider. This must be a provider ID returned from the `/api/v1/shop/seller-addresses/{address_id}/shipping-providers/` endpoint for the specified address. Common providers include: USPS, MY_HERMES (EVRI), SENDLE.
          - `parcel_size_id` string, required: The identifier for the parcel size. This must be a parcel size ID available for the specified shipping provider, obtained from the `/api/v1/shop/seller-addresses/{address_id}/shipping-providers/` endpoint. Common sizes include: SMALL, MEDIUM, LARGE, etc.
          - `payer` 'buyer' | 'seller', required: Who pays for the shipping cost. - `buyer`: The buyer pays for shipping (shipping cost is added to the total price) - `seller`: The seller pays for shipping (free shipping for buyers)
        - `quantity` number, required: The quantity of the product available for sale. Must be at least 1.
        - `pictures` Picture[], required
          - `url` string, required: URL of the picture.
          - `height` number, required
          - `width` number, required
        - `department` string, required: Top level category of the product. Currently we support: womenswear, menswear, kidswear and everything-else. These rarely change. For an up to date list, please make use of our taxonomy endpoint. Currently, in https://api.depop.com/api/v3/attributes/ under the key `department`.
        - `product_type` string, required: The more specific category of the product. Note that there's an intermediate level between department and product type called "group". We don't need to receive this when an item is being listed but it's used in the apps/website to organize the product types. For example, in "menswear >> swim-beach-wear >> swimsuit-one-piece", we only need to know the department "menswear" and the product type "swimsuit-one-piece". For an up to date list, please make use of our taxonomy endpoint. Currently, in https://api.depop.com/api/v3/attributes/ under the key `group`.
        - `size_set_id` number: The size set ID for the given Department and Product Type.
        - `size_id` number: The size ID for a given size Set ID.
        - `condition` 'brand_new' | 'used_like_new' | 'used_excellent' | 'used_good' | 'used_fair'
        - `colour` string[], required
        - `style` string[], required
        - `age` string[], required
        - `source` string[], required
        - `brand` string, required: The brand name of the product. For example, "Nike".
        - `attributes` object, required: Additional attributes of the product. For an up to date list, please make use of our attributes endpoint.
        - `is_boosted` boolean, required: Whether the product is currently boosted.
        - `created_at` string, date-time, required: The date and time when the product was created.
        - `updated_at` string, date-time, required: The date and time when the product was last updated.
    - ProductUpdate: The payload of the `v1:product.update` webhook, containing the full current state of the updated product.
      - `seller_id` number, required: The Depop user ID of the product seller.
      - `product` Product, required
        - `sku` string, nullable: SKU of the product. This field is optional and will be null if no SKU was assigned to the product.
        - `product_id` number, required: The id of the product.
        - `slug` string, required: The URL-friendly slug of the product. Can be used to construct the product URL as `https://www.depop.com/products/{slug}/`.
        - `status` 'STATUS_ONSALE' | 'STATUS_PURCHASED' | 'STATUS_MARKED_AS_SOLD' | 'STATUS_DELETED' | 'STATUS_DELETED_ONSALE' | 'STATUS_DELETED_PURCHASED' | 'STATUS_DELETED_MARKED_AS_SOLD' | 'STATUS_PRODUCT_BANNED_ONSALE' | 'STATUS_USER_BANNED_ONSALE' | 'STATUS_PRODUCT_BANNED_PURCHASED' | 'STATUS_USER_BANNED_PURCHASED', required: The status of the product.
        - `address` Address, required
          - `country_code` string, required
          - `state` string: The state/county of the product's address.
        - `description` string, required: A good description should contain key attribute information (brand, category, color, size, age etc), clarifying information about flaws, condition, fit, size and measurements. Commonly they end with hash tags (for example, \#summer). Constraints: * Limited to 1000 characters * Email addresses are not allowed * Can only have up to 5 hashtags (for example, \#summer).
        - `price_currency` string, required: The currency code of the item's price.
        - `price_amount` string, required: The price of the item. Must be at least $1.00 or £1.00. Up to 2 decimal places.
        - `current_price` string: The current effective price of the item, reflecting any active discount. Equal to price_amount when no discount is applied.
        - `discount_price` string: The discounted price of the item. Only present when the seller has an active discount on the product.
        - `auto_send_offer_price` string: The price to automatically send to buyers who liked or have bagged the product. There's a fixed 1h delay before an offer is sent. If not set, the product will not automatically send offers. Must be less at least 5% off the price_amount. Up to 2 decimal places. **Note:** Requires `offers_read` OAuth scope to include this field in the response. If scope is not provided, this field will be omitted.
        - `auto_negotiate_offer_price` string: The price to automatically respond with when a buyer sends an offer in this product: * If the buyer offer is higher or equal to this value, then the offer will be automatically accepted. * If the buyer offer is lower than this value, then the offer will be automatically countered with this price. If the buyer counters again, the same value will be used to counter the buyer's offer. If not set, the offers will not be automatically responded to. Must be less at least 5% off the price_amount. Up to 2 decimal places. **Note:** Requires `offers_read` OAuth scope to include this field in the response. If scope is not provided, this field will be omitted.
        - `international_shipping_cost` string: The cost of shipping the product internationally. Only set this if the product can be shipped internationally. Same currency as price_currency.
        - `national_shipping_cost` string: The cost of shipping the product nationally. Same currency as price_currency. If set to 0, the product has free shipping for buyers. **Important:** Either `national_shipping_cost` OR `depop_shipping` must be provided. If using Depop managed shipping, use `depop_shipping` instead and omit this field.
        - `depop_shipping` DepopShippingDetails
          - `address_id` integer, required: The ID of the seller address to ship from. This must be an address ID obtained from the `/api/v1/shop/seller-addresses/` endpoint. The address determines which shipping providers and parcel sizes are available.
          - `shipping_provider_id` string, required: The identifier for the shipping provider. This must be a provider ID returned from the `/api/v1/shop/seller-addresses/{address_id}/shipping-providers/` endpoint for the specified address. Common providers include: USPS, MY_HERMES (EVRI), SENDLE.
          - `parcel_size_id` string, required: The identifier for the parcel size. This must be a parcel size ID available for the specified shipping provider, obtained from the `/api/v1/shop/seller-addresses/{address_id}/shipping-providers/` endpoint. Common sizes include: SMALL, MEDIUM, LARGE, etc.
          - `payer` 'buyer' | 'seller', required: Who pays for the shipping cost. - `buyer`: The buyer pays for shipping (shipping cost is added to the total price) - `seller`: The seller pays for shipping (free shipping for buyers)
        - `quantity` number, required: The quantity of the product available for sale. Must be at least 1.
        - `pictures` Picture[], required
          - `url` string, required: URL of the picture.
          - `height` number, required
          - `width` number, required
        - `department` string, required: Top level category of the product. Currently we support: womenswear, menswear, kidswear and everything-else. These rarely change. For an up to date list, please make use of our taxonomy endpoint. Currently, in https://api.depop.com/api/v3/attributes/ under the key `department`.
        - `product_type` string, required: The more specific category of the product. Note that there's an intermediate level between department and product type called "group". We don't need to receive this when an item is being listed but it's used in the apps/website to organize the product types. For example, in "menswear >> swim-beach-wear >> swimsuit-one-piece", we only need to know the department "menswear" and the product type "swimsuit-one-piece". For an up to date list, please make use of our taxonomy endpoint. Currently, in https://api.depop.com/api/v3/attributes/ under the key `group`.
        - `size_set_id` number: The size set ID for the given Department and Product Type.
        - `size_id` number: The size ID for a given size Set ID.
        - `condition` 'brand_new' | 'used_like_new' | 'used_excellent' | 'used_good' | 'used_fair'
        - `colour` string[], required
        - `style` string[], required
        - `age` string[], required
        - `source` string[], required
        - `brand` string, required: The brand name of the product. For example, "Nike".
        - `attributes` object, required: Additional attributes of the product. For an up to date list, please make use of our attributes endpoint.
        - `is_boosted` boolean, required: Whether the product is currently boosted.
        - `created_at` string, date-time, required: The date and time when the product was created.
        - `updated_at` string, date-time, required: The date and time when the product was last updated.

## Acknowledgement `200`

Acknowledgment.

---

[API](https://skmtc.dev/depop/apis/seller-api.md) - [All operations](https://skmtc.dev/depop/apis/seller-api/llms.txt) - [OpenAPI document](https://skmtc.dev/depop/apis/seller-api/revisions/56fef8e38e44?raw)
