Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Poshmark API page →
E-commerce & Marketplaces

Poshmark API & Scraper

The Poshmark API returns the US and Canadian social resale marketplace as clean JSON in six actions: search, product/detail, product/similar, seller/listings, seller/profile and suggest.

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search takes a keyword or browses a department, category or brand, and filters by size, colour, condition, price range, seller-paid shipping and availability — availability=sold returns sold listings, the comparables resale pricing is built from. Every row carries the listing id and URL, title, brand as listed and Poshmark's canonical brand, the current price as a number with its currency, the seller's stated original price (null when the seller did not state one), the price-drop percentage, whether it is sold and when, the condition, the size with per-size quantities, department and category, colours, likes, comments and shares, and the seller's username and closet URL. product/detail adds the description, every photo, the category path, style tags, the shipping price with any free or reduced shipping the seller offers, the seller's bundle discount and the public comments. Prices are USD on poshmark.com and CAD on poshmark.ca, read from each listing. Measured on 2026-09-15: 76 of 76 live calls succeeded across both countries; a 48-row search answered in a median 1.5 s and a listing in 0.8 s. No Poshmark account is involved. One ReefAPI key, one shared credit pool, the standard { ok, data, meta, error } envelope.

Reference

What a live call returns — seven categories, measured by value against the listing page

Two listings from each of seven searches (six US categories and one Canadian) were read with product/detail on 2026-09-15 and compared with the same listing's own public page. Title, price, currency, availability, canonical brand and new-versus-used condition matched on 14 of 14.

FieldFilled (of 14)Why it is not always filled
title, price, currency, brand, size, images, description14
department, category, colours, shipping price14
likes, comments, shares, seller username + closet URL14
first listed price14
subcategory13the seller did not pick one
condition12Poshmark leaves condition empty on some listings; null, never guessed
style tags8optional for the seller
original (retail) price6the seller did not state one — Poshmark stores 0, we return null
bundle discount4only sellers who set one
price-drop percentage1only listings whose price was cut

Speed and size, 2026-09-15, 76 consecutive live calls, 76 of 76 successful: search 24 calls, median 1,486 ms, about 0.73 MB for 48 rows; product/detail 24 calls, median 784 ms, about 20 KB; seller/listings 8 calls, median 1,055 ms; seller/profile 8 calls, median 976 ms, under 3.3 KB; product/similar 6 calls, median 1,219 ms; suggest 6 calls, median 985 ms.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/poshmark/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "nike"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "poshmark",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1546.8,
    "record_count": 48,
    "bytes": 728917,
    "cache_hit": false,
    "country": "us",
    "pagination": {
      "has_more": true,
      "page_size": 48,
      "next_cursor": "ENC_eyJtYXhfaWRzIjpbNDksMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YWFhOWM0NzM5NDUwNWRjMTVjMTBlOWIifQ"
    }
  },
  "data": {
    "results": [
      {
        "listing_id": "6aaa9c2f29572d2ca7d7efde",
        "title": "NWT Women NIKE DUAL FUSION LITE Size 6.5",
        "url": "https://poshmark.com/listing/NWT-Women-NIKE-DUAL-FUSION-LITE-Size-6-5-6aaa9c2f29572d2ca7d7efde",
        "brand": "Nike",
        "brand_canonical": "Nike",
        "brand_id": "53d96e505632a028000002f4",
        "price": 42,
        "currency": "USD",
        "original_price": null,
        "discount_from_original_percent": null,
        "first_listed_price": 42,
        "price_drop_percent": null,
        "status": "available",
        "is_sold": false,
        "sold_at": null,
        "condition": null,
        "condition_code": null,
        "size": "6.5",
        "size_code": "6.5",
        "size_system": null,
        "sizes": [
          {
            "size": "[trimmed-depth]",
            "size_code": "[trimmed-depth]",
            "size_system": "[trimmed-depth]",
            "quantity_available": "[trimmed-depth]",
            "quantity_sold": "[trimmed-depth]"
          }
        ],
        "quantity_available": 1,
        "multi_item": false,
        "department": "Kids",
        "category": "Shoes",
        "subcategories": [
          "Sneakers"
        ],
        "colors": [
          "Gray",
          "Pink"
        ],
        "style_tags": null,
        "shipping_discount": null,
        "image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/16/6aaa9c2f29572d2ca7d7efde/l_6aaa9c30046d1f5cf792a756.jpeg",
        "image_count": 7,
        "like_count": 0,
        "comment_count": 0,
        "share_count": 1,
        "seller": {
          "id": "55f9a3420a15a32b80316812",
          "username": "lovelytorii217",
          "url": "https://poshmark.com/closet/lovelytorii217",
          "picture": "https://di2ponv0v5otw.cloudfront.net/users/2024/12/25/11/t_676c5738788be8ada919b2ff.jpg"
        },
        "listed_at": "2026-09-16T06:40:10-07:00",
        "available_since": "2026-09-16T06:40:10-07:00",
        "publish_count": 1,
        "updated_at": "2026-09-16T06:40:22-07:00",
        "origin_country": "us",
        "available_in": [
          "us"
        ],
        "match": null
      },
      {
        "listing_id": "6aa9a35241ae66d34b718a4b",
        "title": "Nike men’s performance golf polo. Sharp Yellow with logo on sleeve. 2XL",
        "url": "https://poshmark.com/listing/Nike-men-s-performance-golf-polo-Sharp-Yellow-with-logo-on-sleeve-2XL-6aa9a35241ae66d34b718a4b",
        "brand": "Nike",
        "brand_canonical": "Nike",
        "brand_id": "53d96e505632a028000002f4",
        "price": 23,
        "currency": "USD",
        "original_price": null,
        "discount_from_original_percent": null,
        "first_listed_price": 26,
        "price_drop_percent": 12,
        "status": "available",
        "is_sold": false,
        "sold_at": null,
        "condition": null,
        "condition_code": null,
        "size": "XXL",
        "size_code": "XXL",
        "size_system": "us",
        "sizes": [
          {
            "size": "[trimmed-depth]",
            "size_code": "[trimmed-depth]",
            "size_system": "[trimmed-depth]",
            "quantity_available": "[trimmed-depth]",
            "quantity_sold": "[trimmed-depth]"
          }
        ],
        "quantity_available": 1,
        "multi_item": false,
        "department": "Men",
        "category": "Shirts",
        "subcategories": [
          "Polos"
        ],
        "colors": [
          "Yellow"
        ],
        "style_tags": null,
        "shipping_discount": null,
        "image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/15/6aa9a35241ae66d34b718a4b/l_6aa9a387ab650be897b6580f.jpg",
        "image_count": 5,
        "like_count": 0,
        "comment_count": 0,
        "share_count": 10,
        "seller": {
          "id": "5f4a8549ec7d7846009ee5ba",
          "username": "markamen",
          "url": "https://poshmark.com/closet/markamen",
          "picture": "https://di2ponv0v5otw.cloudfront.net/users/2026/07/19/18/t_6a5d7c81aeae841b22a62255.jpg"
        },
        "listed_at": "2026-09-15T13:00:33-07:00",
        "available_since": "2026-09-15T13:00:33-07:00",
        "publish_count": 3,
        "updated_at": "2026-09-16T06:40:08-07:00",
        "origin_country": "us",
        "available_in": [
          "us"
        ],
        "match": null
      },
      {
        "listing_id": "6aaa9c35c107369d2e683509",
        "title": "Nike Air Force 1 Fontanka Women Shoes Multi-Color Pink Prim Size 7.5",
        "url": "https://poshmark.com/listing/Nike-Air-Force-1-Fontanka-Women-Shoes-Multi-Color-Pink-Prim-Size-7-5-6aaa9c35c107369d2e683509",
        "brand": "Nike",
        "brand_canonical": "Nike",
        "brand_id": "53d96e505632a028000002f4",
        "price": 25,
        "currency": "USD",
        "original_price": null,
        "discount_from_original_percent": null,
        "first_listed_price": 25,
        "price_drop_percent": null,
        "status": "available",
        "is_sold": false,
        "sold_at": null,
        "condition": "good",
        "condition_code": "ug",
        "size": "7.5",
        "size_code": "7.5",
        "size_system": "us",
        "sizes": [
          {
            "size": "[trimmed-depth]",
            "size_code": "[trimmed-depth]",
            "size_system": "[trimmed-depth]",
            "quantity_available": "[trimmed-depth]",
            "quantity_sold": "[trimmed-depth]"
          }
        ],
        "quantity_available": 1,
        "multi_item": false,
        "department": "Women",
        "category": "Shoes",
        "subcategories": [
          "Sneakers"
        ],
        "colors": [
          "Pink",
          "Yellow"
        ],
        "style_tags": [
          "Platform",
          "Streetwear"
        ],
        "shipping_discount": null,
        "image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/16/6aaa9c35c107369d2e683509/l_6aaa9c357625b169c1a729ec.jpg",
        "image_count": 13,
        "like_count": 0,
        "comment_count": 0,
        "share_count": 0,
        "seller": {
          "id": "51d58699d00cbf4ce5008e48",
          "username": "alchemyandlace",
          "url": "https://poshmark.com/closet/alchemyandlace",
          "picture": "https://di2ponv0v5otw.cloudfront.net/users/2023/11/14/17/t_65541bd7b03f9b863383cedf.jpg"
        },
        "listed_at": "2026-09-16T06:40:06-07:00",
        "available_since": "2026-09-16T06:40:06-07:00",
        "publish_count": 1,
        "updated_at": "2026-09-16T06:40:07-07:00",
        "origin_country": "us",
        "available_in": [
          "us"
        ],
        "match": null
      }
    ],
    "count": 48,
    "next_cursor": "ENC_eyJtYXhfaWRzIjpbNDksMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YWFhOWM0NzM5NDUwNWRjMTVjMTBlOWIifQ",
    "total_results": 5000,
    "total_results_capped": true,
    "similar_results_available": null,
    "similar_rows_dropped": null,
    "filters": {
      "availability": "available",
      "sort": "relevance",
      "query": "nike"
    },
    "query": "nike",
    "country": "us"
  }
}
Actions

What the Poshmark API does

ActionDescriptionConcrete use caseKey params
searchSearch Poshmark listings by keyword, or browse a department, category or brand, in the US or Canada. Every row: listing id and url, title, brand, current price with the seller's stated original price, price-drop percentage, sold or available with the sold date, condition, size with per-size quantities, department and category, colours, seller-paid shipping flag, likes, comments and shares, the seller's username and closet url. Filter by department, category, brand, size, colour, condition, price range, shipping discount and availability (set availability=sold for sold comparables); sort by relevance, newest, price, likes or price drops; page with `next_cursor`.Pricing teams call search to search Poshmark listings by keyword, or browse a department, category or brand, in the US or….query, include_similar, country, department, category, ...
product/detailOne Poshmark listing in full, by listing id or URL: title, description, brand, current price, the seller's stated original price, first listed price and price-drop percentage, availability and sold date, condition, size and per-size quantities, department / category / subcategory path, colours, style tags, every photo, the shipping price with any seller discount (free or reduced), the seller's bundle discount, like / comment / share counts and the public comments, and the seller's username and closet url.Marketplace operators call product/detail to get one Poshmark listing in full, by listing id or URL.listing_id, country, max_rotations
product/similarThe listings Poshmark shows as similar to one listing (usually 16), with the same row fields as `search`.Catalog enrichment teams call product/similar to get the listings Poshmark shows as similar to one listing (usually 16), with the same row fields….listing_id, country, max_rotations
seller/listingsOne seller's closet: their for-sale or sold listings with the same row fields and filters as `search` (department, category, brand, size, colour, condition, price, shipping), sorted and paged. Use availability=sold for a seller's sales history.Retail analysts call seller/listings to get one seller's closet.seller, seller, country, department, category, ...
seller/profileA seller's public Poshmark profile by username, id or closet URL: username, picture, bio, join date, last active date, number of listings (resale, boutique, wholesale), followers and following, items sold as Poshmark displays it, orders shipped and whether the closet is on vacation hold.Pricing teams call seller/profile to get a seller's public Poshmark profile by username, id or closet URL.seller, country, max_rotations
suggestPoshmark's brand suggestions for a partial brand name — the exact names the `brand` filter matches.Marketplace operators call suggest to get poshmark's brand suggestions for a partial brand name.query, country, limit, max_rotations
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/poshmark/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"nike"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.poshmark.search with {"query":"nike"}.
Use cases

Who uses this API and why

  • Resale pricing tools pull availability=sold for a brand and size to see what comparable items last listed at before they sold, next to the live asks.
  • Sourcing and reselling apps watch a department or brand sorted by newest or by price drops to catch underpriced listings early.
  • Marketplace analysts read a seller's closet and profile — listings, sold history, followers, items sold — to size a competitor or a partner.
FAQ

Questions developers ask before integrating

Can I get SOLD listings, and is the price what it sold for?

You get sold listings with availability=sold, on search and on a seller's closet, each with sold_at. The price on a sold listing is its last LISTED price. Poshmark sales often close through an offer below that, and the accepted amount is not published, so treat sold prices as an upper bound of what the item went for. first_listed_price and price_drop_percent show how far the seller had already come down.

Is original_price a real retail price?

It is the seller's own claim, typed in when they listed the item, and many sellers leave it empty. Poshmark stores an empty one as 0; the API returns null instead, and computes discount_from_original_percent only when a stated original price is above the listing price. In the 144 search rows checked while building this, 81 had no original price.

Why does a keyword with no matches return nothing when Poshmark's site still shows listings?

Because those are not matches. When a keyword has no exact match Poshmark fills the page with 'similar' listings. By default the API leaves them out and tells you how many exist in similar_results_available; pass include_similar=true to get them, each marked match: similar. A nonsense keyword returns 0 rows with a similar count, not 48 unrelated listings dressed up as results.

Are shipping and bundle discounts included in the price?

No, and they are never subtracted from it. product/detail returns shipping as its own object — the price (0 when the seller pays all of it), the price before the seller's discount, and the currency — and a seller's bundle offer such as 15% off 2 or more items as bundle_discount with the percentage and the minimum number of items. price stays the listing's own price.

How many results are there? total_results says 5000.

5000 is Poshmark's ceiling, not a count, and total_results_capped says so whenever it is hit. Page through with next_cursor. Poshmark's index moves while you page, so a later page can repeat a few listings from an earlier one — measured at 0 to 8 repeats across three pages of 48 — so key your data on listing_id.

What does sort=newest order by?

By when a listing last became available, returned as available_since — not by when it was first listed (listed_at). Sellers re-list older items and those appear as new again; publish_count shows how many times a listing has been published. It is Poshmark's own near-order, not a strict sort.

Which countries work?

The United States (poshmark.com, USD) and Canada (poshmark.ca, CAD), chosen with country. Poshmark's Australian and Indian marketplaces have closed; country=au or in returns MARKET_UNAVAILABLE instead of a guess. Currency is read from each listing, so a Canadian listing stays CAD whichever country you call through.

What does Poshmark not publish?

A rating on a listing (items are one-off second-hand objects), a star rating for a seller on the public profile, the amount an accepted offer closed at, the buyer, and the list of people who liked a listing. seller/profile returns what the public closet shows: username, bio, join date, last active date, listing counts, followers and following, Poshmark's own items-sold label such as 30+, and orders shipped. Sellers' real names are not returned.

What is the Poshmark API?

Poshmark API is a ReefAPI endpoint group for us and canadian resale listings, sold prices, shipping discounts and seller closets. It returns live JSON through POST requests under /poshmark/v1.

Is the Poshmark API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Poshmark calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Poshmark login or account?

No login to Poshmark is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Poshmark data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Poshmark API use?

Poshmark actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Poshmark from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call poshmark actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / poshmark

Poshmark

US and Canadian resale listings, sold prices, shipping discounts and seller closets.

base /poshmark/v16 endpoints
post/poshmark/v1/product/detail1 credit

One Poshmark listing in full, by listing id or URL: title, description, brand, current price, the seller's stated original price, first listed price and price-drop percentage, availability and sold date, condition, size and per-size quantities, department / category / subcategory path, colours, style tags, every photo, the shipping price with any seller discount (free or reduced), the seller's bundle discount, like / comment / share counts and the public comments, and the seller's username and closet url.

ParameterAllowed / rangeDescription
listing_idrequiredPoshmark listing id (24 characters, the end of a listing URL) or the full listing URL. Every search row returns it as `listing_id`.
country = usoptionalus · caPoshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.
max_rotations = 3optional1–5Advanced: how many times to retry a difficult request (1-5).
Try in playground →
post/poshmark/v1/product/similar1 credit

The listings Poshmark shows as similar to one listing (usually 16), with the same row fields as `search`.

ParameterAllowed / rangeDescription
listing_idrequiredPoshmark listing id (24 characters, the end of a listing URL) or the full listing URL. Every search row returns it as `listing_id`.
country = usoptionalus · caPoshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.
max_rotations = 3optional1–5Advanced: how many times to retry a difficult request (1-5).
Try in playground →
post/poshmark/v1/seller/listings1 credit

One seller's closet: their for-sale or sold listings with the same row fields and filters as `search` (department, category, brand, size, colour, condition, price, shipping), sorted and paged. Use availability=sold for a seller's sales history.

ParameterAllowed / rangeDescription
sellerrequiredSeller username (the closet name in poshmark.com/closet/<username>), the seller id (`seller.id` on every listing), or the closet URL.
country = usoptionalus · caPoshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.
departmentoptionalWomen · Men · Kids · Home · Pets · ElectronicsPoshmark department.
categoryoptionalCategory inside the department, e.g. Women → Dresses, Jackets_&_Coats; Men → Shoes; Home → Kitchen; Electronics → Headphones. Needs `department`. Spaces or underscores both work; an unknown category is rejected with the valid list.
brandoptionalBrand name as Poshmark lists it (comma-separate up to 10). Matching is case-insensitive. `suggest` returns exact brand names.
sizeoptionalSize label(s) as sellers enter them, comma-separated: M, XL, 8, 10.5, OS (one size), 32x30.
coloroptionalColour(s), comma-separated: Red, Pink, Orange, Yellow, Green, Blue, Purple, Gold, Silver, Black, Gray, White, Cream, Brown, Tan.
conditionoptionalCondition(s), comma-separated: new_with_tags, not_new_with_tags, like_new, good, fair, boutique (new items from Poshmark boutique sellers).
availability = availableoptionalavailable · soldFor-sale listings, or sold ones. A sold listing's price is its last listed price — Poshmark does not publish the amount an accepted offer closed at.
price_minoptional0–Lowest listed price, in the marketplace currency.
price_maxoptional0–Highest listed price, in the marketplace currency.
shippingoptionalfree · discountedOnly listings whose seller pays part or all of the shipping.
sort = relevanceoptionalrelevance · newest · price_asc · price_desc · most_liked · price_dropOrder of results. Unknown values are rejected, not ignored.
limit = 48optional1–100Listings per call, 1-100 (Poshmark's own page is 48).
cursoroptionalContinue a previous call: pass back its `next_cursor`. `next_cursor: null` is the end.
max_rotations = 3optional1–5Advanced: how many times to retry a difficult request (1-5).
Try in playground →
post/poshmark/v1/seller/profile1 credit

A seller's public Poshmark profile by username, id or closet URL: username, picture, bio, join date, last active date, number of listings (resale, boutique, wholesale), followers and following, items sold as Poshmark displays it, orders shipped and whether the closet is on vacation hold.

ParameterAllowed / rangeDescription
sellerrequiredSeller username (the closet name in poshmark.com/closet/<username>), the seller id (`seller.id` on every listing), or the closet URL.
country = usoptionalus · caPoshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.
max_rotations = 3optional1–5Advanced: how many times to retry a difficult request (1-5).
Try in playground →
post/poshmark/v1/suggest1 credit

Poshmark's brand suggestions for a partial brand name — the exact names the `brand` filter matches.

ParameterAllowed / rangeDescription
queryrequiredThe start of a brand name.
country = usoptionalus · caPoshmark marketplace. Prices come back in that marketplace's currency. Poshmark Australia and India have closed and return MARKET_UNAVAILABLE.
limit = 10optional1–20Maximum suggestions, 1-20.
max_rotations = 3optional1–5Advanced: how many times to retry a difficult request (1-5).
Try in playground →