Poshmark API

Poshmark's US and Canadian resale market as JSON, sold listings included

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Poshmark endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
P
/poshmark/v1

6 active endpoints. Every call is 1 credit.

  • POST/poshmark/v1/search
  • POST/poshmark/v1/product/detail
  • POST/poshmark/v1/product/similar
  • POST/poshmark/v1/seller/listings
  • POST/poshmark/v1/seller/profile
  • POST/poshmark/v1/suggest

What Poshmark endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

1 cr

Search Poshmark listings by keyword, or browse a department, category or brand, in the US or…

required
optional
query, include_similar, country, department, category, brand, size, color, condition, availability, price_min, price_max, shipping, sort, limit, cursor, max_rotations

product/detail

1 cr

One Poshmark listing in full, by listing id or URL.

required
listing_id
optional
country, max_rotations

product/similar

1 cr

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

required
listing_id
optional
country, max_rotations

seller/listings

1 cr

One seller's closet.

required
seller
optional
seller, country, department, category, brand, size, color, condition, availability, price_min, price_max, shipping, sort, limit, cursor, max_rotations

seller/profile

1 cr

A seller's public Poshmark profile by username, id or closet URL.

required
seller
optional
country, max_rotations

suggest

1 cr

Poshmark's brand suggestions for a partial brand name.

required
query
optional
country, limit, max_rotations

Every parameter, every allowed value →

Poshmark API

2 of 6 endpoints, ready to run

View docs ↗

Poshmark listings by keyword, department, category or brand: listing id and URL, title, brand, price with the seller's stated original price, sold or available, condition, size, likes, and the seller's closet — filtered by size, colour, condition, price, seller-paid shipping and availability.

1 credit0 required · 5 optional
POST/poshmark/v1/search
ok1273 ms · 20 records · sample
{
  "ok": true,
  "meta": {
    "api": "poshmark",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1272.6,
    "record_count": 20,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "listing_id": "6a88883ac9ddecc7d4026ca4",
        "title": "lululemon athletica align Faded Olive Tie-Dye High-Rise Leggings - 28”",
        "url": "https://poshmark.com/listing/lululemon-athletica-align-Faded-Olive-Tie-Dye-High-Rise-Leggings-28-6a88883ac9ddecc7d4026ca4",
        "brand": "lululemon athletica",
        "brand_canonical": "lululemon athletica",
        "brand_id": "53d96e4f5632a02800000281",
        "price": 26,
        "currency": "USD",
        "original_price": null,
        "discount_from_original_percent": null,
        "first_listed_price": 35,
        "price_drop_percent": null,
        "status": "sold_out",
        "is_sold": true,
        "sold_at": "2026-09-16T05:29:30-07:00",
        "condition": "good",
        "condition_code": "ug",
        "size": "4",
        "size_code": "4",
        "size_system": "us",
        "sizes": [
          {
            "size": "4",
            "size_code": "4",
            "size_system": "us",
            "quantity_available": 0,
            "quantity_sold": 1
          }
        ],
        "quantity_available": 0,
        "multi_item": false,
        "department": "Women",
        "category": "Pants & Jumpsuits",
        "subcategories": [
          "Leggings"
        ],
        "colors": [
          "Black",
          "Green"
        ],
        "style_tags": null,
        "shipping_discount": null,
        "image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/08/21/6a88883ac9ddecc7d4026ca4/l_6a888842b9dd70d5a9c3ebb1.jpg",
        "image_count": 9,
        "like_count": 3,
        "comment_count": 5,
        "share_count": 8,
        "listed_at": "2026-08-21T10:21:00-07:00",
        "available_since": "2026-08-21T10:21:00-07:00",
        "publish_count": 14,
        "updated_at": "2026-09-16T05:29:30-07:00",
        "origin_country": "us",
        "available_in": [
          "us"
        ],
        "match": null
      },
      {
        "listing_id": "6aa9daf5c9ddeccf967a1840",
        "title": "Lululemon Align 25” Leggings Size 8",
        "url": "https://poshmark.com/listing/Lululemon-Align-25-Leggings-Size-8-6aa9daf5c9ddeccf967a1840",
        "brand": "lululemon athletica",
        "brand_canonical": "lululemon athletica",
        "brand_id": "53d96e4f5632a02800000281",
        "price": 23,
        "currency": "USD",
        "original_price": null,
        "discount_from_original_percent": null,
        "first_listed_price": 30,
        "price_drop_percent": null,
        "status": "sold_out",
        "is_sold": true,
        "sold_at": "2026-09-16T05:27:26-07:00",
        "condition": "good",
        "condition_code": "ug",
        "size": "8",
        "size_code": "8",
        "size_system": "us",
        "sizes": [
          {
            "size": "8",
            "size_code": "8",
            "size_system": "us",
            "quantity_available": 0,
            "quantity_sold": 1
          }
        ],
        "quantity_available": 0,
        "multi_item": false,
        "department": "Women",
        "category": "Pants & Jumpsuits",
        "subcategories": [
          "Leggings"
        ],
        "colors": [
          "Blue",
          "Black"
        ],
        "style_tags": [
          "Athleisure",
          "Lululemon",
          "Camo"
        ],
        "shipping_discount": null,
        "image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/15/6aa9daf5c9ddeccf967a1840/l_6aa9db0024cc87b9f5a30bef.jpg",
        "image_count": 4,
        "like_count": 1,
        "comment_count": 0,
        "share_count": 29,
        "listed_at": "2026-09-15T17:10:27-07:00",
        "available_since": "2026-09-15T17:10:27-07:00",
        "publish_count": 1,
        "updated_at": "2026-09-16T05:27:26-07:00",
        "origin_country": "us",
        "available_in": [
          "us"
        ],
        "match": null
      },
      {
        "listing_id": "6aa98b86adedd113e55c0dcd",
        "title": "lululemon Align Black Jogger Leggings",
        "url": "https://poshmark.com/listing/lululemon-Align-Black-Jogger-Leggings-6aa98b86adedd113e55c0dcd",
        "brand": "lululemon athletica",
        "brand_canonical": "lululemon athletica",
        "brand_id": "53d96e4f5632a02800000281",
        "price": 21,
        "currency": "USD",
        "original_price": null,
        "discount_from_original_percent": null,
        "first_listed_price": 25,
        "price_drop_percent": null,
        "status": "sold_out",
        "is_sold": true,
        "sold_at": "2026-09-16T01:14:58-07:00",
        "condition": "like_new",
        "condition_code": "uln",
        "size": "4",
        "size_code": "4",
        "size_system": "us",
        "sizes": [
          {
            "size": "4",
            "size_code": "4",
            "size_system": "us",
            "quantity_available": 0,
            "quantity_sold": 1
          }
        ],
        "quantity_available": 0,
        "multi_item": false,
        "department": "Women",
        "category": "Pants & Jumpsuits",
        "subcategories": [
          "Leggings"
        ],
        "colors": [
          "Black"
        ],
        "style_tags": null,
        "shipping_discount": null,
        "image": "https://di2ponv0v5otw.cloudfront.net/posts/2026/09/15/6aa98b86adedd113e55c0dcd/l_6aa98b8f31f0f6dd92a63b89.jpg",
        "image_count": 5,
        "like_count": 3,
        "comment_count": 0,
        "share_count": 13,
        "listed_at": "2026-09-15T11:19:30-07:00",
        "available_since": "2026-09-15T11:19:30-07:00",
        "publish_count": 1,
        "updated_at": "2026-09-16T01:14:58-07:00",
        "origin_country": "us",
        "available_in": [
          "us"
        ],
        "match": null
      }
    ],
    "count": 20,
    "next_cursor": "ENC_eyJtYXhfaWRzIjpbMjEsMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YWFhOWM1MzY0Mzk5YjRiNWVjZjE4MDQifQ",
    "total_results": 5000,
    "total_results_capped": true,
    "similar_results_available": null,
    "similar_rows_dropped": null,
    "filters": {
      "availability": "sold",
      "sort": "relevance",
      "query": "lululemon align"
    },
    "query": "lululemon align",
    "country": "us"
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Poshmark API works

Poshmark is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 252 engines.

02
Call
POST /poshmark/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Price a second-hand item against what similar ones sold at, then read the listing you want

A for-sale listing tells you what a seller hopes to get. Poshmark also keeps its sold listings public, which is where resale pricing starts — with one caveat the API states rather than hides.

01search
POST/poshmark/v1/search
{"query": "lululemon align", "size": "6", "availability": "sold", "limit": 48}

Sold listings of one item in one size, each with its last listed price, sold date, condition and first listed price. The listed price is an upper bound: offers can close lower.

02search
POST/poshmark/v1/search
{"query": "lululemon align", "size": "6", "sort": "price_asc"}

The live asks for the same item, cheapest first. The gap to the sold band is the spread you are trading.

03detail
POST/poshmark/v1/product/detail
{"listing_id": "<id from step 2>"}

The listing in full, including the shipping price after any seller discount and the seller's bundle offer — neither is folded into price.

A sold comparable set, the live asks against it, and the true delivered cost of the listing you pick — three calls.

request
curl -X POST https://api.reefapi.com/poshmark/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"nike"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "poshmark",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

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.

Which countries, which prices, and what 'sold' and 'newest' really mean

poshmark.com and poshmark.ca, measured on 2026-09-15 across 76 consecutive live calls, 51 end-to-end cases and 14 listings compared with their own pages. Three of these lines go against us.

Countries

United States (poshmark.com, USD) and Canada (poshmark.ca, CAD) with the country parameter. Poshmark Australia and India have closed; au and in return MARKET_UNAVAILABLE.

Currency

Read from each listing, not from the country: a Canadian listing stays CAD even when fetched through the US site.

Sold prices

availability=sold returns sold listings with sold_at. The price is the last listed price; the amount an accepted offer closed at is not published.

Original price

The seller's own claim, often missing. Missing is null, never 0, and the discount against it is only computed when it is really above the price.

No-match keywords

Poshmark pads an empty search with similar listings. They are left out by default and counted; include_similar=true returns them, marked.

Paging

next_cursor pages through results; Poshmark's live index can repeat a few listings on a later page, so key on listing_id. total_results is capped at 5000.

Account

No Poshmark account is involved. Comments, likes counts and seller profiles are the public ones; the list of people who liked a listing is not available.

What people build with Poshmark

The jobs this data is most often used for.

6

endpoints

1

credit per call

01

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.

02

Sourcing and reselling apps watch a department or brand sorted by newest or by price drops to catch underpriced listings early.

03

Marketplace analysts read a seller's closet and profile — listings, sold history, followers, items sold — to size a competitor or a partner.

What Poshmark data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 252 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/poshmark/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"nike"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/poshmark/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "nike"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Poshmark.

Get a free key →
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.

91 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Poshmark, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.