# Tise Nordic Second-Hand Marketplace

> Search Tise, the Nordic second-hand marketplace (clothes, shoes, bags, home, kids, hobby) in Norway, Sweden, Denmark, Finland, Germany, the Netherlands, the UK, the US or Australia. Free text plus the site's own filters: category, brand, condition, colour, material, gender, size, price range, Second Chance, and its four sort orders. 18 listings per page, paged by cursor. Nothing is required: no parameters lists the newest listings in Norway.
> ReefAPI engine `tise` · 9 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/tise/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/tise/v1/search — 2 credits
Search Tise, the Nordic second-hand marketplace (clothes, shoes, bags, home, kids, hobby) in Norway, Sweden, Denmark, Finland, Germany, the Netherlands, the UK, the US or Australia. Free text plus the site's own filters: category, brand, condition, colour, material, gender, size, price range, Second Chance, and its four sort orders. 18 listings per page, paged by cursor. Nothing is required: no parameters lists the newest listings in Norway.

**Parameters:**
- `country` (enum, optional, default "no") — Tise market to search. Each row keeps its own country_code and currency; nothing is converted. [one of: no, se, dk, fi, de, nl, gb, us, au]
- `location` (enum, optional, default "country") — `country` (default, as the app opens): listings in that market. `all`: also sellers from other countries who ship there. [one of: country, all]
- `query` (string, optional) — Free text as a Nordic shopper types it: `levis`, `vintage skinnjakke`, `stokke tripp trapp`. Optional; empty browses the newest listings.
- `category` (array, optional) — One or more Tise category ids at any depth (`wearables`, `home`, `wearables.clothes.pants.jeans`). From `categories`, `suggest` or a row's `category`.
- `brand_ids` (array, optional) — One or more Tise brand ids (Levi's `vuYRhl`), from `brands`, `suggest` or a row's brand.id.
- `condition` (array, optional) — One or more of the site's four conditions. [one of: new, lightly_used, used, well_used]
- `colors` (array, optional) — One or more colours (the site's 19). [one of: black, grey, white, multi, beige, green, khaki, blue, navy, turquoise, purple, pink, red, burgundy, brown, orange, yellow, silver, gold]
- `materials` (array, optional) — One or more materials (the site's 28). [one of: acryl, alpaca, angora, bamboo, cotton, cupro, elastan, goretex, hemp, faux, cashmere, linen, lycra, lyocell, merino, modal, mohair, nylon, polyamide, polyester, rayon, satin, suede, silk, leather, spandex, wool, viscose]
- `gender` (array, optional) — female, male or any (unisex). Tise also returns listings that have no gender set (measured 4-12 of 16 rows), never the other gender. [one of: female, male, any]
- `sizes` (array, optional) — One or more sizes as `<group>:<size>`: tops:M, bottoms:S, shoes:38, children:<size>, children_shoes:<size>. Matches the row's `size`.
- `min_price` (number, optional) — Lowest price in the market's currency (NOK for no). `1` removes the many price-0 giveaway, swap and wanted posts.
- `max_price` (number, optional) — Highest price in the market's currency.
- `second_chance` (boolean, optional, default false) — Only Tise Second Chance listings: brands' returns, samples and seconds sold through Tise.
- `sort` (enum, optional, default "newest") — newest (the site's default), relevance, price_asc, price_desc. price_asc starts with price-0 posts unless min_price is set. [one of: newest, relevance, price_asc, price_desc]
- `cursor` (string, optional) — The `next_cursor` of the previous page, passed back unchanged with the same other parameters. Omit for the first page.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {query, country, sort, filters_applied, count, has_more, next_cursor, sponsored_tiles_dropped, listings[]}. Each listing: {id, advert_id, url, title, description, brand{id,name}, custom_brand, category, category_path[], condition, condition_label, condition_en, size, fits_like, gender, colors[{id,name,hex}], materials[{id,name}], price, price_zero, price_minor, currency, is_sold, instant_buy, resell_allowed, like_count, country_code, location{label,lat,lng,accuracy,radius_m}, shipping{options[{id,name}],summary,size_category}, meet_in_person, meet_summary, image, images[], image_count, created_at, updated_at, visible_since, is_second_chance, is_promoted, promotion_label, seller_id, seller{id,username,name,points,picture,profile_url,badges[]}}. Search shows unsold listings only; for a result count use `filters`.

**Example request body:**
```json
{
  "query": "levis",
  "country": "no",
  "condition": [
    "lightly_used"
  ]
}
```

### POST https://api.reefapi.com/tise/v1/product — 1 credit
One Tise listing in full: price (and whether it is a price-0 giveaway/swap post), condition, size, brand, category, colours, materials, every image, approximate location, shipping carriers and the 'from' price, meet-up option, likes, sold flag and the seller. Works for sold listings too.

**Parameters:**
- `id` (string, optional) — Tise listing id, exactly the `id` of a search row (e.g. RCOPWbLYg); the 24-character `advert_id` is accepted too.
- `url` (string, optional) — Or the listing URL https://tise.com/t/<id>.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** Search row fields plus liked_by[{user_id, username}]. Either `id` or `url` is required.

**Example request body:**
```json
{
  "url": "https://tise.com/t/RCOPWbLYg"
}
```

### POST https://api.reefapi.com/tise/v1/seller — 1 credit
A Tise seller's public profile: name, country, bio (with Tise's own translations), member since, followers, active and lifetime listing counts, points, rating average and review count, trusted flag and badges.

**Parameters:**
- `seller_id` (string, optional) — 24-character Tise user id (`seller_id` of any row).
- `username` (string, optional) — Or the username from the profile URL tise.com/<username>.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {id, username, profile_url, name, country_code, gender, picture, banner, bio, bio_translations, bio_language, website, height_cm, member_since_text, last_active, follower_count, following_count, active_listing_count, lifetime_listing_count, list_count, points, rating_average, review_count, rating_shown, is_trusted, is_featured, badges[]}. Either `seller_id` or `username` is required.

**Example request body:**
```json
{
  "seller_id": "56cb86a3d52b875d14317b83"
}
```

### POST https://api.reefapi.com/tise/v1/seller_listings — 2 credits
Every listing in one seller's closet, unsold first, then SOLD items with the price they were listed at — a sold-price history per seller. 18 per page, paged by cursor.

**Parameters:**
- `seller_id` (string, required) — 24-character Tise user id: `seller_id` of any row, or `id` from `seller`.
- `cursor` (string, optional) — The `next_cursor` of the previous page, passed back unchanged with the same other parameters. Omit for the first page.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {seller_id, seller, count, sold_count, has_more, next_cursor, sponsored_tiles_dropped, listings[]} — listings have the search row shape.

**Example request body:**
```json
{
  "seller_id": "56cb86a3d52b875d14317b83"
}
```

### POST https://api.reefapi.com/tise/v1/seller_reviews — 1 credit
Reviews a Tise user received as a seller (default) or as a buyer: stars, text, date, the kind of trade, and the reviewer. Paged by cursor.

**Parameters:**
- `seller_id` (string, required) — 24-character Tise user id: `seller_id` of any row, or `id` from `seller`.
- `role` (enum, optional, default "seller") — seller (default): reviews from people who bought from this user. buyer: reviews from people who sold to them. [one of: seller, buyer]
- `cursor` (string, optional) — The `next_cursor` of the previous page, passed back unchanged with the same other parameters. Omit for the first page.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {seller_id, role, count, has_more, next_cursor, reviews[{id, rating, text, translations, source_language, created_at, role, review_type, reviewer{id,username,name,points,picture,profile_url,badges[]}}]}

**Example request body:**
```json
{
  "seller_id": "56cb86a3d52b875d14317b83"
}
```

### POST https://api.reefapi.com/tise/v1/filters — 1 credit
The result count Tise shows for a search (it stops at 10 000+) and the filter values on offer: sizes groups, colours, conditions, materials, genders, location and the price steps, with the sort options. Takes the same filters as `search`, so it measures any query before you page through it.

**Parameters:**
- `country` (enum, optional, default "no") — Tise market to search. Each row keeps its own country_code and currency; nothing is converted. [one of: no, se, dk, fi, de, nl, gb, us, au]
- `location` (enum, optional, default "country") — `country` (default, as the app opens): listings in that market. `all`: also sellers from other countries who ship there. [one of: country, all]
- `query` (string, optional) — Free text as a Nordic shopper types it: `levis`, `vintage skinnjakke`, `stokke tripp trapp`. Optional; empty browses the newest listings.
- `category` (array, optional) — One or more Tise category ids at any depth (`wearables`, `home`, `wearables.clothes.pants.jeans`). From `categories`, `suggest` or a row's `category`.
- `brand_ids` (array, optional) — One or more Tise brand ids (Levi's `vuYRhl`), from `brands`, `suggest` or a row's brand.id.
- `condition` (array, optional) — One or more of the site's four conditions. [one of: new, lightly_used, used, well_used]
- `colors` (array, optional) — One or more colours (the site's 19). [one of: black, grey, white, multi, beige, green, khaki, blue, navy, turquoise, purple, pink, red, burgundy, brown, orange, yellow, silver, gold]
- `materials` (array, optional) — One or more materials (the site's 28). [one of: acryl, alpaca, angora, bamboo, cotton, cupro, elastan, goretex, hemp, faux, cashmere, linen, lycra, lyocell, merino, modal, mohair, nylon, polyamide, polyester, rayon, satin, suede, silk, leather, spandex, wool, viscose]
- `gender` (array, optional) — female, male or any (unisex). Tise also returns listings that have no gender set (measured 4-12 of 16 rows), never the other gender. [one of: female, male, any]
- `sizes` (array, optional) — One or more sizes as `<group>:<size>`: tops:M, bottoms:S, shoes:38, children:<size>, children_shoes:<size>. Matches the row's `size`.
- `min_price` (number, optional) — Lowest price in the market's currency (NOK for no). `1` removes the many price-0 giveaway, swap and wanted posts.
- `max_price` (number, optional) — Highest price in the market's currency.
- `second_chance` (boolean, optional, default false) — Only Tise Second Chance listings: brands' returns, samples and seconds sold through Tise.
- `include_pii` (boolean, optional, default false) — Accepted for gateway compatibility; seller fields are returned as published.

**Returns:** {query, country, filters_applied, total, total_capped, total_text, sort_options[{id,label}], filters[{id,type,label,selected[],options[]}]}

**Example request body:**
```json
{
  "query": "levis",
  "condition": [
    "new"
  ]
}
```

### POST https://api.reefapi.com/tise/v1/brands — 1 credit
Find Tise brand ids by name, for the `brand_ids` filter.

**Parameters:**
- `query` (string, required) — Brand name or its start: `levi`, `acne`, `stokke`.

**Returns:** {query, count, brands[{id, name, logo, categories[]}]}

**Example request body:**
```json
{
  "query": "levi"
}
```

### POST https://api.reefapi.com/tise/v1/categories — 3 credits
Tise's full category tree for a market (7 roots, 349 nodes on 2026-10-14) with each node's id for the `category` filter, its genders and size set.

**Parameters:**
- `country` (enum, optional, default "no") — Tise market to search. Each row keeps its own country_code and currency; nothing is converted. [one of: no, se, dk, fi, de, nl, gb, us, au]

**Returns:** {country, node_count, categories[{id, title, long_title, level, genders[], brands_enabled, materials_enabled, size_set, subcategories[]}]}

**Example request body:**
```json
{
  "country": "no"
}
```

### POST https://api.reefapi.com/tise/v1/suggest — 1 credit
Tise's own search-as-you-type: the categories, brands and users that match a few letters, each with the id the filters take.

**Parameters:**
- `query` (string, required) — What a shopper typed: `jeans`, `levis`, `stokke`.
- `country` (enum, optional, default "no") — Tise market to search. Each row keeps its own country_code and currency; nothing is converted. [one of: no, se, dk, fi, de, nl, gb, us, au]

**Returns:** {query, count, suggestions[{type, title, subtitle, link, category_id, brand_id, query, user}]}

**Example request body:**
```json
{
  "query": "levis"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=tise
- Human docs page: https://reefapi.com/docs/tise
- Overview page: https://reefapi.com/tise-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
