Skip to Content
We are live but in Staging 🎉
API ReferenceControl Plane

Control Plane

All paths are relative to the registry base URL (https://registry.dodil.io, staging https://registry.dodil.io). {org} is your organization name; {reference} is a tag or URL-encoded digest. Auth and pagination conventions: API Reference.

List repositories

GET /{org}?page=1&page_size=15
{ "items": [ { "name": "web", "project_name": "acme", "artifact_count": 4, "pull_count": 132, "creation_time": "2026-07-02T09:11:40Z", "update_time": "2026-08-01T10:14:02Z", "public": false } ], "total_count": 2 }

There is no create endpoint — a repository appears here after the first docker push to its name.

List artifacts

GET /{org}/{repo}/artifacts?page=1&page_size=15
{ "items": [ { "digest": "sha256:4f5c2a8b91d2…", "tags": ["latest", "1.2.0"], "size": 54923776, "media_type": "application/vnd.docker.distribution.manifest.v2+json", "push_time": "2026-08-01T10:14:02Z", "pull_time": "2026-08-03T18:40:11Z", "scan_overview": { "scan_status": "Success", "severity": "Low", "total": 3, "fixable": 1 } } ], "total_count": 4 }

scan_overview is absent until the push-time scan has produced a result. size is bytes.

Delete artifact

DELETE /{org}/{repo}/artifacts/{reference}

Deletes the artifact and all its tags; the reference may be any tag or the digest. Empty response on success.

List tags

GET /{org}/{repo}/artifacts/{reference}/tags?page=1&page_size=15
{ "items": [ { "name": "1.2.0", "push_time": "2026-08-01T10:14:02Z", "pull_time": "2026-08-03T18:40:11Z", "immutable": true }, { "name": "latest", "push_time": "2026-08-01T10:14:02Z", "pull_time": "", "immutable": false } ], "total_count": 2 }

Vulnerability report

GET /{org}/{repo}/artifacts/{reference}/vulnerabilities
{ "scan_status": "Success", "severity": "High", "total": 12, "fixable": 7, "vulnerabilities": [ { "id": "CVE-2026-1234", "severity": "High", "package": "openssl", "version": "3.0.11", "fix_version": "3.0.14", "description": "…", "links": ["https://nvd.nist.gov/vuln/detail/CVE-2026-1234"] } ] }

severity is the worst finding (Critical > High > Medium > Low > Negligible > None, or Unknown); fix_version is empty when no fixed release exists. Not paginated — the full report returns in one response.

Set visibility

PATCH /{org}/{repo}/visibility Content-Type: application/json { "public": true }

"public": true allows anonymous pulls; false returns the repository to private. Empty response on success.

Health

GET /health
{ "status": "ok", "service": "registry" }

See also