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
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
itemsPerPage | integer | 10 | Number of objects per page (max 100) |
fullRecord | boolean | false | Return full CIDOC-CRM records instead of lightweight stubs |
hasImages | boolean | false | Only return objects that have a IIIF manifest |
hasParts | boolean | false | Only return koepelrecords — objects that have physical components |
language | string | — | Only return objects with a title in the specified language. Supported: NLD, FRA, ENG |
hasColors | boolean | false | Only return objects processed by the color tagger. Separate from ?colors=true which includes color data in the response |
isPartOf | boolean | false | Only return components — objects that belong to a larger set |
modifiedSince | date | — | Only return records modified on or after this date. Format: YYYY-MM-DD |
type | string | — | Filter by object type label. Comma-separated for multiple (AND). Use values from /v2/id/types |
material | string | — | Filter by material label. Comma-separated for multiple (AND). Use /v2/id/materials to discover available values |
colors | boolean | false | Include color data in full records. Requires fullRecord=true |
color | string | — | Filter by base color. Comma-separated for multiple (AND) |
cssColor | string | — | Filter by CSS color name. Comma-separated for multiple (AND) |
hasColors | boolean | false | Only 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. |
onDisplay | boolean | — | Only return objects that ar on display in the collection presentation |
agent | string | — | 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 |
q | string | — | Full text search on titles, descriptions and object number |
Full text search — ?q=
Supports natural language search syntax:
| Syntax | Description | Example |
|---|---|---|
| Single word | Records containing the word | ?q=glas |
| Multiple words | Records containing all words (AND) | ?q=roze glas |
| Exact phrase | Records containing the exact phrase | ?q="opaalglas" |
| OR | Records containing either word | ?q=glas OR keramiek |
| Negation | Excludes 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.
| Prefix | Namespace |
|---|---|
crm | http://www.cidoc-crm.org/cidoc-crm/ |
hydra | http://www.w3.org/ns/hydra/core# |
rdfs | http://www.w3.org/2000/01/rdf-schema# |
owl | https://www.w3.org/2002/07/owl# |
| Code | Description |
|---|---|
| 200 | Successful request returning a paginated collection |
| 400 | Invalid modifiedSince date format |
| 500 | Server 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.
| Field | Description |
|---|---|
hydra:totalItems | Total number of matching objects |
hydra:first | Link to the first page |
hydra:last | Link to the last page |
hydra:previous | Link to the previous page (omitted on first page) |
hydra:next | Link to the next page (omitted on last page) |
Link header
Link: <...?page=1>; rel="first",
<...?page=843>; rel="last",
<...?page=2>; rel="next"
| Relation | Description |
|---|---|
first | First page |
last | Last page |
next | Next page — omitted on last page |
prev | Previous 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)
| Field | Description | Example |
|---|---|---|
@id | Internal DMG URI — resolvable to full record | https://data.designmuseumgent.be/v2/id/object/1987-1105 |
@type | CIDOC-CRM class | crm:E22_Human-Made_Object |
rdfs:label | Dutch title | "Beeldje van een vis in opaalglas" |
crm:P129i_is_subject_of | IIIF 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"
}
}
]
}