Poshmark active listings
GET /v1/poshmark/listings searches one page of Poshmark US listings for sale now, by keyword, with condition, price and sort options.
https://api.soldgraph.com/v1/poshmark/listingsSearch Poshmark US listings that are for sale now. Each call returns one page, in the order you pick with sort.
displayed_price is the seller's current asking price. listed_at is when the listing was published. seller_text is the seller's Poshmark username. condition is Poshmark's own code, like nwt or ug. See condition codes.
Poshmark doesn't show shipping, bids, end times or promoted placements in search. So displayed_shipping, shipping_text, promoted, bid_count, ends_at, best_offer and location_text are always null. format is always fixed_price.
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string | Required | Search keywords, 1–200 characters, as you'd type them into the marketplace's search box. Be specific: model, size, grade, edition. |
page | integer, 1–100 | 1 | Source page to fetch. On Poshmark, Mercari and Depop, pages after 1 also need cursor. |
min_price | integer, 0–1000000 | Lowest price, in whole US dollars. Optional. Must not be more than max_price. You can send it without max_price. | |
max_price | integer, 0–1000000 | Highest price, in whole US dollars. Optional. You can send it without min_price. | |
marketplace | poshmark | poshmark | Optional. If sent, it must be poshmark. |
country | us | us | Only us is supported. |
sort | best_match, newest or price_asc | best_match | Poshmark's listing order. ending_soon isn't available on Poshmark and returns 422. |
condition | nwt, uln, ug or uf | One of Poshmark's own condition codes: nwt (new with tags), uln (like new), ug (good) or uf (fair). Rows use the same codes. Poshmark filters one condition at a time, so more than one returns 422. | |
cursor | string | The previous page's next_cursor. Leave it out on page 1. Required on every later page. |
curl -G https://api.soldgraph.com/v1/poshmark/listings \ -H "Authorization: Bearer $SOLDGRAPH_KEY" \ --data-urlencode "q=Levis 501" \ -d page=1The first call usually returns 202 and a job to poll. Search jobs covers polling and retries.
#Filters
conditiontakes one Poshmark code:nwt,uln,ugoruf. Poshmark filters one condition at a time, so more than one returns422.min_priceandmax_priceare whole US dollars. You can send either one alone.sortisbest_match,newestorprice_asc.ending_soonreturns422, because Poshmark has no auctions.
Poshmark applies the filters, so reported_total counts only matching listings. Keep the same filters and sort on every page.
#Pages and cursors
Pages work the same as Poshmark sold listings. Start with page=1 and no cursor. For the next page, send page set to next_page and cursor set to next_cursor.
- A later page without a cursor, or a cursor in the wrong format, returns
422. - A cursor Poshmark doesn't accept fails the job with
error.coderejected. It costs nothing. page_sizecounts the rows Poshmark returned before we removed listings that aren't for sale. Socountcan be smaller.
#Example response
{ "request_id": "00000000-0000-4000-8000-000000000001", "status": "complete", "credits": 1, "cached": false, "result": { "provider": "poshmark", "country": "us", "query": "Levis 501", "page": 1, "page_size": 48, "count": 1, "reported_total": 1, "next_page": null, "collected_at": "2026-09-23T14:02:11Z", "schema_version": 1, "completeness": "provider_page_only", "data": [ { "id": "000000000000000000000002", "title": "Example Levi’s 501 jeans", "link": "https://poshmark.com/listing/000000000000000000000002", "promoted": null, "format": "fixed_price", "displayed_price": { "amount": 42, "currency": "USD" }, "displayed_price_text": "$42.00", "displayed_shipping": null, "shipping_text": null, "condition": "uln", "brand": "Levi's", "size": "30", "listed_at": "2026-09-27T10:04:12-07:00", "bid_count": null, "ends_at": null, "best_offer": null, "seller_text": "example_closet", "location_text": null, "image": "https://di2ponv0v5otw.cloudfront.net/posts/example.jpg" } ], "field_notes": "Listings are in the marketplace's order and priced at the seller's current ask. Only available inventory is included; unverified fields are null.", "next_cursor": null }}| Field | Type | Description |
|---|---|---|
request_id | string | ID of this request. Poll it at /v1/jobs/{request_id}. |
status | string | pending, complete or failed. Always check it, even on HTTP 200. |
credits | integer | Requests charged: 1 when complete, 0 while pending or when failed. |
cached | boolean | True when the result came from the 15-minute cache. |
poll_url | string | Only while pending. A path like /v1/jobs/{id}: join it to https://api.soldgraph.com, not to the /v1 base URL. |
error.code | string | Only when failed. See failed job codes. |
result | object | Only when complete. One source page from the marketplace. |
result.provider | string | Marketplace ID, like ebay or poshmark. |
result.country | string | Always us. |
result.query | string | The q you sent, with extra spaces removed. |
result.page | integer | The page you asked for. |
result.count | integer | Rows in result.data on this page. |
result.reported_total | integer | Total matches the marketplace reports for the search. It may be rounded or capped. |
result.next_page | integer | null | Send this as page to get the next page. Null on the last page. |
result.collected_at | string | When we collected the page, as an ISO 8601 timestamp. |
result.schema_version | integer | Version of this response shape. Currently 1. |
result.completeness | string | Always provider_page_only: one page, not a full sales history. |
result.field_notes | string | Plain-text notes on how to read this page's fields. |
result.page_size | integer | Rows Poshmark returned before we removed listings that aren't for sale. It can be larger than count. |
result.next_cursor | string | null | Send this as cursor, with page=next_page, to get the next page. Null on the last page. |
result.data[].id | string | The marketplace's listing ID. |
result.data[].title | string | null | Listing title as shown. |
result.data[].link | string | URL of the listing on the marketplace. |
result.data[].promoted | null | Always null on Poshmark. |
result.data[].format | string | Always fixed_price on Poshmark. |
result.data[].displayed_price | object | { amount, currency } of the seller's current asking price. |
result.data[].displayed_price_text | string | null | The price text, like $35.00. |
result.data[].displayed_shipping | null | Always null on Poshmark. |
result.data[].shipping_text | null | Always null on Poshmark. |
result.data[].condition | string | null | Poshmark's own condition code, as Poshmark returns it, like nwt or ug. See condition codes. |
result.data[].brand | string | null | Brand as the seller entered it. |
result.data[].size | string | null | Size as the seller entered it. |
result.data[].listed_at | string | null | When the listing was published, as an ISO 8601 timestamp. |
result.data[].bid_count | null | Always null on Poshmark. |
result.data[].ends_at | null | Always null on Poshmark. |
result.data[].best_offer | null | Always null on Poshmark. |
result.data[].seller_text | string | null | The seller's Poshmark username. |
result.data[].location_text | null | Always null on Poshmark. |
result.data[].image | string | null | Image URL on Poshmark's image CDN. |