---
title: "Download a technology list"
method: GET
path: "/v1/tech-lookup/lists/{id}/download"
tags: ["Technology Lists"]
---

# Download a technology list

`GET /v1/tech-lookup/lists/{id}/download`

## Request

- Base URL: `https://api.stackscan.com/api`
- URL: `https://api.stackscan.com/api/v1/tech-lookup/lists/{id}/download`
- Auth: HTTP bearer and API key in header `X-Tenant-Id`

Rate limited well below the polling endpoints, because these files reach
1.2 GiB. Each list may also be fetched a limited number of times in
total; the status endpoint reports `downloads_remaining` so you can see
it coming, and a list past its ceiling returns `403
download_limit_reached` rather than a 429, because retrying will not
help.

Attempts are counted, not completed transfers, so a dropped connection
still spends one. An expired file (`410`) does not.

Streams the finished file. Large lists come back as CSV and small ones as
XLSX, whichever survives the row count. Returns 409 while the list is
still `queued`, so a client that polls correctly never sees it.

Free and repeatable for as long as the file is retained.

Rate limit: 10 requests per minute, counted per API token. Going over returns 429 with `error_code: rate_limited` and a `Retry-After` header in seconds. A 429 costs no credits. Traffic is also subject to a higher shared ceiling per network address, applied before authentication.

## Path parameters

- `id` integer, required

## Response `200`

## Other responses

- `401`: Unauthenticated
- `403`
- `404`
- `409`
- `410`: Row is real, bytes are gone. Not counted against the limit.
- `429`: Rate limit exceeded. Costs no credits. Back off for the number of seconds in Retry-After.

---

[API](https://skmtc.dev/stackscan/apis/stackscan-api-reference.md) · [All operations](https://skmtc.dev/stackscan/apis/stackscan-api-reference/llms.txt) · [OpenAPI document](https://skmtc.dev/stackscan/apis/stackscan-api-reference/revisions/66531cd65f3a?raw)
