---
title: "Create a new product"
method: POST
path: "/api/v1/products/"
tags: ["Products"]
---

# Create a new product

`POST /api/v1/products/`

## Request

- Base URL: `https://partnerapi-staging.depop.com`
- URL: `https://partnerapi-staging.depop.com/api/v1/products/`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/depop/apis/seller-api/docs/api/v1/products/post.ts> (a function with typed inputs; its response is checked against the schema)

This endpoint allows you to create a new product listing on Depop. The product will be available for sale immediately.

**Required OAuth Scopes:** - `products_write` - Required for all product operations - `offers_write` - Required when setting `auto_send_offer_price` or `auto_negotiate_offer_price`

**SKU is optional**: If you don't provide a SKU, the product will be created without one (it can be managed by product_id). If you provide a SKU and it already exists, the request will fail with a 400 error.
To update an existing product, use the PUT `/api/v1/products/by-product-id/{productId}/` endpoint instead.

## Request body

- ProductCreateRequest
  - `sku` string: SKU of the product. Optional - if not provided, the product will be created without a SKU. Must be unique. Can't be reused. This SKU will be used in other endpoints to reference this particular product and also in the webhooks.
  - `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.
  - `discount_price` string: The discounted price of the item. When set, the original price will be shown crossed out and this price will be shown as the current price. Up to 2 decimal places.
  - `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.
  - `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 or the discount_price if the discount_price is set Up to 2 decimal places.
  - `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` PublicPicture[], required: Array of product images. Minimum 1 image is required, maximum 8 images allowed. The first image will be used as the main product image shown in search results.
    - `url` string, required: Publicly accessible URL of the picture. Non-square images are also supported. Currently, we support JPG, WebP and PNG image formats. If a Depop hosted picture URL is provided (`media-photos.depop.com`), it must reference a picture belonging to the requesting user and that picture must still exist. URLs pointing at another user's picture, or at a picture that no longer exists or is invalid, are rejected with a `422` validation error. External URLs (not hosted on `media-photos.depop.com`) are unaffected.
  - `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. This field is mandatory for product types that have a size set available.
  - `size_id` number: The size ID for a given size Set ID. This field is mandatory for product types that have a size set available.
  - `condition` 'brand_new' | 'used_like_new' | 'used_excellent' | 'used_good' | 'used_fair', required
  - `colour` string[]: Array of colours that apply to the product (maximum 2). Please refer to https://api.depop.com/api/v3/attributes/ for the full list of supported colours.
  - `style` string[]: Array of styles that apply to the product. Please refer to https://api.depop.com/api/v3/attributes/ for the full list of supported styles.
  - `age` string[]: Array of ages that apply to the product. Please refer to https://api.depop.com/api/v3/attributes/ for the full list of supported ages.
  - `source` string[]: Array of sources that apply to the product. Please refer to https://api.depop.com/api/v3/attributes/ for the full list of supported sources.
  - `brand_name` string, required: The brand name of the product, e.g. "Nike".
  - `attributes` object: Additional product type-specific attributes as a map of attribute IDs to arrays of attribute values. Each product_type has a set of optional attributes. To get the full list of supported attributes, please use our taxonomy endpoint: https://api.depop.com/api/v3/attributes/
  - `is_boosted` boolean: Whether to boost the product. You don't need to send this with `true` if you have a "boosted shop" or you're part of the "free boost trial".

## Response `200`

Successful operation

- ProductCreateOrUpdateResponse
  - `product_id` number, required: The product id of the created or updated product.
  - `slug` string, required: The URL-friendly identifier for the product on Depop. This can be used with the `/api/v1/products/by-slug/{slug}/` endpoints.
  - `sku` string, nullable: The SKU of the product. - For PUT `/api/v1/products/by-sku/{sku}/`: Always present (same as the SKU in the URL path). - For PUT `/api/v1/products/by-slug/{slug}/`: Present if the product has a SKU, otherwise null. - For PUT `/api/v1/products/by-product-id/{productId}/`: Present if the product has a SKU, otherwise null. - For POST `/api/v1/products/`: Present if SKU was provided in the request, otherwise null.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden - Insufficient scope
- `422`: Unprocessable Entity - the product failed validation, or the seller's Depop account is not currently able to list items. Retrying the same request will not help until the product or the seller's account is fixed.

---

[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)
