Quay.io API
Browse public container image repositories on Quay.io as JSON with no token. Filter by namespace, read descriptions and states. Verified example and paging notes.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Quay.io API?
Quay.io, Red Hat's container registry, exposes a public REST API. `GET https://quay.io/api/v1/repository?public=true&namespace=coreos` lists public repositories in a namespace with their names, descriptions and states. No token is required for public data.
Quay hosts a large share of the Kubernetes ecosystem's images, including the CoreOS, Prometheus and Argo projects, so it is the second registry any container tooling needs to speak to after Docker Hub. Its API is a conventional REST design with a token-optional model: anonymous callers see public repositories, and a bearer token unlocks private ones and write operations.
One behaviour to plan for: in our probe the response ignored a `limit` parameter and returned the full first page regardless. Quay pages with an opaque `next_page` token rather than with offsets, so the correct pattern is to read `next_page` from the response and pass it back, not to try to control page size. Descriptions are free-text and frequently contain Markdown, and quite often they are just a bare GitHub URL.
Quick facts
- Base URL
https://quay.io/api/v1- Authentication
- Anonymous access covers public repositories. An OAuth bearer token is required for private repositories, tags and any write operation.
- Rate limit
- Not published for anonymous reads. Quay throttles aggressive clients; identify yourself with a User-Agent.
- Pricing
- Free for public repositories. Red Hat sells private hosting.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Quay.io API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List public repositories in a namespace
GET https://quay.io/api/v1/repository?public=true&namespace=coreos&limit=2
curl 'https://quay.io/api/v1/repository?public=true&namespace=coreos&limit=2'const res = await fetch("https://quay.io/api/v1/repository?public=true&namespace=coreos&limit=2");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://quay.io/api/v1/repository?public=true&namespace=coreos&limit=2", timeout=20)
res.raise_for_status()
print(res.json()){
"repositories": [
{
"namespace": "coreos",
"name": "flannelbox",
"description": null,
"is_public": true,
"kind": "image",
"state": "NORMAL"
},
{
"namespace": "coreos",
"name": "flannel",
"description": "flannel is an etcd backed network fabric for containers",
"is_public": true,
"kind": "image",
"state": "NORMAL"
},
{
"namespace": "coreos",
"name": "etcd",
"description": "Built releases of https://github.com/coreos/etcd",
"is_public": true,
"kind": "image",
"state": "NORMAL"
},
{
"namespace": "coreos",
"name": "etcd-git",
"description": "## Regular Releases\n\nThis docker container is built automatically from git and is useful for testing the latest version of etcd.\n\n## Official Releases\n\nIf you are looking for specific etcd releases see: https://quay.io/repository/coreos/etcd",
"is_public": true,
"kind": "image",
"state": "NORMAL"
},
{
"namespace": "coreos",
"name": "flannel-git",
"description": "Builds of flannel that track git master.",
"is_public": true,
"kind": "image",
"state": "NORMAL"
},
{
"namespace": "coreos",
"name": "elb-presence",
"description": "https://github.com/coreos/elb-presence",
"is_public": true,
"kind": "image",
"state": "NORMAL"
},
{
"namespace": "coreos",
"name": "tectonic-console",
"description": "https://github.com/openshift/console",
"is_public": trueParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
public | boolean | Optional | Set to `true` to include public repositories in the listing. true |
namespace | string | Optional | Restrict results to one organisation or user, such as `coreos` or `prometheus`. coreos |
next_page | string | Optional | Opaque paging token taken from the previous response. This, not `limit`, is how you page. |
popularity | boolean | Optional | Include popularity metrics on each repository where available. true |
Response fields
repositoriesarray- The repository list. A `next_page` field appears alongside it when more results exist.
namespace / namestring- Organisation and repository name. The pullable image reference is `quay.io/{namespace}/{name}`.
descriptionstring or null- Free-text description, frequently containing Markdown and sometimes only a GitHub URL. Often null.
is_publicboolean- Visibility flag. Anonymous listings only ever contain public repositories, so this is always true without a token.
kindstring- `image` for ordinary container repositories. Quay also hosts application repositories, which use a different kind.
statestring- `NORMAL` for a healthy repository. Other values indicate read-only or mirrored repositories.
What you can build with the Quay.io API
- Discover which images an upstream project publishes before pinning one
- Build an internal catalogue of approved container images
- Check whether a project has migrated its images between registries
- Audit the public footprint of your own organisation's namespace
- Feed a registry browser or supply-chain inventory tool
Common errors and how to fix them
401
You requested a private repository or an endpoint that requires a bearer token.
Fix: Anonymous access is limited to public data. Tag listings and repository details for private repos need OAuth.
limit parameter ignored
The listing endpoint pages with an opaque token rather than a page size.
Fix: Read `next_page` from the response and pass it back as a parameter; do not rely on `limit`.
404
The namespace does not exist or has no public repositories.
Fix: Namespace names are lowercase. Check the organisation page on quay.io first.
Quay.io API — frequently asked questions
Can I use the Quay.io API without an account?
Yes for public data. Listing public repositories, as shown here, needs no token. Private repositories and write operations require OAuth.
How do I page through results?
Use the `next_page` token returned alongside the results. Quay does not use offset or page-size parameters for this endpoint.
How does Quay compare with Docker Hub for API access?
Both allow anonymous reads of public data. Quay's API is broader and openly documented with Swagger, while Docker Hub applies stricter anonymous pull rate limits at the registry level.
Can I list image tags?
Tag endpoints exist under the repository path, but many of them require authentication even for public repositories, so expect to supply a token for tag-level work.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON Viewer
View JSON as a collapsible interactive tree online. Expand and collapse nodes, search keys and values, and copy the JSONPath of any node privately.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
Quay.io is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.