Hoe het werkt
Alles wat de website kan, per modus — voor mensen én voor je coding-agent. Kies links waar je mee werkt.
Voor mensen
zoeken op de websiteDe standaardmodus: typ wat je zoekt in gewone woorden en krijg advertenties en veilingkavels terug.
- Typ in de zoekbalk, bijvoorbeeld:
gezellige fauteuil voor onder de €100
- Verfijn met Filters: bron (Tweedehands, Veiling of Kringloop), minimum- en maximumprijs, en postcode met straal voor dingen in de buurt.
- Tip: klik op het foto-icoontje om met een afbeelding te zoeken in plaats van woorden.
- Wissel tussen Resultaten (lijst) en Kaarten, en blader met Vorige en Volgende.
- Zie je iets interessants? Klik erop — de advertentie opent in een nieuw tabblad. Met vergelijkbaar bij een resultaat vind je meer van hetzelfde. Klik op het bladwijzer-icoontje om een koopje te bewaren (account nodig) — alles terug te vinden onder Bewaard bovenaan de resultaten.
/v1/search
Semantisch + keyword zoeken over de hele index. Auth: Authorization: Bearer kk_…. Limiet (Gratis): 60/minuut, 100/dag — meer via Abonnement.
| Parameter | Uitleg |
|---|---|
q * | Zoekopdracht (Nederlands werkt het best) |
source | exacte site (2dehands, trader, marktplaats, zoekertjes, troc, thinktwice, strieppromo, kringwinkel, veilinghuis zoals vavato) of bucket (tweedehands, veiling, kringloop) |
listing_type | tweedehands, veiling of kringloop (herhaalbaar) |
type | auto, neural of keyword |
price_min / price_max | Euro's |
no_price | 0 verbergt advertenties zonder prijs |
limit | standaard 24; keyword max 100, neural/auto max 50 |
curl -s "https://koopje.ai/v1/search?q=vintage+stoel&price_max=200&limit=5" \ -H "Authorization: Bearer $KOOPJE_API_KEY"
Verdieping nodig? GET /v1/similar?url=… vindt gelijkende advertenties, GET /v1/contents?urls=… (max 20) haalt volledige details op. Volledige referentie: API-referentie.
Voor mensen
agent op de websiteKies de modus Agent (slotje: hiervoor heb je een gratis account nodig). De agent zoekt niet één keer, maar werkt je vraag stap voor stap af — en je ziet live wat hij doet.
- Stel je vraag en kijk mee terwijl de agent meerdere zoekslagen uitvoert.
- Vraag gerust door in hetzelfde gesprek — hij onthoudt waar jullie het over hadden.
- Klaar voor iets nieuws? Klik op Gesprek wissen en begin opnieuw.
/v1/agent
streamingDe website-agent als API: hij voert zelf meerdere zoekslagen uit en stuurt het antwoord als Server-Sent Events stream. Stuur JSON met message (verplicht), plus conversation (lijst met eerdere berichten voor vervolgvragen), source (exacte site of veilinghuis), listing_type (tweedehands, veiling, kringloop) en/of category (een van de 27 slugs). Limiet (Gratis): 10/minuut, 10/dag — meer via Abonnement.
curl -N -X POST "https://koopje.ai/v1/agent" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $KOOPJE_API_KEY" \
-d '{"message": "zoek een racefiets voor een beginner, max 500 euro"}'
Liever zelf de keten bouwen? Combineer /v1/search → /v1/contents — precies wat onze skill doet (Eigen AI koppelen).
Haal je persoonlijke API key op
Je assistent heeft een API key nodig om namens jou te mogen zoeken. Zo haal je hem:
- Maak een gratis account en log in.
- Open Mijn profiel → MCP & API keys → Nieuwe sleutel.
- Kopieer de code (begint met
kk_…). Je ziet hem maar één keer, dus bewaar hem meteen.
Gratis en fair use: normaal zoeken kan volop, de uitgebreide AI-antwoorden maximaal een paar keer per minuut. Kom je eroverheen, dan zegt hij dat er gewoon bij — er gaat niets stuk.
Kies je assistent
OpenClaw of Hermes
Gebruik je OpenClaw of Hermes? Dan is één bericht genoeg. Kopieer onderstaande tekst, plak hem in je assistent en druk op enter. Hij installeert alles zelf, vraagt om je API key en test de verbinding.
Installeer de koopje.ai-zoekskill, zodat je tweedehands advertenties en veilingkavels in België kunt doorzoeken. 1. Download https://koopje.ai/skill/koopje-search/SKILL.md en https://koopje.ai/skill/koopje-search/references/api.md 2. Bewaar ze als een skill met het API-referentiebestand in een references-submap, op de standaard skills-locatie van je platform (OpenClaw: ~/.openclaw/workspace/skills/koopje-search/ — Hermes: ~/.hermes/skills/web/koopje-search/). 3. Vraag me om mijn KOOPJE_API_KEY (begint met kk_) als je die nog niet hebt, en test de verbinding met GET https://koopje.ai/v1/stats en header Authorization: Bearer <mijn API key>. 4. Bevestig in één zin wat je installeerde en hoeveel er te doorzoeken valt (total uit /v1/stats).
Liever zelf installeren via de terminal?
mkdir -p ~/.openclaw/workspace/skills/koopje-search/references curl -s -o ~/.openclaw/workspace/skills/koopje-search/SKILL.md \ https://koopje.ai/skill/koopje-search/SKILL.md curl -s -o ~/.openclaw/workspace/skills/koopje-search/references/api.md \ https://koopje.ai/skill/koopje-search/references/api.md export KOOPJE_API_KEY="kk_plak_hier_je_key"
mkdir -p ~/.hermes/skills/web/koopje-search/references curl -s -o ~/.hermes/skills/web/koopje-search/SKILL.md \ https://koopje.ai/skill/koopje-search/SKILL.md curl -s -o ~/.hermes/skills/web/koopje-search/references/api.md \ https://koopje.ai/skill/koopje-search/references/api.md export KOOPJE_API_KEY="kk_plak_hier_je_key"
Liever directe tools? Beide spreken MCP (zelfde API key). OpenClaw: Control UI → Settings → MCP → Add server (naam koopje, Streamable HTTP, URL https://koopje.ai/mcp), of in config:
{
mcp: {
servers: {
koopje: {
url: "https://koopje.ai/mcp",
transport: "streamable-http",
headers: { Authorization: "Bearer kk_plak_hier_je_key" }
}
}
}
}
Hermes: in ~/.hermes/config.yaml:
mcp_servers:
koopje:
url: "https://koopje.ai/mcp"
headers:
Authorization: "Bearer kk_plak_hier_je_key"
Check met hermes mcp test koopje.
Claude
Geen technische kennis nodig: kopieer onderstaand bericht, plak het in Claude en druk op enter. Hij installeert alles zelf, vraagt om je API key en test de verbinding.
Installeer de koopje.ai-zoekskill, zodat je tweedehands advertenties en veilingkavels in België kunt doorzoeken. 1. Download https://koopje.ai/skill/koopje-search/SKILL.md en https://koopje.ai/skill/koopje-search/references/api.md 2. Bewaar ze als een skill met het API-referentiebestand in een references-submap, op je standaard skills-locatie (~/.claude/skills/koopje-search/). 3. Vraag me om mijn KOOPJE_API_KEY (begint met kk_) als je die nog niet hebt, en test de verbinding met GET https://koopje.ai/v1/stats en header Authorization: Bearer <mijn API key>. 4. Bevestig in één zin wat je installeerde en hoeveel er te doorzoeken valt (total uit /v1/stats).
Liever zelf installeren via de terminal?
mkdir -p ~/.claude/skills/koopje-search/references curl -s -o ~/.claude/skills/koopje-search/SKILL.md \ https://koopje.ai/skill/koopje-search/SKILL.md curl -s -o ~/.claude/skills/koopje-search/references/api.md \ https://koopje.ai/skill/koopje-search/references/api.md export KOOPJE_API_KEY="kk_plak_hier_je_key"
Liever directe tools via MCP?
Onze hosted MCP-server op https://koopje.ai/mcp — zelfde API key, zelfde quota. In de terminal:
claude mcp add --transport http koopje https://koopje.ai/mcp \ --header "Authorization: Bearer kk_plak_hier_je_key"
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"koopje": {
"type": "http",
"url": "https://koopje.ai/mcp",
"headers": { "Authorization": "Bearer kk_plak_hier_je_key" }
}
}
}
Codex
Snelste weg: directe tools via onze hosted MCP-server (één commando in de terminal):
export KOOPJE_API_KEY="kk_plak_hier_je_key" codex mcp add koopje --url https://koopje.ai/mcp --bearer-token-env-var=KOOPJE_API_KEY
Alternatief, via een skill — kopieer onderstaand bericht, plak het in Codex en druk op enter. Hij installeert alles zelf, vraagt om je API key en test de verbinding.
Installeer de koopje.ai-zoekskill, zodat je tweedehands advertenties en veilingkavels in België kunt doorzoeken. 1. Download https://koopje.ai/skill/koopje-search/SKILL.md en https://koopje.ai/skill/koopje-search/references/api.md 2. Bewaar ze als een skill met het API-referentiebestand in een references-submap, op je standaard skills-locatie. 3. Vraag me om mijn KOOPJE_API_KEY (begint met kk_) als je die nog niet hebt, en test de verbinding met GET https://koopje.ai/v1/stats en header Authorization: Bearer <mijn API key>. 4. Bevestig in één zin wat je installeerde en hoeveel er te doorzoeken valt (total uit /v1/stats).
ChatGPT
Plus of hoger nodig, geen technische kennis. Zet Developer Mode aan (Instellingen → Connectors → Advanced) en maak een custom connector:
- Naam:
koopje, URL:https://koopje.ai/mcp. - Token-authenticatie: plak je API key (maak hem aan via de API-referentie).
- Schakel hem per chat in via + → More → Developer Mode → Add sources — daarna zoeken met gewone zinnen, bv. “zoek een e-bike onder €800 in Gent”.
Gemini
Via de Gemini CLI — zet dit in ~/.gemini/settings.json (vervang de key):
{
"mcpServers": {
"koopje": {
"httpUrl": "https://koopje.ai/mcp",
"headers": { "Authorization": "Bearer kk_plak_hier_je_key" }
}
}
}
Cursor, VS Code, OpenCode en overige MCP-clients: zelfde JSON, maar met url i.p.v. httpUrl (details op /api).
n8n
Draai je eigen n8n? Importeer onze kant-en-klare koopjesagent: een AI-agent met twee koopje.ai-tools (zoeken en details ophalen). Eén keer je API key koppelen en chatten maar.
- Open onze kant-en-klare template op n8n.io en klik Use workflow.
- In n8n: Workflows → ⋯ → Import from clipboard en plak de workflow.
- Maak in n8n een Bearer Auth-credential: Credentials → New → Bearer Auth, en plak je
kk_…-key uit stap 1 als Token. - Open de twee tool-nodes (Zoek koopjes en Haal details op) en selecteer de credential bij Credential to connect with. Je key staat nergens in de workflow zelf.
- Open OpenRouter Chat Model en selecteer je model-credential — OpenRouter heeft gratis modellen om mee te beginnen.
- Open de chat in n8n en stel je vraag, bijvoorbeeld: “zoek een tweedehands e-bike onder €800 in Gent”.
De agent onthoudt het gesprek via Simple Memory — doorvragen in dezelfde chat kan dus gewoon.
Stel een proefvraag
Is alles gelukt? Stel je assistent dan bijvoorbeeld deze vraag:
Krijg je advertenties terug met een prijs, een plaats en een link? Dan werkt alles. Vraag daarna gerust door — je assistent onthoudt het gesprek.
/mcp
Streamable HTTPDezelfde index als de REST API, maar als hosted MCP-server (JSON-RPC 2.0 over Streamable HTTP) — voor Claude, Cursor, ChatGPT, Codex, Gemini en elke andere MCP-client. Auth met dezelfde Bearer kk_… key als de REST API; zelfde limieten en quota. Zonder key werkt het ook — dan gelden de gratis-limieten per IP-adres (zo werkt de ChatGPT-directory).
Stap-voor-stap per assistent (ChatGPT, Claude, Codex, Gemini, OpenClaw/Hermes, n8n) staat in Eigen AI koppelen.
Tools
| tool | wat het doet |
|---|---|
| search_listings | Semantisch zoeken — dezelfde parameters als GET /v1/search. Het antwoord bevat een price_context-blok (n · mediaan · midden-50%; excl. gratis, accessoires en veilingkavels) zodra er genoeg vergelijkbare vraagprijzen zijn. |
| find_similar | Gelijkaardige koopjes bij een listing — als GET /v1/similar. |
| get_listing | Volledige details van één of meer listings — als GET /v1/contents. |
| corpus_stats | Indexstatistieken — als GET /v1/stats. |
Config per client
Generieke config (werkt voor Cursor, VS Code, OpenCode en de meeste MCP-clients — ~/.cursor/mcp.json):
{
"mcpServers": {
"koopje": {
"url": "https://koopje.ai/mcp",
"headers": { "Authorization": "Bearer kk_..." }
}
}
}
Of test de server direct met curl — eerst de handshake, dan een zoekopdracht:
curl -X POST "https://koopje.ai/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer kk_..." \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}'
curl -X POST "https://koopje.ai/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer kk_..." \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_listings","arguments":{"q":"racefiets","limit":5}}}'
Limieten
Identiek aan de REST API per key (Gratis): search, similar, contents en stats 60/minuut + 100/dag; de agent-tool 10/minuut + 10/dag. Hogere limieten via Abonnement. Zonder key: dezelfde gratis-limieten, gerekend per IP-adres. Zelfde foutcodes — zie API-referentie.
Authenticatie
Elke aanvraag naar /v1/* vereist een Bearer token. Maak een API key via de zijbalk (MCP & API keys, na aanmelden) en stuur die als header mee.
curl "https://koopje.ai/v1/search?q=fiets&limit=5" \
-H "Authorization: Bearer kk_a1b2c3d4..."
Formaat: API keys beginnen altijd met kk_ gevolgd door 32 willekeurige tekens. Ze zijn eenmalig zichtbaar bij het aanmaken — bewaar ze veilig.
Zoeken
Semantisch zoeken over de hele index. Ondersteunt automatisch, semantisch of keyword matchen; prijs- en bron-filters; sorteren op relevantie. Het antwoord bevat hasMore — true zolang er een volgende pagina is (blader met offset).
Geeft koopjes terug die semantisch matchen op de query.
Parameters
| naam | type | verplicht | beschrijving |
|---|---|---|---|
| q | string | ja | Zoekopdracht (natuurlijke taal of keywords). |
| type | string | nee | auto (default) · neural · keyword |
| source | string | nee | Exacte bron: 2dehands · trader · marktplaats · zoekertjes · troc · kringwinkel · veilinghuis (vavato, troostwijk, …) · bucket (tweedehands, veiling, kringloop) |
| listing_type | string | nee | tweedehands · veiling · kringloop (herhaalbaar) |
| category | string | nee | Beperk tot één van de 27 categorieën (slug): computers, fietsen, boeken, verzamelen, … Bij dubbelzinnige queries zoals kaart kiest de server automatisch een prior; resolvedCategory in het antwoord toont welke. |
| price_min | number | nee | Minimale prijs in euro. |
| price_max | number | nee | Maximale prijs in euro. |
| no_price | bool | nee | 0 om koopjes zonder prijs te verbergen (default 1). |
| limit | number | nee | Default 24; max 100 (keyword) of 50 (neural/auto). |
| postcode | string | nee | 4-cijferige BE-postcode — resultaten krijgen _distance_km. |
| lat / lng | number | nee | Eigen coördinaten (alternatief voor postcode). |
| max_km | number | nee | Alleen resultaten binnen deze straal (alleen met postcode of lat/lng). |
| offset | number | nee | Resultaten overslaan (bladeren; hasMore zegt of er meer zijn). |
Voorbeeld
curl "https://koopje.ai/v1/search?q=vintage+stoel&price_max=200&limit=5" \
-H "Authorization: Bearer kk_..."
Antwoord
{
"requestId": "…",
"resolvedSearchType": "neural",
"resolvedCategory": "computers",
"resolvedCategoryLabel": "Computers en software",
"resolvedCategorySource": "auto",
"searchTime": 84.2,
"costDollars": { "total": 0 },
"results": [
{ "title": "…", "price_value": 75, "source": "2dehands", … }
]
}
Gelijkaardige koopjes
Vind koopjes die semantisch lijken op een bestaande listing.
Parameters
| url | string | ja | URL van een koopje in onze index. |
| limit | number | nee | 1 – 24 (default 12). |
Voorbeeld
curl "https://koopje.ai/v1/similar?url=https%3A%2F%2Fwww.2dehands.be%2Fv%2F..." \
-H "Authorization: Bearer kk_..."
Agent
De website-agent als API: voert zelf meerdere zoekslagen uit en streamt het antwoord als Server-Sent Events (einde via connection close). Limiet (Gratis): 10/min + 10/dag per API key — meer via Abonnement.
Parameters (JSON-body)
| message | string | ja | Je vraag in gewone woorden. |
| conversation | array | nee | Eerdere berichten als [{role, content}] voor vervolgvragen. |
| source | string | nee | Exacte site of veilinghuis (zie /v1/search). |
| listing_type | string | nee | tweedehands · veiling · kringloop. |
| category | string | nee | Een van de 27 categorie-slugs; de agent gebruikt hem bij elke zoekstap. |
Voorbeeld
curl -N -X POST "https://koopje.ai/v1/agent" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer kk_..." \
-d '{"message": "zoek een racefiets voor een beginner, max 500 euro"}'
Inhoud ophalen
Haal volledige records op van specifieke koopjes (met beschrijving, locatie, eindtijd, etc.).
Parameters
| ids | string | ja | Komma-gescheiden URLs (max 20). |
| similar | int | nee | Voeg N gelijkaardige koopjes per resultaat toe (max 12, standaard 0). |
Stats
Indexstatistieken — totaal aantal koopjes + per bron.
Voorbeeld
curl "https://koopje.ai/v1/stats" \
-H "Authorization: Bearer kk_..."
Bewaard
Alle bewaarde listings van de gebruiker, nieuwste eerst. Bewaren via POST /v1/saved met {"url": …} plus snapshot-velden (title, price_value, price_text, thumbnail_url, source, location); verwijderen via POST /v1/saved/remove met {"url": …}.
Voorbeeld
curl -X POST "https://koopje.ai/v1/saved" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer kk_..." \
-d '{"url": "https://www.2dehands.be/v/…", "title": "Racefiets", "price_text": "€350"}'
Fouten
De API gebruikt gewone HTTP-statuscodes en een JSON-body met {"error": "..."}.
| code | betekenis |
|---|---|
| 401 | Geen of ongeldige Bearer token. |
| 403 | Token is ingetrokken. |
| 400 | Ongeldige parameters. |
| 429 | Te veel aanvragen — search/similar/contents/stats: 60/min + 100/dag (Gratis) per API key; agent: 10/min + 10/dag. Hogere limieten via Abonnement. Probeer later opnieuw. |
| 500 | Interne fout — probeer opnieuw of mail ons. |
Versiebeleid
/v1/ is stabiel: bestaande velden verdwijnen niet en bestaande limieten gaan niet omlaag zonder aankondiging. Nieuwe velden en endpoints kunnen zonder versiesprong bijkomen — controleer daarom nooit op exacte responses, alleen op de velden die je gebruikt.
Elke /v1/-respons draagt RateLimit-Limit, RateLimit-Remaining en RateLimit-Reset (seconden), plus RateLimit-Policy met de per-minute- en per-day-buckets. Antwoorden met 429 hebben bovendien Retry-After — wacht dat aantal seconden en probeer opnieuw.
Breaking changes komen als /v2/ met minimaal 6 maanden overlap, aangekondigd op deze pagina en per mail naar API-gebruikers.
Klaar om te starten?
Maak een gratis API key aan en doe je eerste aanvraag in minder dan een minuut.
Verder op de site
Onder Bronnen zie je welke tweedehands sites en veilinghuizen worden doorzocht. Na aanmelden vind je je API keys in de zijbalk onder MCP & API keys. Iets geks gezien? Gebruik de feedbackbalk onderaan de pagina — die lezen we echt.