Design Museum Gent API
Home
Developers
Policy
Github
Swagger
Home
Developers
Policy
Github
Swagger
  • Overview
  • DCAT
  • Overview
  • Object
  • Objects
  • Exhibition
  • Exhibitions
  • Agent
  • Agents
  • Concept
  • Concepts
  • Colors
  • Types
  • Nationalities
  • Materials

Colors

Info

The color endpoints provide two things: a statistical overview of all colors present in the collection with weighted distribution data, and a way to find the objects where a specific color is most dominant. Together they make it possible to build color-based interfaces without guessing what values exist.


Color index

endpoint:

GET https://data.designmuseumgent.be/v2/id/colors

Returns all available base colors and CSS color names with weighted statistics across the full collection.

Response format

PrefixNamespace
crmhttp://www.cidoc-crm.org/cidoc-crm/
hydrahttp://www.w3.org/ns/hydra/core#
rdfshttp://www.w3.org/2000/01/rdf-schema#
CodeDescription
200Successful request
500Server error

Fields

The response contains two top-level arrays — base_colors and css_colors. Each entry contains the same four fields:

FieldDescriptionExample
valueColor name"black" / "Old rose"
object_countNumber of objects that contain this color3241
collection_share_pctPercentage of the total collection palette this color represents18.4
avg_dominance_pctWhen this color appears, how dominant it typically is on average34.2
filterReady-to-use URL to filter the objects collection by this color...?color=black
dominantReady-to-use URL to get the objects where this color is most dominant...dominant?color=black

Reading the statistics

collection_share_pct answers: "what percentage of the entire collection palette is this color?"

avg_dominance_pct answers: "when this color appears in an object, how much of the object does it typically cover?"

For example: grey might have a high collection_share_pct (it appears in many objects) but a moderate avg_dominance_pct (it's often a secondary color). Pink might have a lower collection_share_pct but a high avg_dominance_pct (when an object is pink, it's very pink).

Available base colors

red orange yellow green blue purple pink brown grey black white

Example response

{
  "@id": "https://data.designmuseumgent.be/v2/id/colors",
  "@type": "hydra:Collection",
  "rdfs:label": "Color index",
  "rdfs:comment": "Color distribution across the Design Museum Gent collection with weighted statistics",
  "base_colors": [
    {
      "value": "grey",
      "object_count": 3241,
      "collection_share_pct": 22.4,
      "avg_dominance_pct": 41.3,
      "filter": "https://data.designmuseumgent.be/v2/id/objects?color=grey",
      "dominant": "https://data.designmuseumgent.be/v2/id/colors/dominant?color=grey"
    },
    {
      "value": "black",
      "object_count": 2987,
      "collection_share_pct": 18.4,
      "avg_dominance_pct": 34.2,
      "filter": "https://data.designmuseumgent.be/v2/id/objects?color=black",
      "dominant": "https://data.designmuseumgent.be/v2/id/colors/dominant?color=black"
    }
  ],
  "css_colors": [
    {
      "value": "Davy's grey",
      "object_count": 892,
      "collection_share_pct": 4.12,
      "avg_dominance_pct": 18.6,
      "filter": "https://data.designmuseumgent.be/v2/id/objects?cssColor=Davy%27s%20grey",
      "dominant": "https://data.designmuseumgent.be/v2/id/colors/dominant?cssColor=Davy%27s%20grey"
    },
    {
      "value": "Old rose",
      "object_count": 312,
      "collection_share_pct": 0.94,
      "avg_dominance_pct": 22.1,
      "filter": "https://data.designmuseumgent.be/v2/id/objects?cssColor=Old%20rose",
      "dominant": "https://data.designmuseumgent.be/v2/id/colors/dominant?cssColor=Old%20rose"
    }
  ]
}

Dominant objects

endpoint:

GET https://data.designmuseumgent.be/v2/id/colors/dominant

Returns the objects where a specific color is most dominant — sorted by the percentage of the object covered by that color. Works for both base colors and CSS color names.

Each result includes direct links to validated IIIF image URIs together with their rights statement and attribution, so clients can render images without having to dereference the IIIF manifest first.

Parameters

ParameterTypeDefaultDescription
colorstring—Base color to rank by. Use values from base_colors in the color index.
cssColorstring—CSS color name to rank by. Use values from css_colors in the color index.
limitinteger20Number of results to return (max 100)

Warning

Provide either ?color= or ?cssColor= — not both. Returns 400 Bad Request if neither is provided.

Examples:

GET https://data.designmuseumgent.be/v2/id/colors/dominant?color=black
GET https://data.designmuseumgent.be/v2/id/colors/dominant?color=pink&limit=50
GET https://data.designmuseumgent.be/v2/id/colors/dominant?cssColor=Old rose
GET https://data.designmuseumgent.be/v2/id/colors/dominant?cssColor=English lavender&limit=10

Response fields

FieldDescription
@idURI of the object
@typeAlways crm:E22_Human-Made_Object
rdfs:labelDutch title of the object
dominance_pctPercentage of the object covered by this color
crm:P138i_has_representationArray of crm:E38_Image blocks — every validated image for the object, in canvas order. Omitted if the object has no validated images.
imageConvenience field: the first crm:E38_Image from the array above, repeated for clients that only need a single thumbnail. Not a CIDOC property — purely a developer shortcut. Omitted when the array is empty.
crm:P129i_is_subject_ofIIIF manifest link, typed as crm:E73_Information_Object. Omitted if not available.

Image fields

Each crm:E38_Image is modeled in CIDOC-CRM and contains:

FieldDescription
@idFull-resolution IIIF image URI
@typeAlways crm:E38_Image
thumbnail400px-wide IIIF derivative of the same image — convenient for grid views
crm:P3_has_noteAttribution string (photographer, rights holder, source)
crm:P104_is_subject_toRights statement, typed as crm:E30_Right. The @id is the canonical rights URI (e.g. a rightsstatements.org or Creative Commons URI).

Why both crm:P138i_has_representation and image?

crm:P138i_has_representation is the canonical CIDOC property carrying all images in canvas order. It is always an array, even when there is only one image — that consistency is what makes it usable as a stable contract.

image is a non-CIDOC convenience key carrying just the first image, repeated. It exists so client code can write obj.image.thumbnail instead of iterating an array when all they need is a single picture. Think of it the same way Linked Art uses _label alongside rdfs:label.

If you are a JSON-LD consumer doing proper triple processing, ignore image and only read crm:P138i_has_representation.

Image validation

Image URIs returned by this endpoint have been validated against the IIIF image server with a HEAD request — only URIs returning a 2xx/3xx response are included. Forbidden (403) and missing (404) images are pruned from the response. This means the image fields contain working links by construction; you don't need defensive 403 handling on the client.

If every image of an object failed validation, the object will still appear in results (the manifest reference is preserved) but crm:P138i_has_representation and image will be omitted.

Example response

{
    "@context": {
        "crm": "http://www.cidoc-crm.org/cidoc-crm/",
        "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
        "hydra": "http://www.w3.org/ns/hydra/core#"
    },
    "@id": "https://data.designmuseumgent.be/v2/id/colors/dominant?color=black&limit=20",
    "@type": "hydra:Collection",
    "rdfs:label": "Objects most dominant in black",
    "hydra:totalItems": 20,
    "hydra:member": [
        {
            "@id": "https://data.designmuseumgent.be/v2/id/object/1987-1105",
            "@type": "crm:E22_Human-Made_Object",
            "rdfs:label": "Beeldje van een vis in opaalglas",
            "dominance_pct": 94.3,
            "crm:P138i_has_representation": [
                {
                    "@id": "https://api.collectie.gent/iiif/image/iiif/2/faa08ed8c1f74e26c424cd738a0b5297-1987-1105.jpg/full/full/0/default.jpg",
                    "@type": "crm:E38_Image",
                    "thumbnail": "https://api.collectie.gent/iiif/image/iiif/2/faa08ed8c1f74e26c424cd738a0b5297-1987-1105.jpg/full/400,/0/default.jpg",
                    "crm:P3_has_note": "photographer: Foto Design Museum Gent, source: Design Museum Gent",
                    "crm:P104_is_subject_to": {
                        "@id": "http://creativecommons.org/publicdomain/zero/1.0/",
                        "@type": "crm:E30_Right"
                    }
                },
                {
                    "@id": "https://api.collectie.gent/iiif/image/iiif/2/55421ea9d625d9edf4e89064e2b00ba7-1987-1105.jpg/full/full/0/default.jpg",
                    "@type": "crm:E38_Image",
                    "thumbnail": "https://api.collectie.gent/iiif/image/iiif/2/55421ea9d625d9edf4e89064e2b00ba7-1987-1105.jpg/full/400,/0/default.jpg",
                    "crm:P3_has_note": "rightsholder: photographer Foto Design Museum Gent, source: Design Museum Gent",
                    "crm:P104_is_subject_to": {
                        "@id": "http://creativecommons.org/publicdomain/zero/1.0/",
                        "@type": "crm:E30_Right"
                    }
                }
            ],
            "image": {
                "@id": "https://api.collectie.gent/iiif/image/iiif/2/faa08ed8c1f74e26c424cd738a0b5297-1987-1105.jpg/full/full/0/default.jpg",
                "@type": "crm:E38_Image",
                "thumbnail": "https://api.collectie.gent/iiif/image/iiif/2/faa08ed8c1f74e26c424cd738a0b5297-1987-1105.jpg/full/400,/0/default.jpg",
                "crm:P3_has_note": "photographer: Foto Design Museum Gent, source: Design Museum Gent",
                "crm:P104_is_subject_to": {
                    "@id": "http://creativecommons.org/publicdomain/zero/1.0/",
                    "@type": "crm:E30_Right"
                }
            },
            "crm:P129i_is_subject_of": {
                "@id": "https://api.collectie.gent/iiif/presentation/v2/manifest/dmg:1987-1105",
                "@type": "crm:E73_Information_Object"
            }
        }
    ]
}

Building a color picker

Use the color index and dominant endpoint together to build a color picker UI:

// 1. fetch the color index to populate a color picker
const index = await fetch('https://data.designmuseumgent.be/v2/id/colors').then(r => r.json())

// 2. show collection share as a visual weight indicator
index.base_colors.forEach(c => {
    console.log(`${c.value}: ${c.collection_share_pct}% of collection`)
})

// 3. when a color is selected, fetch the most dominant objects (now with images!)
const selected = 'pink'
const url = index.base_colors.find(c => c.value === selected).dominant
const dominantObjects = await fetch(url).then(r => r.json())

// 4. render directly using the convenience `image` field — no manifest round-trip needed
dominantObjects['hydra:member'].forEach(obj => {
    if (!obj.image) return  // some objects may have no validated images
    renderCard({
        title: obj['rdfs:label'],
        thumbnail: obj.image.thumbnail,
        full: obj.image['@id'],
        rights: obj.image['crm:P104_is_subject_to']['@id'],
        credit: obj.image['crm:P3_has_note'],
    })
})

// 5. or use the full array for an object-detail page that shows all views
const detailObject = dominantObjects['hydra:member'][0]
const allImages = detailObject['crm:P138i_has_representation'] ?? []
allImages.forEach((img, i) => renderViewpoint(i, img.thumbnail))
Last Updated:: 5/20/26, 8:39 AM
Contributors: Olivier.VanD'huynslager
Prev
Concepts
Next
Types