Animals — entry 006 of 20
Dogs
The Dog CEO API serves random and breed-filtered dog images sourced from the Stanford Dogs Dataset plus community submissions, returning a direct image URL as JSON rather than the binary file itself. A live call to its breed list returns 108 main breeds and 99 named sub-breeds (42 of the mains have sub-breeds), giving 207 callable breed image paths across 165 leaf-level breed collections, each queryable via dedicated endpoints (e.g. /breed/hound/images/random), and it needs no signup or API key. The project is open-source with no pricing tier of any kind; hosting is covered by on-site ads plus voluntary PayPal donations.
Dog CEO serves random and breed-filtered dog images sourced from the Stanford Dogs Dataset plus community submissions, returning a direct image URL as JSON rather than the binary file itself. A live call to /breeds/list/all returns 108 main breeds and 99 named sub-breeds (42 of the mains have sub-breeds), giving 207 callable breed image paths across 165 leaf-level breed collections. It needs no signup or API key, and hosting is covered by on-site ads plus voluntary PayPal donations rather than any paid tier.
GreatAPIs Score
Auth quickstart
- No API key required — requests are public and keyless.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Get a random dog image
GEThttps://dog.ceo/api/breeds/image/random
{
"message": "https://images.dog.ceo/breeds/hound-ibizan/n02091244_2062.jpg",
"status": "success"
}Developer reference
https://dog.ceo/apiGotchas & limits
- Every response — success or error — wraps its payload in the same two-field shape: `message` (a URL, an array of URLs, or an error string depending on the endpoint) and `status` (`success` or `error`). There's no separate `data` key to look for.
- The image itself lives on a different host, `images.dog.ceo`, not `dog.ceo` — the API only ever returns a link to hotlink or download, never the image bytes.
- `GET /breeds/list/all` returns breeds with sub-breeds as an object mapping each breed to an array of its sub-breeds (e.g. `"bulldog": ["boston", "english", "french"]`) — to fetch a sub-breed's image, chain it into the path as `/breed/{breed}/{subbreed}/images/random`, confirmed live with `/breed/bulldog/french/images/random`.
- An unknown breed doesn't 200 with an empty result — confirmed live, `/breed/nonexistentbreed/images/random` returns HTTP 404 with `{"status":"error","message":"Breed not found (main breed does not exist)","code":404}`.