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

Objects

Info

The objects collection endpoint provides paginated access to all objects in the Design Museum Gent collection. For full metadata on a single object, use the object endpoint.

endpoint:

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

Parameters

ParameterTypeDefaultDescription
pageinteger1Page number
itemsPerPageinteger10Number of objects per page (max 100)
fullRecordbooleanfalseReturn full CIDOC-CRM records instead of lightweight stubs
hasImagesbooleanfalseOnly return objects that have a IIIF manifest
hasPartsbooleanfalseOnly return koepelrecords — objects that have physical components
languagestring—Only return objects with a title in the specified language. Supported: NLD, FRA, ENG
hasColorsbooleanfalseOnly return objects processed by the color tagger. Separate from ?colors=true which includes color data in the response
isPartOfbooleanfalseOnly return components — objects that belong to a larger set
modifiedSincedate—Only return records modified on or after this date. Format: YYYY-MM-DD
typestring—Filter by object type label. Comma-separated for multiple (AND). Use values from /v2/id/types
materialstring—Filter by material label. Comma-separated for multiple (AND). Use /v2/id/materials to discover available values
colorsbooleanfalseInclude color data in full records. Requires fullRecord=true
colorstring—Filter by base color. Comma-separated for multiple (AND)
cssColorstring—Filter by CSS color name. Comma-separated for multiple (AND)
hasColorsbooleanfalseOnly return objects that have been processed by the color tagger. Use this to know what is indexed, separate from ?colors=true which includes the color data in the response.
onDisplayboolean—Only return objects that ar on display in the collection presentation
agentstring—Filter by agent PID or full URI. Returns all objects where the agent appears as designer or producer. Accepts DMG-A-00162 or the full URI
qstring—Full text search on titles, descriptions and object number

Full text search — ?q=

Supports natural language search syntax:

SyntaxDescriptionExample
Single wordRecords containing the word?q=glas
Multiple wordsRecords containing all words (AND)?q=roze glas
Exact phraseRecords containing the exact phrase?q="opaalglas"
ORRecords containing either word?q=glas OR keramiek
NegationExcludes records containing the word?q=glas -keramiek

Search covers Dutch, French and English titles and descriptions, and object numbers. Titles and object numbers are weighted higher than descriptions.

Filtering by hierarchy

Use ?hasParts=true to retrieve only koepelrecords — useful for building a hierarchical overview of grouped objects:

GET https://data.designmuseumgent.be/v2/id/objects?hasParts=true
GET https://data.designmuseumgent.be/v2/id/objects?hasParts=true&fullRecord=true

Use ?isPartOf=true to retrieve only components:

GET https://data.designmuseumgent.be/v2/id/objects?isPartOf=true

The two filters are mutually exclusive — an object cannot be both a koepelrecord and a component.

Search covers Dutch, French and English titles and descriptions, and object numbers. Titles and object numbers are weighted higher than descriptions. :::

Available base colors

red orange yellow green blue purple pink brown grey black white

How color indexing works

Colors are extracted from digital images using a computer vision pipeline — background removal, KMeans clustering, and LAB color distance matching. Only objects that have been processed by the color tagger appear in color filter results. See the object endpoint for the full color data model.

Incremental harvesting

Use modifiedSince with fullRecord=true to efficiently sync only changed records:

GET https://data.designmuseumgent.be/v2/id/objects?modifiedSince=2026-05-01&fullRecord=true&itemsPerPage=50

Active filters are preserved in all Hydra pagination links. An invalid date format returns 400 Bad Request.


Response format

Data is returned as a Hydra Collection with CIDOC-CRM members.

PrefixNamespace
crmhttp://www.cidoc-crm.org/cidoc-crm/
hydrahttp://www.w3.org/ns/hydra/core#
rdfshttp://www.w3.org/2000/01/rdf-schema#
owlhttps://www.w3.org/2002/07/owl#
CodeDescription
200Successful request returning a paginated collection
400Invalid modifiedSince date format
500Server error

Pagination — hydra:view

All collection responses include a hydra:view object for pagination. Active filters are preserved in all pagination links. Pagination is also exposed as a Link header following RFC 8288 for clients that prefer header-based navigation.

FieldDescription
hydra:totalItemsTotal number of matching objects
hydra:firstLink to the first page
hydra:lastLink to the last page
hydra:previousLink to the previous page (omitted on first page)
hydra:nextLink to the next page (omitted on last page)

Link header

Link: <...?page=1>; rel="first",
      <...?page=843>; rel="last",
      <...?page=2>; rel="next"
RelationDescription
firstFirst page
lastLast page
nextNext page — omitted on last page
prevPrevious page — omitted on first page

Harvesting the full collection

Two approaches — both work identically. Pick whichever fits your client best.

Option 1 — follow hydra:next in the response body:

const endpoint = 'https://data.designmuseumgent.be/v2/id/objects?fullRecord=true&itemsPerPage=50'

async function harvest(url) {
    const res = await fetch(url)
    const data = await res.json()

    // process data["hydra:member"]
    console.log(`fetched ${data["hydra:member"].length} objects`)

    if (data["hydra:view"]["hydra:next"]) {
        await harvest(data["hydra:view"]["hydra:next"])
    } else {
        console.log('harvest complete')
    }
}

harvest(endpoint)

Option 2 — follow Link header (no body parsing required for navigation):

async function harvest(url) {
    const res = await fetch(url)
    const data = await res.json()

    // process data["hydra:member"]
    console.log(`fetched ${data["hydra:member"].length} objects`)

    // get next page from Link header instead of JSON body
    const link = res.headers.get('Link')
    const next = link?.match(/<([^>]+)>;\s*rel="next"/)
    if (next) await harvest(next[1])
}

harvest('https://data.designmuseumgent.be/v2/id/objects?fullRecord=true&itemsPerPage=50')

Members — hydra:member

Lightweight stub (default)

FieldDescriptionExample
@idInternal DMG URI — resolvable to full recordhttps://data.designmuseumgent.be/v2/id/object/1987-1105
@typeCIDOC-CRM classcrm:E22_Human-Made_Object
rdfs:labelDutch title"Beeldje van een vis in opaalglas"
crm:P129i_is_subject_ofIIIF manifest link (if available)

Full record (?fullRecord=true)

Each member contains the complete CIDOC-CRM JSON-LD record — production and creation events, acquisition history, materials, dimensions, color data and IIIF manifest. The structure is identical to the single object endpoint.

Info

Objects merged into another record (RESOLVES_TO) and permanently removed objects are automatically excluded from the collection response. Use the single object endpoint to resolve these cases directly.

Performance

fullRecord=true returns significantly larger payloads. Keep itemsPerPage at 50 or lower to avoid timeouts.


Example response (lightweight)

{
    "@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#",
        "owl": "https://www.w3.org/2002/07/owl#"
    },
    "@id": "https://data.designmuseumgent.be/v2/id/objects",
    "@type": "hydra:Collection",
    "hydra:totalItems": 8423,
    "hydra:view": {
        "@id": "https://data.designmuseumgent.be/v2/id/objects?page=1&itemsPerPage=10",
        "@type": "hydra:PartialCollectionView",
        "hydra:first": "https://data.designmuseumgent.be/v2/id/objects?page=1&itemsPerPage=10",
        "hydra:last": "https://data.designmuseumgent.be/v2/id/objects?page=843&itemsPerPage=10",
        "hydra:next": "https://data.designmuseumgent.be/v2/id/objects?page=2&itemsPerPage=10"
    },
    "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",
            "crm:P129i_is_subject_of": {
                "@id": "https://api.collectie.gent/iiif/presentation/v2/manifest/dmg:1987-1105",
                "@type": "crm:E73_Information_Object"
            }
        },
        {
            "@id": "https://data.designmuseumgent.be/v2/id/object/2016-0017",
            "@type": "crm:E22_Human-Made_Object",
            "rdfs:label": "Artefacts of a New History",
            "crm:P129i_is_subject_of": {
                "@id": "https://api.collectie.gent/iiif/presentation/v2/manifest/dmg:2016-0017",
                "@type": "crm:E73_Information_Object"
            }
        }
    ]
}
Last Updated:: 6/1/26, 12:08 PM
Contributors: Olivier.VanD'huynslager
Prev
Object
Next
Exhibition