---
title: "Download a person asset by asset ID"
method: GET
path: "/api/v4/persons/{personId}/assets/{assetId}/download"
tags: ["Profile Assets"]
---

# Download a person asset by asset ID

`GET /api/v4/persons/{personId}/assets/{assetId}/download`

## Request

- Base URL: `https://api.extole.io`
- URL: `https://api.extole.io/api/v4/persons/{personId}/assets/{assetId}/download`
- Auth: one of:
  - API key in header `Authorization`
  - API key in query parameter `access_token`
  - API key in cookie `extole_token`
- TypeScript: <https://skmtc.dev/extole/apis/integration-api-server-to-extole/docs/api/v4/persons/:personId/assets/:assetId/download/get.ts> (a function with typed inputs; its response is checked against the schema)

Streams the binary or text content of the asset identified by `assetId`. Returns HTTP 302 if the content is hosted at a remote URL; returns HTTP 200 with the raw content otherwise. Use the `name` variant (`downloadPersonAssetByName`) when you have the asset name but not the id.

## Path parameters

- `personId` string, required
- `assetId` string, required

## Response `200`

Binary asset content stream with the asset's stored content type.

## Other responses

- `302`: Redirect to remote asset content.
- `400`: Asset lookup or download failed: `asset_not_found` if no matching asset is attached to the person; `asset_content_not_downloadable` if the asset's content cannot be streamed.
- `401`: Unauthorized
- `403`: Forbidden
- `415`: Unsupported Media Type
- `429`: Too Many Requests

---

[API](https://skmtc.dev/extole/apis/integration-api-server-to-extole.md) - [All operations](https://skmtc.dev/extole/apis/integration-api-server-to-extole/llms.txt) - [OpenAPI document](https://skmtc.dev/extole/apis/integration-api-server-to-extole/revisions/c16e62e66755?raw)
