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 website

De standaardmodus: typ wat je zoekt in gewone woorden en krijg advertenties en veilingkavels terug.

  1. Typ in de zoekbalk, bijvoorbeeld:
    gezellige fauteuil voor onder de €100
  2. Verfijn met Filters: bron (Tweedehands, Veiling of Kringloop), minimum- en maximumprijs, en postcode met straal voor dingen in de buurt.
  3. Tip: klik op het foto-icoontje om met een afbeelding te zoeken in plaats van woorden.
  4. Wissel tussen Resultaten (lijst) en Kaarten, en blader met Vorige en Volgende.
  5. 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.
Voor je coding-agent
GET

/v1/search

Semantisch + keyword zoeken over de hele index. Auth: Authorization: Bearer kk_…. Limiet (Gratis): 60/minuut, 100/dag — meer via Abonnement.

ParameterUitleg
q *Zoekopdracht (Nederlands werkt het best)
sourceexacte site (2dehands, trader, marktplaats, zoekertjes, troc, thinktwice, strieppromo, kringwinkel, veilinghuis zoals vavato) of bucket (tweedehands, veiling, kringloop)
listing_typetweedehands, veiling of kringloop (herhaalbaar)
typeauto, neural of keyword
price_min / price_maxEuro's
no_price0 verbergt advertenties zonder prijs
limitstandaard 24; keyword max 100, neural/auto max 50
Shell

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 website

Kies 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.

zoek een complete racefiets-uitzet voor een beginner, maximaal €500 in totaal
  1. Stel je vraag en kijk mee terwijl de agent meerdere zoekslagen uitvoert.
  2. Vraag gerust door in hetzelfde gesprek — hij onthoudt waar jullie het over hadden.
  3. Klaar voor iets nieuws? Klik op Gesprek wissen en begin opnieuw.
Voor je coding-agent
POST

/v1/agent

streaming

De 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.

Shell
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).

Stap 1

Maak een account (en eventueel een API key)

Voor de ChatGPT-app en de OAuth-koppeling heb je geen API key nodig: de app opent zelf een login- en toestemmingsscherm. Voor Claude, Codex, Gemini, OpenClaw en n8n gebruik je wel een persoonlijke API key:

  1. Maak een gratis account en log in.
  2. Open Mijn profiel → MCP & API keys → Nieuwe sleutel.
  3. 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.


Stap 2

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

Onze app staat in de ChatGPT App Directory. Open koopje in ChatGPT of zoek in ChatGPT naar koopje onder Apps. Geen Developer Mode of API key nodig: anoniem zoeken is 30/minuut + 50/dag per IP-adres. De nieuwste appversie kan je koopje.ai-account koppelen voor 60/minuut + 100/dag, bewaarde zoekertjes en herinneringen; je ziet die optie zodra de update bij je beschikbaar is.

Wil je je eigen API key en quota gebruiken, of een custom connector naast de app? Dat kan nog steeds:

  1. Zet Developer Mode aan (Instellingen → Connectors → Advanced) en maak een custom connector: naam koopje, URL https://koopje.ai/mcp.
  2. Token-authenticatie: plak je API key (maak hem aan via de API-referentie).
  3. 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.

  1. Open onze kant-en-klare template op n8n.io en klik Use workflow.
  2. In n8n: Workflows → ⋯ → Import from clipboard en plak de workflow.
  3. Maak in n8n een Bearer Auth-credential: Credentials → New → Bearer Auth, en plak je kk_…-key uit stap 1 als Token.
  4. 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.
  5. Open OpenRouter Chat Model en selecteer je model-credential — OpenRouter heeft gratis modellen om mee te beginnen.
  6. 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.


Stap 3

Stel een proefvraag

Is alles gelukt? Stel je assistent dan bijvoorbeeld deze vraag:

zoek een tweedehands e-bike onder €800 in Gent

Krijg je advertenties terug met een prijs, een plaats en een link? Dan werkt alles. Vraag daarna gerust door — je assistent onthoudt het gesprek.

Voor je coding-agent
POST

/mcp

Streamable HTTP

Dezelfde 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 zoeken ook — dan geldt 30/minuut + 50/dag per IP-adres (zo werkt de ChatGPT-directory). Met een gratis account of API key wordt dat 60/minuut + 100/dag. Bewaarde zoekertjes, herinneringen en je profiel vereisen een login: een API key of een OAuth-koppeling via de ChatGPT-app. Je kunt een koppeling intrekken onder Mijn profiel → MCP & API keys → Gekoppelde apps.

Koppel https://koopje.ai/mcp met je API key en je assistent zoekt zelf.

Stap-voor-stap per assistent (ChatGPT, Claude, Codex, Gemini, OpenClaw/Hermes, n8n) staat in Eigen AI koppelen.

Tools

toolwat het doet
search_listingsSemantisch 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_similarGelijkaardige koopjes bij een listing — als GET /v1/similar.
get_listingVolledige details van één of meer listings — als GET /v1/contents.
corpus_statsIndexstatistieken — als GET /v1/stats.
get_profileStabiel, opaque profiel-id van de gekoppelde gebruiker (plus e-mail) — alleen na login.
list_savedJe bewaarde zoekertjes oplijsten — alleen na login.
save_listingEen listing bewaren (URL plus optionele snapshotvelden) — alleen na login.
remove_savedEen bewaard zoekertje verwijderen — alleen na login.
list_remindersJe herinneringen (watchlist-alerts) oplijsten — als GET /v1/alerts. Vereist login (API key of OAuth-koppeling).
create_reminderEen herinnering aanmaken op een listing of vrije beschrijving — als POST /v1/alerts. Vereist login (API key of OAuth-koppeling); max. 3 per uur.
update_reminderBeschrijving, dagelijkse/wekelijkse cadans of pauzestatus wijzigen — als POST /v1/alerts/update. Vereist login.
delete_reminderEen herinnering verwijderen — als POST /v1/alerts/remove. Vereist login.

Zoeken werkt zonder login. De bewaar-, *_reminder- en get_profile-tools blijven zichtbaar, maar vragen zonder login om je koopje.ai-account te koppelen (OAuth) of om een API key mee te sturen. Bewaarde zoekertjes en herinneringen zijn ook te beheren onder Mijn profiel.

Config per client

Generieke config (werkt voor Cursor, VS Code, OpenCode en de meeste MCP-clients — ~/.cursor/mcp.json):

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:

Shell
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: 30/minuut + 50/dag per IP-adres; met een gratis account of API key 60/minuut + 100/dag. 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.

Gelijkaardige koopjes

GET /v1/similar

Vind koopjes die semantisch lijken op een bestaande listing.

Parameters

urlstringjaURL van een koopje in onze index.
limitnumbernee1 – 24 (default 12).

Voorbeeld

curl "https://koopje.ai/v1/similar?url=https%3A%2F%2Fwww.2dehands.be%2Fv%2F..." \
  -H "Authorization: Bearer kk_..."

Agent

POST /v1/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)

messagestringjaJe vraag in gewone woorden.
conversationarrayneeEerdere berichten als [{role, content}] voor vervolgvragen.
sourcestringneeExacte site of veilinghuis (zie /v1/search).
listing_typestringneetweedehands · veiling · kringloop.
categorystringneeEen 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

GET /v1/contents

Haal volledige records op van specifieke koopjes (met beschrijving, locatie, eindtijd, etc.).

Parameters

idsstringjaKomma-gescheiden URLs (max 20).
similarintneeVoeg N gelijkaardige koopjes per resultaat toe (max 12, standaard 0).

Stats

GET /v1/stats

Indexstatistieken — totaal aantal koopjes + per bron.

Voorbeeld

curl "https://koopje.ai/v1/stats" \
  -H "Authorization: Bearer kk_..."

Bewaard

GET /v1/saved

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"}'

Herinneringen

GET /v1/alerts

Alle herinneringen (watchlist-alerts) van de gebruiker, nieuwste eerst. Aanmaken via POST /v1/alerts met query_text (vrije beschrijving) of listing_id, plus optioneel price_max en frequency (daily of weekly). Wijzigen via POST /v1/alerts/update met {"id": …, "query_text": …, "frequency": …, "paused": …}; verwijderen via POST /v1/alerts/remove met {"id": …}. Nieuwe herinneringen zijn beperkt tot 3 per uur per account.

Voorbeeld

curl -X POST "https://koopje.ai/v1/alerts" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer kk_..." \
  -d '{"query_text": "vintage racefiets onder 300 euro", "price_max": 300, "frequency": "weekly"}'

Fouten

De API gebruikt gewone HTTP-statuscodes en een JSON-body met {"error": "..."}.

codebetekenis
401Geen of ongeldige Bearer token.
403Token is ingetrokken.
400Ongeldige parameters.
429Te veel aanvragen — search/similar/contents/stats/saved/alerts: 60/min + 100/dag (Gratis) per API key; agent: 10/min + 10/dag; nieuwe herinneringen: 3/uur. Hogere limieten via Abonnement. Probeer later opnieuw.
500Interne 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.


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.