[{"data":1,"prerenderedAt":365},["ShallowReactive",2],{"doc:\u002Fapi-reference\u002Ffiltering-fields":3},{"page":4,"toc":361},{"path":5,"title":6,"description":7,"blocks":8},"\u002Fapi-reference\u002Ffiltering-fields","Field families & MMDB distribution API","How API key licensedFamilies project lookup responses, plus the complete \u002Fv1\u002Fmmdb\u002F* endpoints for custom quotes, release manifests, SHA256SUMS, and signed artifact downloads.",[9,14,17,56,60,63,69,72,74,126,149,200,203,206,209,211,213,215,217,231],{"type":10,"level":11,"text":12,"id":13},"heading",2,"1. Licensed field families (`licensedFamilies`)","1-licensed-field-families-licensedfamilies",{"type":15,"text":16},"p","In `@ipscope\u002Fapi`, every API key carries an explicit `licensedFamilies` entitlement list configured by your plan or custom database profile. When you call `GET \u002Fv1\u002Fip\u002F:ip` or `POST \u002Fv1\u002Fip\u002Fbatch`, `filterByLicensedFamilies()` automatically projects the `IpLookupResponse` to the families licensed on your key:",{"type":18,"columns":19,"rows":23},"table",[20,21,22],"Family ID (`licensedFamilies`)","Projected JSON fields in `IpLookupResponse`","Description",[24,28,32,36,40,44,48,52],[25,26,27],"`network`","`matched_network`, `network.asn`, `network.organization`","Matched CIDR prefix and BGP origin ASN \u002F organization.",[29,30,31],"`geo_country`","`geo.country_code`, `geo.declared_country_code`, `geo.physical_country_code`, `geo.is_virtual_location`, `geo.location_type`, `geo.confidence`","Country-level routing reality and declared vs. physical separation.",[33,34,35],"`geo_city`","Adds `geo.subdivision`, `geo.city`, `geo.accuracy_radius_km`, `geo.timezone`","City, first-level subdivision, accuracy radius, and IANA timezone.",[37,38,39],"`connection`","`connection.connection_type`, `is_residential`, `is_mobile`, `is_business`, `is_hosting`","Access network classification (`residential`, `mobile`, `business`, `hosting`).",[41,42,43],"`hosting`","`security.is_hosting`, `connection.is_hosting`","Datacenter, cloud, and colocation hosting flags.",[45,46,47],"`anonymity`","`security.is_vpn`, `is_tor_exit`, `is_proxy`, `is_hosting`, `anonymizer_type`, `confidence`, `reason_codes`","VPN, Tor exit, proxy, and relay detection with explainable `reason_codes`.",[49,50,51],"`security_extensions`","`security_extensions.abuse_velocity_score`, `is_known_scanner`, `observation_recency_hours`","Honeypot abuse velocity score (`0–100`), scanner flag, and observation recency.",[53,54,55],"`meta`","`dataset_version`, `updated_at`","Snapshot version provenance and publication timestamp.",{"type":57,"tone":58,"text":59},"callout","tip","If an API key is created with an empty `licensedFamilies` list (`[]`), the lookup engine defaults to returning all enabled families in the snapshot.",{"type":10,"level":11,"text":61,"id":62},"2. MMDB & artifact catalog (`GET \u002Fv1\u002Fmmdb\u002Fproducts` & `POST \u002Fv1\u002Fmmdb\u002Fquote`)","2-mmdb-and-artifact-catalog-get-v1-mmdb-products-and-post-v1-mmdb-quote",{"type":64,"method":65,"path":66,"auth":67,"plan":68},"endpoint","GET","\u002Fv1\u002Fmmdb\u002Fproducts","key","scope: lookup",{"type":64,"method":70,"path":71,"auth":67,"plan":68},"POST","\u002Fv1\u002Fmmdb\u002Fquote",{"type":15,"text":73},"`GET \u002Fv1\u002Fmmdb\u002Fproducts` returns the complete catalog of selectable artifact formats (`mmdb`, `csv`, `parquet`), field families, update cadences (`daily`, `weekly`, `every_30_days`), dynamic pricing rules, and preset SKUs. `POST \u002Fv1\u002Fmmdb\u002Fquote` computes a deterministic integer-minor-unit price quote and `profileSchemaHash` for any custom combination.",{"type":75,"title":76,"schemaName":77,"contentType":78,"schema":79,"example":122,"exampleHtml":125},"request-body","Quote request body (POST \u002Fv1\u002Fmmdb\u002Fquote)","MmdbQuoteRequestDto","application\u002Fjson",[80,85,95,108,115],{"name":81,"type":82,"description":83,"example":84},"preset_id","string","Optional preset SKU identifier (`\"lite\"`, `\"country\"`, `\"asn\"`, `\"city\"`, `\"privacy\"`, `\"mega\"`).","privacy",{"name":86,"type":87,"description":88,"required":89,"enum":90,"example":94},"formats","string[]","One or more artifact formats to compile.",true,[91,92,93],"mmdb","csv","parquet",[91,93],{"name":96,"type":87,"description":97,"required":89,"enum":98,"example":107},"field_families","Array of field family IDs to include in the compiled database.",[99,100,101,102,103,104,105,106],"network","geo_country","geo_city","connection","hosting","anonymity","security_extensions","meta",[99,100,101,104],{"name":109,"type":82,"description":110,"required":89,"enum":111,"example":112},"cadence","Snapshot update cadence.",[112,113,114],"daily","weekly","every_30_days",{"name":116,"type":117,"description":118,"range":119,"default":120,"example":121},"seats","integer","Number of licensed internal servers (`1` included by default; `+$149\u002Fmo` per additional server). Databases are strictly for internal server use and cannot be shared or sold.","1 … 10000","1",1,{"formats":123,"field_families":124,"cadence":112,"seats":121},[91,93],[99,100,101,104],"\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"formats\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"parquet\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  ]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"field_families\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"network\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"geo_country\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"geo_city\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"anonymity\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  ]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"cadence\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"daily\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"seats\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"type":127,"samples":128},"code",[129,134,139,144],{"label":130,"lang":131,"code":132,"html":133},"curl","bash","curl -sS -X POST \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote\" \\\n  -H \"Authorization: Bearer $IPSCOPE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"formats\":[\"mmdb\",\"parquet\"],\"field_families\":[\"network\",\"geo_country\",\"geo_city\",\"anonymity\"],\"cadence\":\"daily\"}'","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">curl\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -sS\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -X\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  -H\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Authorization: Bearer $IPSCOPE_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  -H\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Content-Type: application\u002Fjson\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  -d\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> '{\"formats\":[\"mmdb\",\"parquet\"],\"field_families\":[\"network\",\"geo_country\",\"geo_city\",\"anonymity\"],\"cadence\":\"daily\"}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":135,"lang":136,"code":137,"html":138},"Node.js","js","const res = await fetch('https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote', {\n  method: 'POST',\n  headers: { 'Authorization': `Bearer ${process.env.IPSCOPE_KEY}`, 'Content-Type': 'application\u002Fjson' },\n  body: JSON.stringify({\n    \"formats\": [\n      \"mmdb\",\n      \"parquet\"\n    ],\n    \"field_families\": [\n      \"network\",\n      \"geo_country\",\n      \"geo_city\",\n      \"anonymity\"\n    ],\n    \"cadence\": \"daily\"\n  }),\n});\nconst data = await res.json();","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">const\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> res\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> =\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> await\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\"> fetch\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  method\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> 'POST'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  headers\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> { \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'Authorization'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> `Bearer \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">${\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">process\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">env\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">IPSCOPE_KEY\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">}\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">`\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> 'Content-Type'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> 'application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> }\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  body\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> JSON\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">.stringify\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"formats\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">      \"mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">      \"parquet\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    ]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"field_families\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">      \"network\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">      \"geo_country\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">      \"geo_city\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">      \"anonymity\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    ]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"cadence\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"daily\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  })\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">});\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">const\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> data\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> =\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> await\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> res\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">.json\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">();\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":140,"lang":141,"code":142,"html":143},"Python","python","import os, httpx\n\nasync with httpx.AsyncClient(timeout=5.0) as client:\n    res = await client.post(\n        \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote\",\n        headers={\"Authorization\": f\"Bearer {os.environ['IPSCOPE_KEY']}\"},\n        json={\n          \"formats\": [\n            \"mmdb\",\n            \"parquet\"\n          ],\n          \"field_families\": [\n            \"network\",\n            \"geo_country\",\n            \"geo_city\",\n            \"anonymity\"\n          ],\n          \"cadence\": \"daily\"\n        },\n    )\n    data = res.json()","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">import\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> os\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> httpx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">async\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> with\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> httpx\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">AsyncClient\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">(timeout\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">5.0\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">)\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> as\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> client\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    res \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> await\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> client\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">post\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">        \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">        headers\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">{\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">: \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">f\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Bearer \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">{\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">os.environ[\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'IPSCOPE_KEY'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">}\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">},\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">        json\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">          \"formats\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">            \"mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">            \"parquet\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">          ],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">          \"field_families\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">            \"network\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">            \"geo_country\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">            \"geo_city\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">            \"anonymity\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">          ],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">          \"cadence\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">: \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"daily\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">        },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">    )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    data \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> res\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">json\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">()\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":145,"lang":146,"code":147,"html":148},"Go","go","req, _ := http.NewRequestWithContext(ctx, \"POST\", \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote\", nil)\nreq.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"IPSCOPE_KEY\"))\nres, err := http.DefaultClient.Do(req)\nif err != nil {\n\treturn err\n}\ndefer res.Body.Close()","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">req, _ \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> http.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">NewRequestWithContext\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(ctx, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"POST\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Fquote\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">nil\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">req.Header.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Set\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Bearer \"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">+\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">os.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Getenv\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"IPSCOPE_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">res, err \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> http.DefaultClient.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Do\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(req)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">if\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> err \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">!=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> nil\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">\treturn\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> err\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">defer\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> res.Body.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Close\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">()\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"type":150,"responses":151},"responses",[152,181],{"code":153,"name":154,"description":155,"schema":156,"example":177,"defaultOpen":89,"exampleHtml":180},"200","MmdbQuoteResponse","Deterministic integer-minor-unit quote and profileSchemaHash.",[157,161,165,169,172,174],{"name":158,"type":82,"description":159,"required":89,"example":160},"currency","ISO 4217 currency code (`\"USD\"`).","USD",{"name":162,"type":117,"description":163,"required":89,"example":164},"amountMinor","Price in integer minor units (cents).",19900,{"name":166,"type":82,"description":167,"required":89,"example":168},"profileSchemaHash","Deterministic hash identifying the exact format + field family + cadence selection.","psh_8a91c4e20b1f",{"name":86,"type":87,"description":170,"required":89,"enum":171},"Selected artifact formats.",[91,92,93],{"name":96,"type":87,"description":173,"required":89},"Selected intelligence field families.",{"name":109,"type":82,"description":175,"required":89,"enum":176},"Selected update cadence.",[112,113,114],{"currency":160,"amountMinor":164,"profileSchemaHash":168,"formats":178,"field_families":179,"cadence":112},[91,93],[99,100,101,104],"\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"currency\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"USD\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"amountMinor\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 19900\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"profileSchemaHash\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"psh_8a91c4e20b1f\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"formats\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"parquet\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  ]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"field_families\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"network\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"geo_country\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"geo_city\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">    \"anonymity\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  ]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"cadence\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"daily\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"code":182,"name":183,"description":184,"schema":185,"example":198,"exampleHtml":199},"400","ApiError","Unsupported format, unknown field_family, or invalid cadence.",[186,190,194],{"name":187,"type":117,"description":188,"required":89,"example":189},"statusCode","HTTP status code returned by the API gateway.",400,{"name":191,"type":82,"description":192,"required":89,"example":193},"message","Human-readable diagnostic message describing the error condition.","Unsupported format: xml",{"name":195,"type":82,"description":196,"required":89,"example":197},"error","Canonical HTTP error classification.","Bad Request",{"statusCode":189,"message":193,"error":197},"\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"statusCode\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 400\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"message\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Unsupported format: xml\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"error\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Bad Request\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"type":10,"level":11,"text":201,"id":202},"3. Releases, tokens, checksums & downloads (`\u002Fv1\u002Fmmdb\u002Freleases\u002F*`)","3-releases-tokens-checksums-and-downloads-v1-mmdb-releases",{"type":64,"method":65,"path":204,"auth":67,"plan":205},"\u002Fv1\u002Fmmdb\u002Freleases","scope: download",{"type":64,"method":70,"path":207,"auth":67,"plan":208},"\u002Fv1\u002Fmmdb\u002Freleases\u002F{id}\u002Fdownload-token","scope: download · 201",{"type":64,"method":65,"path":210,"auth":67,"plan":205},"\u002Fv1\u002Fmmdb\u002Freleases\u002F{id}\u002Fchecksums",{"type":64,"method":65,"path":212,"auth":67,"plan":205},"\u002Fv1\u002Fmmdb\u002Freleases\u002F{id}\u002Fdownload",{"type":64,"method":65,"path":214,"auth":67,"plan":205},"\u002Fv1\u002Fmmdb\u002Fsnapshots\u002Fdiff",{"type":15,"text":216},"All release and artifact delivery endpoints require the `download` scope. Pass either a specific release ID (`rel_...`) or `latest` as `{id}`.",{"type":127,"samples":218},[219,222,225,228],{"label":130,"lang":131,"code":220,"html":221},"curl -sS \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\" \\\n  -H \"Authorization: Bearer $IPSCOPE_KEY\"","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">curl\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -sS\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  -H\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Authorization: Bearer $IPSCOPE_KEY\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":135,"lang":136,"code":223,"html":224},"const res = await fetch('https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases', {\n  headers: { 'Authorization': `Bearer ${process.env.IPSCOPE_KEY}` },\n});\nconst data = await res.json();","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">const\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> res\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> =\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> await\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\"> fetch\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  headers\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> { \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'Authorization'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> `Bearer \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">${\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">process\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">env\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">IPSCOPE_KEY\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">}\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">`\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> }\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">});\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">const\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> data\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> =\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> await\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> res\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">.json\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">();\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":140,"lang":141,"code":226,"html":227},"import os, httpx\n\nasync with httpx.AsyncClient(timeout=5.0) as client:\n    res = await client.get(\n        \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\",\n        headers={\"Authorization\": f\"Bearer {os.environ['IPSCOPE_KEY']}\"},\n    )\n    data = res.json()","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">import\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> os\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> httpx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">async\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> with\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> httpx\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">AsyncClient\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">(timeout\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">5.0\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">)\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> as\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> client\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    res \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> await\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> client\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">get\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">        \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">        headers\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">{\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">: \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">f\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Bearer \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">{\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">os.environ[\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">'IPSCOPE_KEY'\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">]\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">}\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">},\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-punctuation)\">    )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    data \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> res\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">json\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">()\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":145,"lang":146,"code":229,"html":230},"req, _ := http.NewRequestWithContext(ctx, \"GET\", \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\", nil)\nreq.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"IPSCOPE_KEY\"))\nres, err := http.DefaultClient.Do(req)\nif err != nil {\n\treturn err\n}\ndefer res.Body.Close()","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">req, _ \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> http.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">NewRequestWithContext\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(ctx, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"GET\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\">nil\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">req.Header.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Set\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">, \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"Bearer \"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">+\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">os.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Getenv\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"IPSCOPE_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">res, err \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">:=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> http.DefaultClient.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Do\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">(req)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">if\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> err \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">!=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> nil\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">\treturn\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> err\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">defer\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> res.Body.\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">Close\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\">()\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"type":150,"responses":232},[233,295,315,321,342,349],{"code":153,"name":234,"description":235,"schema":236,"example":283,"defaultOpen":89,"exampleHtml":294},"MmdbReleaseListResponse","Published MMDB, CSV, and Parquet release manifests and SHA-256 digests.",[237,240],{"name":238,"type":117,"description":239,"required":89,"example":121},"count","Number of published releases returned.",{"name":241,"type":242,"description":243,"required":89,"isRef":89,"children":244},"releases","MmdbReleaseManifest[]","Ordered list of compiled release manifests.",[245,249,253,257,263],{"name":246,"type":82,"description":247,"required":89,"example":248},"releaseId","Unique release identifier (`\"rel_...\"`).","rel_20261027_0000",{"name":250,"type":82,"description":251,"required":89,"example":252},"snapshotVersion","Source dataset snapshot version.","2026-10-27T00:00:00Z.crawl-1793088000000",{"name":254,"type":82,"description":255,"required":89,"format":256},"createdAt","ISO 8601 UTC compilation timestamp.","date-time",{"name":258,"type":82,"description":259,"required":89,"enum":260,"example":261},"status","Release lifecycle status.",[261,262],"published","archived",{"name":264,"type":265,"description":266,"required":89,"isRef":89,"children":267},"artifacts","MmdbArtifactItem[]","Compiled files available in this release.",[268,272,276,280],{"name":269,"type":82,"description":270,"required":89,"enum":271},"format","Artifact format (`\"mmdb\"`, `\"csv\"`, `\"parquet\"`).",[91,92,93],{"name":273,"type":82,"description":274,"required":89,"example":275},"filename","Canonical filename.","ipscope-complete.mmdb",{"name":277,"type":117,"description":278,"required":89,"example":279},"sizeBytes","Compressed artifact size in bytes.",148291584,{"name":281,"type":82,"description":282,"required":89},"sha256","Hex-encoded SHA-256 checksum verified prior to atomic swap.",{"count":121,"releases":284},[285],{"releaseId":248,"snapshotVersion":252,"createdAt":286,"status":261,"artifacts":287},"2026-10-27T00:00:00Z",[288,290],{"format":91,"filename":275,"sizeBytes":279,"sha256":289},"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",{"format":93,"filename":291,"sizeBytes":292,"sha256":293},"ipscope-complete.parquet",112408192,"4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"count\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 1\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"releases\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">      \"releaseId\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"rel_20261027_0000\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">      \"snapshotVersion\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"2026-10-27T00:00:00Z.crawl-1793088000000\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">      \"createdAt\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"2026-10-27T00:00:00Z\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">      \"status\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"published\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">      \"artifacts\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">        {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"format\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"filename\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"ipscope-complete.mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"sizeBytes\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 148291584\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"sha256\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">        }\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">        {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"format\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"parquet\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"filename\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"ipscope-complete.parquet\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"sizeBytes\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 112408192\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">          \"sha256\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">      ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"code":296,"name":297,"description":298,"schema":299,"example":312,"exampleHtml":314},"201","MmdbDownloadTokenResponse","Short-lived HMAC download token from POST \u002Fv1\u002Fmmdb\u002Freleases\u002F{id}\u002Fdownload-token.",[300,304,306,309],{"name":301,"type":82,"description":302,"required":89,"example":303},"token","Signed short-lived download token.","dl_tok_9f86d081884c7d659a2f",{"name":246,"type":82,"description":305,"required":89,"example":248},"Resolved release ID.",{"name":269,"type":82,"description":307,"required":89,"enum":308,"example":91},"Authorized artifact format.",[91,92,93],{"name":310,"type":82,"description":311,"required":89,"format":256},"expiresAt","ISO 8601 UTC token expiration timestamp.",{"token":303,"releaseId":248,"format":91,"expiresAt":313},"2026-10-27T02:45:00.000Z","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"token\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"dl_tok_9f86d081884c7d659a2f\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"releaseId\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"rel_20261027_0000\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"format\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"expiresAt\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"2026-10-27T02:45:00.000Z\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"code":153,"name":316,"description":317,"contentType":318,"example":319,"exampleHtml":320},"SHA256SUMS","Plain-text SHA256SUMS manifest from GET \u002Fv1\u002Fmmdb\u002Freleases\u002F{id}\u002Fchecksums?format=text.","text\u002Fplain","9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  ipscope-complete.mmdb\n4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a  ipscope-complete.parquet","\u003Cpre class=\"shiki\">\u003Ccode>9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  ipscope-complete.mmdb\n4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a  ipscope-complete.parquet\u003C\u002Fcode>\u003C\u002Fpre>",{"code":322,"name":323,"description":324,"schema":325,"example":336,"exampleHtml":341},"302","GcsSignedUrlRedirect","Redirect to a 15-minute Google Cloud Storage V4 Signed URL when ?redirect=true is passed.",[326,330,333],{"name":327,"type":82,"description":328,"required":89,"format":329},"Location","HTTPS GCS V4 signed URL (`X-Goog-Algorithm=GOOG4-RSA-SHA256`, `X-Goog-Expires=900`).","uri",{"name":331,"type":82,"description":332,"required":89},"ETag","Quoted SHA-256 checksum of the artifact (`\"\u003Csha256>\"`).",{"name":334,"type":82,"description":335,"required":89},"X-MMDB-SHA256","Hex-encoded SHA-256 digest of the artifact.",{"statusCode":337,"headers":338},302,{"Location":339,"ETag":340,"X-MMDB-SHA256":289},"https:\u002F\u002Fstorage.googleapis.com\u002Fipscope-releases\u002Frel_20261027_0000\u002Fipscope-complete.mmdb?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Expires=900","\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\"","\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"statusCode\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 302\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"headers\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    \"Location\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"https:\u002F\u002Fstorage.googleapis.com\u002Fipscope-releases\u002Frel_20261027_0000\u002Fipscope-complete.mmdb?X-Goog-Algorithm=GOOG4-RSA-SHA256&#x26;X-Goog-Expires=900\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    \"ETag\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"\\\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\\\"\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">    \"X-MMDB-SHA256\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"code":343,"name":344,"description":345,"schema":346},"304","NotModified","Returned when If-None-Match matches the release ETag (\"\u003Csha256>\").",[347],{"name":331,"type":82,"description":348,"required":89},"Unchanged artifact SHA-256 ETag.",{"code":350,"name":183,"description":351,"schema":352,"example":359,"exampleHtml":360},"403","API key does not have the required download scope or invalid download token.",[353,355,357],{"name":187,"type":117,"description":188,"required":89,"example":354},403,{"name":191,"type":82,"description":192,"required":89,"example":356},"API key does not have required scope: download",{"name":195,"type":82,"description":196,"required":89,"example":358},"Forbidden",{"statusCode":354,"message":356,"error":358},"\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"statusCode\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-constant)\"> 403\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"message\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"API key does not have required scope: download\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-keyword)\">  \"error\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-punctuation)\">:\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Forbidden\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[362,363,364],{"id":13,"text":12,"level":11},{"id":62,"text":61,"level":11},{"id":202,"text":201,"level":11},1793226505709]