List the registry tags a workflow run pushed
GET/api/workflow-runs/{run_id}/packages
listWorkflowRunPackages
Tags whose latest push came from this run's job token, grouped by package, newest first. A tag a later push re-bound no longer names this run. Authorized as a read of the run's repo (404 otherwise), and each package is then filtered through the pull path's own decision — a run may push to a package its reader cannot pull.
Authentication is not described for this operation in the spec — that does not mean it is public. Check tokens and scopes.
curl
curl -X GET 'https://neosource.dev/api/workflow-runs/RUN_ID/packages'fetch
fetch("https://neosource.dev/api/workflow-runs/RUN_ID/packages", {
method: "GET",
});Path parameters
run_idrequired
Responses
200Packages the run pushed
application/json
403Forbidden — one of: forbidden, needs_scope
application/json
Standard errors
Bodies documented once for the whole API — see standard errors.
- 400Bad Request — one of: invalid_input
- 404Not Found — one of: not_found
- 429Rate limited — retry after the `Retry-After` header
- 500Internal server error
- 503Service temporarily unavailable / at capacity — retry after the `Retry-After` header
- 504Gateway timeout — the request exceeded the server's handling budget
Schemas
Referenced above. Listed here rather than expanded inline, so the same definition is not repeated at every level.
PackageResponse
One registry package. `visibility` is the package's OWN visibility, never the linked repo's: anonymous pull is gated on this field alone (ADR 0097 §4), and a private repo may hold a public package or the reverse.
created_atrequirednamerequiredThe `{package}` path component. Obeys the OCI `path-component` grammar, which is narrower than a repo slug.
ownerrequiredOwner handle the package is served under — the `{owner}` in `/v2/{owner}/{package}`.
package_idrequiredpull_refrequiredWhat `docker pull` takes, without a tag: `{registry_host}/{owner}/{name}`, where the host is the registry's ADVERTISED hostname (`neocr.io` in production, ADR 0097 §1) — the forge's own host only where no separate registry host is configured.
example
"neocr.io/neosource/server"repo_idThe optional repo link. `null` for an unlinked package, and on the read routes also when the caller cannot read the linked repo (a public package may link a private one).
updated_atrequiredvisibilityrequiredworkspace_idrequired
PackageTagResponse
One tag with the provenance of its latest push. Every provenance field is `null` for a tag bound before provenance was recorded.
digestrequired`sha256:<hex>` — the manifest digest the tag points at.
media_typeThe manifest's `Content-Type` as pushed. An open vocabulary (any OCI or Docker manifest media type), hence a string.
pushed_atrequiredWhen the tag was last pushed (Unix millis).
pushed_byHandle of the account the latest push is attributed to; `null` for an actor-less run, a deleted account, a tag predating provenance, or a CI push whose `run` is hidden from the caller.
run- one of
sizeManifest size in bytes.
tagrequired