[{"data":1,"prerenderedAt":47},["ShallowReactive",2],{"doc:\u002Fdatabases\u002Fdownloading":3},{"page":4,"toc":44},{"path":5,"title":6,"description":7,"blocks":8},"\u002Fdatabases\u002Fdownloading","Downloading & checksums","Fetch database snapshots via HMAC-signed URLs, GCS V4 streaming redirects, ETag caching, and SHA-256 verification.",[9,12,17,29,32,34,40],{"type":10,"text":11},"p","Database artifacts are served from `https:\u002F\u002Fdownload.ipscope.io` using HMAC-signed download tokens generated in your [dashboard](https:\u002F\u002Fdashboard.ipscope.io) or via authenticated API headers. When object storage offloading is active, the download server issues a `307 Temporary Redirect` to a Google Cloud Storage V4 signed URL so multi-hundred-megabyte artifacts stream directly from edge storage.",{"type":13,"level":14,"text":15,"id":16},"heading",2,"Download URL structure","download-url-structure",{"type":18,"samples":19},"code",[20,25],{"label":21,"lang":22,"code":23,"html":24},"Download .mmdb","bash","curl -fSL \"https:\u002F\u002Fdownload.ipscope.io\u002Fv1\u002Fdatabases\u002Fipscope-complete\u002Flatest.mmdb\" \\\n  -H \"Authorization: Bearer $IPSCOPE_KEY\" \\\n  -o ipscope-complete.mmdb","\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)\"> -fSL\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"https:\u002F\u002Fdownload.ipscope.io\u002Fv1\u002Fdatabases\u002Fipscope-complete\u002Flatest.mmdb\"\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)\">  -o\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> ipscope-complete.mmdb\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":26,"lang":22,"code":27,"html":28},"Download SHA-256 checksum","curl -fSL \"https:\u002F\u002Fdownload.ipscope.io\u002Fv1\u002Fdatabases\u002Fipscope-complete\u002Flatest.mmdb.sha256\" \\\n  -H \"Authorization: Bearer $IPSCOPE_KEY\" \\\n  -o ipscope-complete.mmdb.sha256\n\nsha256sum -c ipscope-complete.mmdb.sha256","\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)\"> -fSL\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"https:\u002F\u002Fdownload.ipscope.io\u002Fv1\u002Fdatabases\u002Fipscope-complete\u002Flatest.mmdb.sha256\"\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)\">  -o\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> ipscope-complete.mmdb.sha256\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">sha256sum\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -c\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> ipscope-complete.mmdb.sha256\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"type":13,"level":14,"text":30,"id":31},"Conditional downloads (`ETag` \u002F `If-None-Match`)","conditional-downloads-etag-if-none-match",{"type":10,"text":33},"Every snapshot response includes an `ETag` header matching the artifact’s SHA-256 digest and an `X-IPScope-Checksum-SHA256` header. Pass `--etag-save` and `--etag-compare` in `curl` so cron jobs receive `304 Not Modified` when no new build has been published:",{"type":18,"samples":35},[36],{"label":37,"lang":22,"code":38,"html":39},"Conditional fetch with ETag","curl -fSL \"https:\u002F\u002Fdownload.ipscope.io\u002Fv1\u002Fdatabases\u002Fipscope-complete\u002Flatest.mmdb\" \\\n  -H \"Authorization: Bearer $IPSCOPE_KEY\" \\\n  --etag-compare \u002Fvar\u002Flib\u002Fipscope\u002Fmmdb.etag \\\n  --etag-save \u002Fvar\u002Flib\u002Fipscope\u002Fmmdb.etag \\\n  -o \u002Fvar\u002Flib\u002Fipscope\u002Fipscope-complete.mmdb","\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)\"> -fSL\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"https:\u002F\u002Fdownload.ipscope.io\u002Fv1\u002Fdatabases\u002Fipscope-complete\u002Flatest.mmdb\"\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)\">  --etag-compare\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> \u002Fvar\u002Flib\u002Fipscope\u002Fmmdb.etag\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  --etag-save\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> \u002Fvar\u002Flib\u002Fipscope\u002Fmmdb.etag\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string)\">  -o\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> \u002Fvar\u002Flib\u002Fipscope\u002Fipscope-complete.mmdb\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"type":41,"tone":42,"text":43},"callout","tip","Interrupted downloads can be resumed with `curl -C -` (`Range: bytes=...`). Always pass `-L` (`--location`) so `curl` follows GCS V4 signed URL redirects.",[45,46],{"id":16,"text":15,"level":14},{"id":31,"text":30,"level":14},1793226505836]