BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://quay.io/api/v1/repository?public=true&namespace=coreos&limit=2'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200 (truncated)
{
  "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": true

Parameters

ParameterTypeRequiredDescription
publicbooleanOptionalSet to `true` to include public repositories in the listing. true
namespacestringOptionalRestrict results to one organisation or user, such as `coreos` or `prometheus`. coreos
next_pagestringOptionalOpaque paging token taken from the previous response. This, not `limit`, is how you page.
popularitybooleanOptionalInclude 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

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.