# WorldIPTV Compare API (lite) ## `GET /api/v1/compare` Query params: | Param | Values | Notes | |-------|--------|-------| | sport | yes \| soft \| no | sports preference | | uhd | 0 \| 1 | want 4K | | budget | number | max monthly (local currency) | | devices | 1 \| 2 \| 3 | simultaneous screens | | platform | firestick \| smart_tv \| phone \| other | for reasons | | region | fr \| us \| uk \| ca \| au \| de \| es \| it \| other | fine region | | regionBucket | eu \| us \| ar | optional override | | currency | EUR \| USD \| GBP \| CAD \| AUD | defaults from bucket | ### Response (hard rules) - `top3[0]` **always** `kind: "house"`, `pinned: true` (WorldIPTV). Score picks the house SKU only. - Ranks 2–3: `kind: "sponsored"` with Disclosure (EN/FR/AR) only — empty inventory → house-only TOP1. - Never invent sponsors. Legal whitelist reserved for later (file stays empty). - `sponsored[]` inventory is also returned separately (may be empty). - `whatsapp`: `https://wa.me/447307410512` (use after results). - No AggregateRating, no public M3U. ### Open data (prefer for bots) - [/data/plans.json](/data/plans.json) - [/data/plans.csv](/data/plans.csv) - [/open-data](/open-data) - [/data/legal-operators.json](/data/legal-operators.json) CORS: `Access-Control-Allow-Origin: *` on GET. Soft rate-limit ~60 req/min/IP.