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.

typeRepresentsShape
artifact_signed_urlA 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_linkA 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 the PATCH / DELETE routes — 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_count before deciding whether to revoke it.

Path parameters

ParamTypeDescription
iduuidArtifact ID. Must be visible to your organization.

Filters

Use filter[field]=condition:value syntax. See query-parameters.md for the full filter grammar.

FilterTypeAllowed conditionsDescription
filter[issued_at]dateeq, gt, gte, lt, lteISO-8601 minting timestamp. in is not supported.
filter[requested_by_user_id]uuideqUser 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[])

Each entry is one of two variants, discriminated by type.

type: "artifact_signed_url" — a short-lived minting event

FieldTypeDescription
type"artifact_signed_url"Discriminator.
iduuidAudit row ID.

attributes

FieldTypeDescription
artifact_iduuidThe artifact this minting event covered.
requested_by_user_iduuid | nullUser who minted the URL. null when the request was authenticated with an org-level API key.
ttl_secondsintLifetime requested at minting.
issued_atISO 8601When the URLs were minted.
expires_atISO 8601When the URLs expired (or will expire).
partition_countintNumber of files covered by this minting event.
FieldTypeDescription
type"artifact_download_link"Discriminator.
iduuidDownload link ID. Not the token, and not usable to download.

attributes

FieldTypeDescription
artifact_iduuidArtifact this link resolves to.
expires_atISO 8601When the link stops working, unless retuned.
revoked_atISO 8601 | nullWhen it was revoked, or null while still live.
last_accessed_atISO 8601 | nullLast successful download, or null if never used.
access_countintSuccessful downloads recorded against this link.
created_atISO 8601When the link was minted.

Status codes

  • 200 — Success.
  • 400 — Invalid id (not a UUID) or invalid filter / query parameters.
  • 401 — Missing or invalid API key.
  • 403 — Caller lacks the artifacts:read scope.
  • 404 — Artifact does not exist or is not visible to your organization.

Required scope: artifacts:read