List Signed URL Audit
History of everything minted against a single artifact — one row per call to POST /artifacts/:id/signed-urls, not per file.
Visibility follows artifact read access. A caller with artifacts:read can see what has been minted; only callers with artifacts:sign can mint new ones.
▶Two kinds of row
The collection is heterogeneous, and the type field tells the two apart. Branch on it before reading attributes — the two shapes do not share every field.
type | Represents | Shape |
|---|---|---|
artifact_signed_url | A short-lived (≤ 7 day) minting event. A historical record; the URLs themselves were never stored. | requested_by_user_id, ttl_seconds, issued_at, expires_at, partition_count |
artifact_download_link | A persistent (> 7 day) link, with its live state. | expires_at, revoked_at, last_accessed_at, access_count, created_at |
The practical difference: an artifact_signed_url row is immutable history, while an artifact_download_link row describes a link that may still be working right now — and that you can retune or revoke. A link is live when revoked_at is null and expires_at is in the future.
Rows of both kinds are interleaved, newest first.
Tokens are never listed. A persistent link's token is returned only at minting. This endpoint identifies links by
id, which cannot be used to download or to address thePATCH/DELETEroutes — so listing is safe to log or surface in a UI.
▶Use cases
- Audit which users or API keys have minted download URLs for a given artifact.
- Review which persistent links are still live, how often each has been used, and when they lapse.
- Spot a link with an unexpected
access_countbefore deciding whether to revoke it.
▶Path parameters
| Param | Type | Description |
|---|---|---|
id | uuid | Artifact ID. Must be visible to your organization. |
▶Filters
Use filter[field]=condition:value syntax. See query-parameters.md for the full filter grammar.
| Filter | Type | Allowed conditions | Description |
|---|---|---|---|
filter[issued_at] | date | eq, gt, gte, lt, lte | ISO-8601 minting timestamp. in is not supported. |
filter[requested_by_user_id] | uuid | eq | User who minted. null (org-key mints) is not addressable via filter. |
Both filters apply to persistent links too, matched against the equivalent field on the link (created_at and the user who minted it) — so a single filter spans both kinds of row.
▶Pagination
Standard page + page_size paging. See query-parameters.md.
▶Response schema (data[])
data[])Each entry is one of two variants, discriminated by type.
▶type: "artifact_signed_url" — a short-lived minting event
type: "artifact_signed_url" — a short-lived minting event| Field | Type | Description |
|---|---|---|
type | "artifact_signed_url" | Discriminator. |
id | uuid | Audit row ID. |
▶attributes
attributes| Field | Type | Description |
|---|---|---|
artifact_id | uuid | The artifact this minting event covered. |
requested_by_user_id | uuid | null | User who minted the URL. null when the request was authenticated with an org-level API key. |
ttl_seconds | int | Lifetime requested at minting. |
issued_at | ISO 8601 | When the URLs were minted. |
expires_at | ISO 8601 | When the URLs expired (or will expire). |
partition_count | int | Number of files covered by this minting event. |
▶type: "artifact_download_link" — a persistent link
type: "artifact_download_link" — a persistent link| Field | Type | Description |
|---|---|---|
type | "artifact_download_link" | Discriminator. |
id | uuid | Download link ID. Not the token, and not usable to download. |
▶attributes
attributes| Field | Type | Description |
|---|---|---|
artifact_id | uuid | Artifact this link resolves to. |
expires_at | ISO 8601 | When the link stops working, unless retuned. |
revoked_at | ISO 8601 | null | When it was revoked, or null while still live. |
last_accessed_at | ISO 8601 | null | Last successful download, or null if never used. |
access_count | int | Successful downloads recorded against this link. |
created_at | ISO 8601 | When the link was minted. |
▶Status codes
200— Success.400— Invalidid(not a UUID) or invalid filter / query parameters.401— Missing or invalid API key.403— Caller lacks theartifacts:readscope.404— Artifact does not exist or is not visible to your organization.
Required scope:
artifacts:read