Guides / Reference

A list of dog breeds as JSON

By the Dog Image API team. Updated .

GET https://dogimage.dev/api/v1/breeds returns every breed in the catalog as JSON, with no key. Each breed has a slug, a display name, a crossbreed flag, a default variant and its color variants. On 2026-11-14 the list held 298 breeds.

The request

curl -s https://dogimage.dev/api/v1/breeds

The reply has two top-level keys. views lists the nine image views, and breeds lists the breeds. A shortened reply looks like this:

{
  "views": [
    { "id": "front", "label": "Front" },
    { "id": "front-left", "label": "Front three-quarter, left" }
  ],
  "breeds": [
    {
      "slug": "french-bulldog",
      "name": "French Bulldog",
      "crossbreed": false,
      "default_variant": "fawn",
      "variants": [
        { "slug": "blue", "name": "Blue", "kind": "color" },
        { "slug": "fawn", "name": "Fawn", "kind": "color" }
      ]
    }
  ]
}

The fields

Each item in breeds has these fields:

  • slug: the identifier for URLs and API paths, such as golden-retriever.
  • name: the display name, such as Golden Retriever.
  • crossbreed: true or false.
  • default_variant: the slug of the breed's main set, such as fawn.
  • variants: the sets for that breed. Each has a slug, a name and a kind, which is color, pattern or coat.

Most breeds have one set. Seven breeds have several colors: French Bulldog, Golden Retriever, German Shepherd, Dachshund, Doberman, Poodle and Great Dane. That is why the catalog has more sets than breeds.

The views array is the same for every breed, so you read it once. Its ids are what you place at the end of an image path.

A plain name list with jq

Names only, one per line:

curl -s https://dogimage.dev/api/v1/breeds | jq -r '.breeds[].name'

A CSV of slug and name:

curl -s https://dogimage.dev/api/v1/breeds \
  | jq -r '.breeds[] | [.slug, .name] | @csv'

Only breeds that come in more than one set:

curl -s https://dogimage.dev/api/v1/breeds \
  | jq -r '.breeds[] | select(.variants | length > 1) | .name'

Count the breeds:

curl -s https://dogimage.dev/api/v1/breeds | jq '.breeds | length'

A select menu in JavaScript

The endpoint allows cross-origin reads, so a browser page on any site can call it. This fills a <select> with every breed, sorted by name:

<select id="breed"></select>
<script>
  fetch("https://dogimage.dev/api/v1/breeds")
    .then((res) => res.json())
    .then(({ breeds }) => {
      const select = document.getElementById("breed");
      breeds
        .slice()
        .sort((a, b) => a.name.localeCompare(b.name))
        .forEach((breed) => {
          const option = document.createElement("option");
          option.value = breed.slug;
          option.textContent = breed.name;
          select.append(option);
        });
    });
</script>

The value of each option is the slug. When a visitor picks a breed, you can fetch /api/v1/breeds/{slug} for its image URLs. If you show a preview, add the credit link that the license requires.

The same idea in Node 18 or later, to write a plain list of names to a file:

const res = await fetch("https://dogimage.dev/api/v1/breeds");
const { breeds } = await res.json();
const names = breeds.map((breed) => breed.name).sort();
console.log(names.join("\n"));

Cache it, and handle errors

The list changes only when the catalog changes. Fetch it at build time or cache it on your server for a day, rather than on every page view. The API states no per-request rate limit, but a cached list is faster for your visitors anyway. In code, check res.ok before you parse the reply, and fall back to your cached copy if the request fails. Errors come back as JSON in the form {"error": {"code": "...", "message": "..."}}.

Where the names come from

Breed names and color names come from Wikidata, which is published under CC0. Breed summaries come from Wikipedia, under CC BY-SA 4.0. The catalog JSON, including this list, is shared under CC BY-SA 4.0.

In practice, if you republish the list or something built from it, credit the source and share your version under the same license. The license page is the reference, and it is marked as a draft not yet reviewed by a lawyer, so read it yourself before you rely on it for a commercial product. The images follow different terms than the JSON.

Which breeds are in the list

The list is not a kennel club registry, and it does not include every breed anyone has ever named. It is drawn from Wikidata and ranked by search interest. For the longer story of why breed counts differ, see how many dog breeds there are. To browse the result as pictures, open the all breeds page.

Questions

Do I need an API key to get the breed list?

No. GET /api/v1/breeds is open and needs no key. Browser apps on other sites may call it directly.

How many breeds are in the list?

On 2026-11-14 the list held 298 breeds. The count changes as the catalog grows, so read the length of the breeds array instead of hardcoding a number.

Can I reuse the list in my own project?

Yes. The catalog JSON is shared under CC BY-SA 4.0, which asks for credit and for sharing adaptations under the same license. Read the license text for the exact terms.

Why is there a slug and a name?

The name is for people to read, such as French Bulldog. The slug, such as french-bulldog, is the stable identifier you put in URLs and API paths.

Next steps