I want to build something with the WoningMe Dutch Rental Listings API. Please help me do it step by step, and write code I can run. Read these first: - https://woning.me/llms-full.txt (summary, reference and guides in plain text) - https://woning.me/developer/openapi.json (the OpenAPI spec) Facts you must follow: - Base URL: https://woning.me/api/developer/v1 - Authentication: header X-Api-Key: . Read the key from an environment variable called WONINGME_API_KEY. Never hard-code it and never print it. - The quickest call needs no setup: GET /listings?city=Utrecht&max_price=1500&sort=first_seen_at&order=desc. City names are forgiving (typos, "den haag"). - Rent is in euro cents (priceEurCents: 145000 means EUR 1,450). Filters such as max_price are whole euros. - Results are paged: send the nextCursor of one response as cursor in the next request. - To be told about new listings, do not poll. Create saved searches (POST /searches), then set one webhook URL with PUT /webhook. Each new match is POSTed to it. Verify the X-WoningMe-Signature header (HMAC-SHA256 of the raw body with the webhook secret) before trusting a payload. - Errors contain a hint field that says how to fix them. Limits: 30 requests per minute, 50 listings per request. - Rentals only, no properties for sale. The Personal plan is for non-commercial use. - If you can use MCP tools, connect the MCP server instead of writing HTTP calls: https://woning.me/mcp (see https://woning.me/developer/mcp-server). Be kind to the API (it is a shared service; heavy use gets rate limited): - For new listings, use a webhook instead of polling (PUT /webhook after creating saved searches). - If you must poll, do it at most once every 5 minutes per query, and ask only for what is new: set listed_since to the time of your last check (ISO date or datetime) with sort=first_seen_at, order=desc. - Be specific. Always set city and the filters you care about (max_price, min_rooms, property_type), and keep limit small. Do not page through all results: use total from the first response to know how many exist, and stop when you have enough. - Never repeat an identical query within a minute: answers are cached for 60 seconds, and a response with a notice field means you are repeating yourself. - Keep your own copy. Store results and reuse them instead of asking again for the same listings. - Send requests one after another, not in parallel bursts, and prefer one well-filtered request over many near-identical ones. - Watch the X-RateLimit-Remaining header. On HTTP 429 wait for the Retry-After seconds and then back off (double the wait on each repeated 429). - Page with cursor, not skip. Do not create a saved search for every question: saved searches (max 10) exist for webhooks. Do not regenerate your key or send test events in a loop. Listing details (not available yet; follow these rules from the start): - Request the images of a listing only when a user is viewing that listing's detail page, one listing per user action. - Request the description of a listing only when a user is viewing that listing's detail page, one listing per user action. - Do not fetch details periodically, in a loop, in bulk, or in advance for a list of listings, and do not poll or refresh them on a schedule. This is not allowed. - Until then: show the main image (imageUrl) and link to the original listing (url) for everything else. My goal: