Animal colours
The platform describes an animal’s appearance with one colour catalog. Colours, patterns and markings
have stable ids and sysNames, and sit on the areas of the animal they describe (coat, eye, beak,
eggshell, …). Store the ids, key on sysName, and display name
(Localized names).
All routes below are anonymous GETs under animal-taxonomy/v1/. Responses use the standard envelope
(data, resultCode) and are cached, so the same request returns the same data until the catalog
changes.
The palette
Section titled “The palette”GET colors/palette?locale=fr-FR returns everything a colour picker needs, in one call per locale:
| Field | What it holds |
|---|---|
areas | The parts of an animal a colour describes. isAnimalAppearance: false marks what a breed produces (eggshell). |
families | Broad hues (black, brown, red, …) for facets and coarse matching. |
colors | Each colour with hexCode (and accentHexCode for a two-tone colour), the areaIds it can occur on, and kindId. |
patterns | Each pattern with an SVG swatchSvg template and its slots: the colours the pattern takes, in picker order. |
markings | Each marking (blaze, socks, …) with an SVG template and the colors it comes in, one marked isDefault. |
kinds | What a colour is: PIGMENT, PIGMENT_CONDITION (albino, leucistic, lutino), COMBINATION (bay, buckskin, roan), STRUCTURAL (feather-structure blues). |
slotRoles | The job a colour does in a pattern: BASE, POINTS, WHITE_AREAS, STRIPES, … |
implicationStrengths, changeKinds, aliasKinds | The lookups the relation reads below refer to. |
Each slot has slotNo, roleId, isRequired, defaultColorId and isColorFixed. A fixed slot is
always its default colour: a piebald’s white areas are white. So a picker asks for one colour for
SOLID, a base and a points colour for TAN_POINT with tan preselected, and so on.
Patterns that cannot share an area. A colour area takes up to three patterns, and they stack (a
blue merle tricolour is TRICOLOR + MERLE). A pattern with excludesOtherPatterns: true (SOLID,
PATTERNLESS) means “no pattern” and never sits beside another. Other pairs that cannot share one of a
species’ areas are listed per species (below). The platform refuses an animal record that breaks either
rule, so a picker should take the other pattern off when one is picked.
Rendering a swatch. A swatchSvg has {base} and {overlay} placeholders. Replace them with the
animal’s own hexCodes and render the result as an <img> data URI. Never insert it into the page as
inline SVG.
Species and breed lists
Section titled “Species and breed lists”GET colors/species/{speciesId}lists the colours, patterns and markings a species comes in, per area.GET colors/breeds/{breedId}lists a breed’s colours and patterns (the union across clubs) with every club’s verdict (STANDARD,ALTERNATE,FAULT,DISQUALIFYING,NOT_RECOGNIZED).
Both return ids into the palette.
The species list also returns patternExclusions: [{ areaId, patternId, excludedPatternId, reasonCode }],
the pattern pairs one of the species’ areas cannot hold together, stored both ways (read one direction).
reasonCode is SAME (two names for one pattern), ALTERNATIVE (one of a series: brindle or reverse
brindle, one tabby type), INCLUDES (the pattern already holds the other: a double merle is a merle) or
PART_OF (the reverse). Added 2026-10-04 (species list 1.1, palette 1.2); available once that AnimalTaxonomy
host is released.
GET colors/species/{speciesId}/{kind}/{valueId}/breeds?locale=is the reverse of a breed list: every active breed of the species that lists one colour (kind=colors) or pattern (kind=patterns), by name, with the breed’s page slug and every club’s verdict. A breed appears once per colour area and variety it lists the value in (areaId,varietyId; a null variety is the whole breed). Breeds without a published page are left out. An unknown species, kind or value answers 404. Added 2026-10-03; available once the AnimalTaxonomy host of that date is released.
{ "schemaVersion": "1.0", "speciesId": 1, "kind": "colors", "valueId": 1, "breeds": [ { "breedId": 21, "breedCode": "LRAB", "breedSysName": "LABRADOR_RETRIEVER", "breedName": "Labrador Retriever", "breedSlug": "labrador-retriever", "areaId": 1, "varietyId": null, "recognitions": [ { "registryId": 2, "registrySysName": "AKC", "statusId": 1, "registryTerm": "Black", "registryCode": "007", "sourceUrl": "https://www.akc.org/dog-breeds/labrador-retriever/" } ] } ]}What one part implies for another
Section titled “What one part implies for another”GET colors/species/{speciesId}/implications returns the species’ rules. A colour, pattern or marking
on one area (the source) says something about another area (the target):
- a liver dog has a liver nose, never a black one;
- an albino rat has pink-red eyes;
- a bay horse has a black mane and tail.
Each rule has sourceAreaId, exactly one of sourceColorId / sourcePatternId / sourceMarkingId,
targetAreaId, exactly one of targetColorId / targetPatternId, and strengthId. Narrow the source
with areaId, colorId, patternId or markingId.
Apply the rules for one source and target area together:
| Strength | Meaning | A picker should |
|---|---|---|
ALWAYS | The target is one of these rows | Offer only these |
NEVER | The target is never this | Remove it |
USUALLY | Most animals are | Preselect it |
Colours that change
Section titled “Colours that change”GET colors/species/{speciesId}/changes and GET colors/breeds/{breedId}/changes list colours that
turn into others with age, over the animal’s life, with the season, with temperature, in the sun or with
the body’s state. Examples:
- a grey horse is born dark and whitens;
- a Kerry Blue Terrier is born black;
- a Siamese’s points darken with cold;
- a kitten’s blue eyes change.
Each row has areaId, an optional from colour or pattern (none = whatever the animal is born with), a
to colour or pattern, kindId, an age window in weeks, sexCode and isReversible. The species route
returns rows for every breed; the breed route adds the breed’s own. Use them to label old photos and
to widen a lost animal’s colours to what it may have turned into.
Search in every language
Section titled “Search in every language”GET colors/search?q=ginger&locale=en-GB&speciesId=2 finds colours, patterns and markings by any of their
names or by the words people actually use, in all 72 locales. A “ginger” cat is the fancy’s red, a
“grey” dog is blue.
- Matching ignores case, accents and punctuation (“Café-au-lait” matches “cafe au lait”).
- Results. Each value appears once, best match first, with
namein your locale,matchedTextandmatchedLocale,matchType(NAMEorALIAS),aliasKindIdand ascorefrom 1 to 100. speciesIdkeeps only that species’ colours, and only the words that apply to it (“sorrel” is a chestnut horse but a cinnamon Abyssinian cat).limit: 1-50, default 20.
Not available to partners
Section titled “Not available to partners”Look-alike scores (which colours a finder or a photo confuses), the colour genetics (loci, alleles and genotypes) and the bulk catalog export are used by the platform’s own services and are not part of the partner API.