---
title: "Get asset"
method: GET
path: "/v2/assets/{id}"
tags: ["Assets"]
---

# Get asset

`GET /v2/assets/{id}`

Retrieve a single asset by ID, including a signed download URL when ready.

**Required OAuth scope:** `assets:read`

## Path parameters

- `id` string, required

## Response `200`

OK

- AssetDetailResponse — JSON:API single-resource response for an asset.
  - `data` AssetDetailResource, required — JSON:API resource object for an asset, as returned on retrieve.
    - `type` 'assets' — Always "assets".
    - `id` string, required — Opaque asset ID. Use in URL paths.
    - `attributes` AssetDetailAttributes, required — Attributes returned on the single-resource response. Adds ``download_url``, which is withheld from list because generating it signs a URL per row.
      - `type` string, required — Asset kind: PDF, FILE, HTML, VIDEO_BOTR, AUDIO_BOTR, or TEMPLATE. Server-determined from the fetched content — a value supplied on create seeds the row but is provisional and may be corrected during ingest.
      - `state` string, required — Ingestion state: PROCESSING while the asset is being fetched, stored and (for video/audio) handed to JW Platform; READY once that handoff has been accepted; ERROR if it could not be completed. Poll this field after create. READY means accepted for processing, not that transcoding has finished.
      - `title` string, required — Human-readable label. Server-derived from the uploaded filename when not set explicitly.
      - `status_msg` string, required — Reason the asset reached ERROR, or empty when there is none. Generic by design — it never names the host or address a fetch was attempted against.
      - `created_at` string, date-time, required — Timestamp when the asset was created.
      - `modified_at` string, date-time, required — Timestamp when the asset was last modified.
      - `download_url` string, nullable — Time-limited signed URL for the stored file, or null when the asset is not READY or has no stored file. Stricter than API v1, which withholds the URL only while PROCESSING and will therefore sign one for a failed asset whose stored file was never written.
    - `links` object, nullable — Self and related links.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Unprocessable Entity

## Changes

- **2026-09-01** `a3c13d9cb9b7` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/skilljar/apis/skilljar-api-v2/changes/v2/assets/:id/get.md)

---

[API](https://skmtc.dev/skilljar/apis/skilljar-api-v2.md) · [All operations](https://skmtc.dev/skilljar/apis/skilljar-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/skilljar/skilljar-api-v2/revisions/91fb0195e524/schema)
