One route. Two depths.
Free and paid data ship from the same endpoint. Upgrading is one query parameter, not a new client.
Upgrading a plan should not mean rewriting a client.
Every endpoint returns one shape. Add ?deep=true on a paid plan and the same response comes back with a nested deep object: datacenter flags on /ip, line type on /phone, MX and registration on /domain.
Same call, more fields
Call /ip/8.8.8.8 and you get country, ASN, and network name. Call it again with ?deep=true on a paid plan and those same fields come back, plus deep with datacenter, relay, and Tor.
GET /ip/8.8.8.8
GET /ip/8.8.8.8?deep=true
Same route. Same core fields. One more object when you ask. Nothing moves underneath: no new base URL, no new error shapes, no client rewrite. The upgrade is the query parameter.
Write the integration once against Free. Flip ?deep=true later. The core fields stay put either way.
Try it
Get a key and call any route with ?deep=true. The base fields stay where they were. deep just shows up next to them.