# Delcampe API — Europe's collectables marketplace (stamps, postcards, coins and banknotes, trading cards, old paper …): search ongoing or SOLD listings with filters for category, sale type, price, seller country and seller; one listing in full with its price, sale type, every bid with amount and time, end time, shipping zones with countries and costs, and the seller; a seller's ratings and feedback; the category tree. No login, no key.

> Search Delcampe listings — for sale now or already sold — by words, category, sale type (fixed price / auction / auction house), price in EUR, seller country or continent, one seller's shop, free shipping and discounted listings. Up to 480 rows a page.
> ReefAPI engine `delcampe` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/delcampe/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/delcampe/v1/search — 3 credits
Search Delcampe listings — for sale now or already sold — by words, category, sale type (fixed price / auction / auction house), price in EUR, seller country or continent, one seller's shop, free shipping and discounted listings. Up to 480 rows a page.

**Parameters:**
- `query` (string, optional) — Words to search for in listing titles (all words must match, the site's default). Leave empty to browse a category, a seller's shop or the whole site with filters.
- `category_id` (integer, optional) — A category id from the `categories` action (30001 Stamps, 30002 Postcards, 30003 Coins & Banknotes, 34439 Modern Collectible Cards …). An unknown id returns 0 rows.
- `category_path` (string, optional) — A category as its path, exactly as an item's `category_path` / `breadcrumbs[].path` gives it (stamps/france/18491900). An unknown path → NOT_FOUND. Give this or category_id, not both.
- `sale_type` (enum, optional) — Only one kind of sale. Default: all kinds. [one of: fixed_price, auction, auction_with_bids, auction_without_bids, auction_house]
- `status` (enum, optional, default "ongoing") — ongoing = for sale now; sold = closed sales with the price they sold at. [one of: ongoing, sold]
- `min_price` (number, optional) — Lowest price in EUR (the listing's price, before shipping and the buyer's platform fee).
- `max_price` (number, optional) — Highest price in EUR.
- `seller_country` (string, optional) — Only sellers located in this country (two-letter code: FR, BE, DE, IT, GB, US …).
- `seller_continent` (enum, optional) — Only sellers on this continent. Give this or seller_country, not both. [one of: africa, asia, central_america, europe, north_america, oceania, south_america]
- `seller_id` (string, optional) — Only this seller's listings (their shop) — the seller_id from an item's `seller`.
- `free_shipping` (boolean, optional, default false) — Only listings the seller ships for free.
- `discounted_only` (boolean, optional, default false) — Only listings with a seller discount (rows then carry price_before_discount).
- `sort` (enum, optional, default "newest") — Result order. [one of: newest, ending_soon, price_asc, price_desc, title]
- `limit` (integer, optional, default 60) — Rows per page — the source's own page sizes: 12, 24, 60, 120, 240 or 480. page × limit may not pass 10,000 (the source's own window). [one of: 12, 24, 60, 120, 240, 480]
- `page` (integer, optional, default 1) — Result page, from 1.

**Returns:** rows[]: item_id (give it to `item`), url, title, sale_type (fixed_price | auction | auction_house), price + currency (the listing's own price; null when the card shows a conversion), price_is_converted, price_converted + price_converted_currency (the site's approximate conversion for listings in another currency), price_before_discount, discount_label, discount_percent, bid_count (auctions), seller_kind (professional | private), is_new, image, image_large. Advert tiles are left out. meta: total (the source's own count), total_is_exact (false: the window stops at 10,000), page, limit, has_more, adverts_dropped, filters_applied, display_currency, timezone, warnings.

**Example request body:**
```json
{
  "query": "napoleon",
  "category_id": 30001,
  "limit": 60
}
```

### POST https://api.reefapi.com/delcampe/v1/item — 3 credits
One listing in full: the listing's own price and currency, sale type, status (ongoing / ended) and whether it sold, every bid (bidder alias, amount, time), purchases, start and end time in UTC, buyer platform fee, shipping zones with each zone's countries, methods and costs, description, category path, all large images, and the seller (rating, location, languages, member since). Give item_id or url.

**Parameters:**
- `item_id` (string, optional) — The Delcampe item number (a search row's item_id, or the number at the end of a listing address).
- `url` (string, optional) — A listing address instead of item_id (any language version).

**Returns:** item{item_id, url, title, sale_type, status, sold, availability, price, currency, price_display (the printed price), price_converted, price_converted_currency, price_before_discount, discount_label, discount_percent, lowest_price_30d, price_is (asking_price | starting_price | current_bid | final_price), bid_count, bids[]{bidder, amount, currency, placed_at, placed_at_local}, purchases, purchase_history[]{buyer, quantity, purchased_at}, questions, visits, watchers, started_at, ends_at (UTC), *_local, seconds_remaining, platform_fee, platform_fee_display, shipping{summary, dispatch, zones[]{zone, countries[], country_count, methods[]{method, cost, currency}, payment_methods[]}, costs_note, destinations[]}, seller_specific_conditions, description, category_path, breadcrumbs[]{name, url, path}, images[], image_count, seller{seller_id, nickname, profile_url, rating_pct, rating_count, verified, membership, member_since, last_connection, location, languages[], payment_methods[], shop_search_url}}. meta: display_currency, timezone, time_check.

**Example request body:**
```json
{
  "item_id": "2649823442"
}
```

### POST https://api.reefapi.com/delcampe/v1/seller — 3 credits
A seller's public profile: professional or private, rating over the last 12 months and since registration with transaction counts, member since, last connection, location, languages, and the latest feedback received (score, comment, date).

**Parameters:**
- `seller_id` (string, required) — The seller's numeric id (an item's seller.seller_id).

**Returns:** seller{seller_id, nickname, profile_url, seller_kind, status, rating_pct, rating_count, rating_12m_pct, transactions_12m, rating_all_time_pct, transactions_all_time, member_since, last_connection, languages[], location, feedback_received_count, feedback[]{score_pct, comment, from_role, to_role, rated_member, rated_at, rated_at_local}, shop_search_url}

**Example request body:**
```json
{
  "seller_id": "2564895"
}
```

### POST https://api.reefapi.com/delcampe/v1/categories — 3 credits
The category tree, one level at a time: without category_id the top-level categories; with one, its name, path, number of listings and its sub-categories with their ids.

**Parameters:**
- `category_id` (integer, optional) — The category to open. Leave empty for the top-level categories.

**Returns:** category{category_id, name, path, listings (the source's own count, rounded by the source for big categories), parent{category_id, name}, ancestors[]} (null at the top) and rows[]: category_id, name (give category_id to `search` or back to `categories`).

**Example request body:**
```json
{
  "category_id": 30001
}
```

## 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=delcampe
- Human docs page: https://reefapi.com/docs/delcampe
- Overview page: https://reefapi.com/delcampe-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
