depop Insights API

Shop and product insights

OpenAPI Specification

depop-insights-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Seller API status Insights API
  version: 1.0.0
  description: 'Externally facing API to allow enterprise partners to automate listing on Depop.


    ## OAuth 2.0 Scopes


    This API uses OAuth 2.0 scopes to control access to different resources. Each endpoint requires specific scopes to access:


    - **`products_read`** - Required to read product information and listings

    - **`products_write`** - Required to create, update, or delete products

    - **`orders_read`** - Required to read order information and order history

    - **`orders_write`** - Required to mark orders as shipped or process refunds

    - **`offers_read`** - Required to read offer pricing information (auto send offer price, auto negotiate offer price)

    - **`offers_write`** - Required to set or modify offer prices (auto send offer price, auto negotiate offer price)

    - **`shop_read`** - Required to read shop information including seller addresses and available shipping providers


    API key tokens have access to all scopes, while OAuth tokens are limited to the scopes specified in the token.


    If you attempt to access an endpoint without the required scope, you will receive a `403 Forbidden` response with the error code `insufficient_scope`.'
servers:
- url: https://partnerapi-staging.depop.com
- url: https://partnerapi.depop.com
security:
- BearerAuth: []
tags:
- name: Insights
  description: Shop and product insights
paths:
  /api/v1/insights/shop/live/:
    get:
      tags:
      - Insights
      summary: Get shop insights
      description: 'This endpoint returns insights about the authenticated seller''s shop, including product counts, shop rating, offers awaiting review, boost ad counts and orders awaiting shipping.


        **Required OAuth Scopes:** at least one of the scopes below. Each section of the response is included only when its corresponding scope is present, and omitted otherwise. A `403` is returned only when none of these scopes are present.

        - `products_read` - Include product counts (`products`) and boost ad counts (`boost`). - `shop_read` - Include shop rating (`rating`). - `offers_read` - Include offers awaiting seller review (`offers`). - `orders_read` - Include orders awaiting shipping (`orders`).


        A section is included in the response only when its corresponding scope is present, and is omitted entirely otherwise. A `403` is returned only when the token has none of the four scopes above.

        **Note:** Counters may be delayed by up to 60 minutes and may not reflect the most recent changes to your shop inventory.'
      operationId: getShopInsightsLive
      responses:
        '200':
          description: Shop insights. Each section is present only when the token holds the scope that section requires; sections for missing scopes are omitted. The `orders` section is additionally omitted when there are no orders awaiting shipping.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShopInsightsResponse'
              example:
                products:
                  on_sale_count: 42
                  total_count: 150
                rating:
                  average: 4.8
                  count: 120
                offers:
                  awaiting_seller_review_count: 8
                boost:
                  live_count: 25
                  sold_count: 4
                orders:
                  awaiting_shipping_count: 7
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '502':
          $ref: '#/components/responses/BadGateway'
  /api/v1/insights/products/by-sku/{sku}/live/:
    get:
      tags:
      - Insights
      summary: Get product insights by SKU
      description: 'This endpoint returns live insights about a single product in the authenticated seller''s shop, identified by its SKU, including likes, bag adds, offers awaiting review and boosted-listing performance.


        **Required OAuth Scopes:** at least one of the scopes below. Each section of the response is included only when its corresponding scope is present, and omitted otherwise. A `403` is returned only when none of these scopes are present.

        - `products_read` - Include likes (`likes_count`) and bag adds (`bag_count`). - `offers_read` - Include offers awaiting review (`offers`).'
      operationId: getProductInsightsLiveBySku
      parameters:
      - name: sku
        in: path
        description: SKU of the product to fetch insights for.
        required: true
        schema:
          type: string
          maxLength: 50
        example: ABC-12345-S-BL
      responses:
        '200':
          description: Product insights. Each section is present only when the token holds the scope that section requires; sections for missing scopes are omitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductInsightsResponse'
              example:
                likes_count: 34
                bag_count: 12
                offers:
                  awaiting_seller_review_count: 3
                  awaiting_buyer_review_count: 1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/ProductNotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '502':
          $ref: '#/components/responses/BadGateway'
  /api/v1/insights/products/by-slug/{slug}/live/:
    get:
      tags:
      - Insights
      summary: Get product insights by slug
      description: 'This endpoint returns live insights about a single product in the authenticated seller''s shop, identified by its slug, including likes, bag adds, offers awaiting review and boosted-listing performance.


        **Required OAuth Scopes:** at least one of the scopes below. Each section of the response is included only when its corresponding scope is present, and omitted otherwise. A `403` is returned only when none of these scopes are present.

        - `products_read` - Include likes (`likes_count`) and bag adds (`bag_count`). - `offers_read` - Include offers awaiting review (`offers`).'
      operationId: getProductInsightsLiveBySlug
      parameters:
      - name: slug
        in: path
        description: The slug of the product to fetch insights for.
        required: true
        schema:
          type: string
        example: vintage-nike-t-shirt-7033001
      responses:
        '200':
          description: Product insights. Each section is present only when the token holds the scope that section requires; sections for missing scopes are omitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductInsightsResponse'
              example:
                likes_count: 34
                bag_count: 12
                offers:
                  awaiting_seller_review_count: 3
                  awaiting_buyer_review_count: 1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/ProductNotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '502':
          $ref: '#/components/responses/BadGateway'
  /api/v1/insights/products/by-product-id/{productId}/live/:
    get:
      tags:
      - Insights
      summary: Get product insights by product ID
      description: 'This endpoint returns live insights about a single product in the authenticated seller''s shop, identified by its internal product ID, including likes, bag adds, offers awaiting review and boosted-listing performance.


        **Required OAuth Scopes:** at least one of the scopes below. Each section of the response is included only when its corresponding scope is present, and omitted otherwise. A `403` is returned only when none of these scopes are present.

        - `products_read` - Include likes (`likes_count`) and bag adds (`bag_count`). - `offers_read` - Include offers awaiting review (`offers`).'
      operationId: getProductInsightsLiveByProductId
      parameters:
      - name: productId
        in: path
        description: The internal product ID of the product to fetch insights for.
        required: true
        schema:
          type: integer
          format: int64
        example: 7033001
      responses:
        '200':
          description: Product insights. Each section is present only when the token holds the scope that section requires; sections for missing scopes are omitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductInsightsResponse'
              example:
                likes_count: 34
                bag_count: 12
                offers:
                  awaiting_seller_review_count: 3
                  awaiting_buyer_review_count: 1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/ProductNotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '502':
          $ref: '#/components/responses/BadGateway'
components:
  schemas:
    ShopOrdersInsights:
      type: object
      description: Order insights for the shop.
      required:
      - awaiting_shipping_count
      properties:
        awaiting_shipping_count:
          type: integer
          description: Count of orders awaiting shipping. Counts orders whose receipt is within the recent cut-off window and that have not been refunded. Capped at 20.
          example: 5
          maximum: 20
    ErrorItem:
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          example: missing_attribute
          description: The error code.
        message:
          type: string
          example: Missing mandatory field
          description: The error message.
    ProductBoostInsights:
      type: object
      description: Boosted listing (ads) performance for the product. Included only when the token has the `products_read` scope. Individual counters are omitted when the underlying data is unavailable.
      properties:
        organic_clicks:
          type: integer
          description: Number of clicks from organic (non-boosted) placements.
          example: 120
        boosted_clicks:
          type: integer
          description: Number of clicks from boosted placements.
          example: 45
        organic_impressions:
          type: integer
          description: Number of impressions from organic (non-boosted) placements.
          example: 3400
        boosted_impressions:
          type: integer
          description: Number of impressions from boosted placements.
          example: 900
    ShopInsightsResponse:
      type: object
      description: Insights for the authenticated seller's shop. Counters may be delayed by up to 60 minutes.
      properties:
        products:
          $ref: '#/components/schemas/ShopProductsInsights'
        rating:
          $ref: '#/components/schemas/ShopRatingInsights'
        boost:
          $ref: '#/components/schemas/ShopBoostInsights'
        orders:
          $ref: '#/components/schemas/ShopOrdersInsights'
        offers:
          $ref: '#/components/schemas/ShopOffersInsights'
    ShopRatingInsights:
      type: object
      description: Seller rating insights for the shop.
      required:
      - average
      - count
      properties:
        average:
          type: number
          format: double
          description: Average seller rating across all reviews.
          example: 4.8
        count:
          type: integer
          description: Number of seller reviews received.
          example: 120
    ProductOffersInsights:
      type: object
      description: Offer insights for the product. Included only when the token has the `offers_read` scope.
      required:
      - awaiting_seller_review_count
      - awaiting_buyer_review_count
      properties:
        awaiting_seller_review_count:
          type: integer
          description: Number of offers on the product awaiting the seller's review.
          example: 3
        awaiting_buyer_review_count:
          type: integer
          description: Number of offers on the product awaiting the buyer's review.
          example: 1
    ShopOffersInsights:
      type: object
      description: Offer insights for the shop.
      required:
      - awaiting_seller_review_count
      properties:
        awaiting_seller_review_count:
          type: integer
          description: Number of offers across the shop awaiting the seller's review.
          example: 8
    ShopProductsInsights:
      type: object
      description: Product count insights for the shop.
      required:
      - on_sale_count
      - total_count
      properties:
        on_sale_count:
          type: integer
          description: Number of products currently on sale.
          example: 42
        total_count:
          type: integer
          description: Total number of products in the shop.
          example: 150
    ErrorResponse:
      type: object
      properties:
        id:
          type: string
          example: a210923f-c1f3-4d84-a2bd-7f18c68553e2
          description: A unique identifier for the error response.
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorItem'
      example:
        id: a210923f-c1f3-4d84-a2bd-7f18c68553e2
        errors:
        - code: product_not_found
          message: 'Product (sku: womens-tshirt-1, id: 123) not found'
    ProductInsightsResponse:
      type: object
      description: Live insights for a single product. Each section is present only when the token holds the scope that section requires; sections for missing scopes are omitted.
      properties:
        likes_count:
          type: integer
          description: Number of likes on the product. Included only when the token has the `products_read` scope.
          example: 34
        bag_count:
          type: integer
          description: Number of users who have added the product to their bag. Included only when the token has the `products_read` scope.
          example: 12
        offers:
          $ref: '#/components/schemas/ProductOffersInsights'
        boost:
          $ref: '#/components/schemas/ProductBoostInsights'
    ShopBoostInsights:
      type: object
      description: Boosted listings (ads) insights for the shop.
      required:
      - live_count
      - sold_count
      properties:
        live_count:
          type: integer
          description: Number of boosted listings currently live.
          example: 12
        sold_count:
          type: integer
          description: Number of boosted listings that have sold.
          example: 34
  responses:
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            id: a210923f-c1f3-4d84-a2bd-7f18c68553e2
            errors:
            - code: unauthorized
              message: invalid api key
    TooManyRequests:
      description: Too Many Requests - a rate limit has been exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            id: a210923f-c1f3-4d84-a2bd-7f18c68553e2
            errors:
            - code: too_many_requests
              message: Rate limit exceeded. Please retry later.
    Forbidden:
      description: Forbidden - Insufficient scope
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            id: a210923f-c1f3-4d84-a2bd-7f18c68553e2
            errors:
            - code: insufficient_scope
              message: 'Required scope: products_write'
    BadGateway:
      description: Bad Gateway - an upstream service required to build the insights response failed or returned an unexpected response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            id: a210923f-c1f3-4d84-a2bd-7f18c68553e2
            errors:
            - code: unexpected_response
              message: An upstream request at depop has failed to be processed.
    ProductNotFound:
      description: Not Found - the product does not exist or is not owned by the authenticated seller
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            id: a210923f-c1f3-4d84-a2bd-7f18c68553e2
            errors:
            - code: product_not_found
              message: 'Product (sku: ABC-12345-S-BL, id: None, slug: None) not found'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key