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 |
modifiedSince | date | — | Only return records modified on or after this date. Format: YYYY-MM-DD |
q | string | — | Full text search on titles, descriptions and object number |
hasImages | boolean | false | Only return objects that have a IIIF manifest |
hasParts | boolean | false | Only return koepelrecords — objects that are composed of a set of member objects |
isPartOf | boolean | false | Only return set members — objects that belong to a koepelrecord |
onDisplay | boolean | false | Only return objects currently on display in the collection presentation |
language | string | — | Only return objects with a title in the specified language. Supported: NLD, FRA, ENG |
type | string | — | Filter by object type label. Comma-separated for multiple (AND). Use /v2/id/types to discover available values |
material | string | — | Filter by material label. Comma-separated for multiple (AND). Use /v2/id/materials to discover available values |
color | string | — | Filter by base color. Comma-separated for multiple (AND). Use /v2/id/colors to discover available values |
cssColor | string | — | Filter by CSS color name. Comma-separated for multiple (AND) |
colors | boolean | false | Include color data in full records. Requires fullRecord=true |
hasColors | boolean | false | Only return objects processed by the color tagger |
agent | string | — | Filter by agent PID or full URI. Returns objects where the agent is designer or producer |
date | string | — | Filter by production date range using EDTF interval notation. Format: YYYY/YYYY |
dateFrom | integer | — | Only return objects produced from this year onwards |
dateTo | integer | — | Only return objects produced up to and including this year |
concept | string | — | Filter by concept PID or URI — exact match, expands to include narrower concepts |
conceptSearch | string | — | Filter by concept label — searches the thesaurus and expands to narrower concepts |
koepels | string | — | Set to exclude to hide koepelrecords from results. Useful for image-based browsing where koepelrecords typically have no image |
sortBy | string | objectNumber | Field to sort by. Supported: objectNumber, modified, titleNL, titleFR, titleEN, dateBegin, dateEnd |
sortOrder | string | asc | Sort direction. asc or desc |
Filter reference
Full text search — ?q=
Supports natural language search syntax across Dutch, French and English titles, descriptions and object numbers. Titles and object numbers are weighted higher than descriptions.
GET https://data.designmuseumgent.be/v2/id/objects?q=roze+glas&hasImages=true
GET https://data.designmuseumgent.be/v2/id/objects?q="opaalglas"&fullRecord=true
GET https://data.designmuseumgent.be/v2/id/objects?q=glas+OR+keramiek
By agent — ?agent=
Returns all objects where the specified agent appears as designer (crm:P94i_was_created_by) or producer (crm:P108i_was_produced_by). Accepts PID or full URI:
GET https://data.designmuseumgent.be/v2/id/objects?agent=DMG-A-00162
GET https://data.designmuseumgent.be/v2/id/objects?agent=DMG-A-00162&hasImages=true&fullRecord=true
By production date — ?date=, ?dateFrom=, ?dateTo=
Filters by production or creation date using overlap logic — an object is returned when its production period overlaps the requested range. EDTF uncertainty markers are stripped before storing.
GET https://data.designmuseumgent.be/v2/id/objects?date=1950/1969
GET https://data.designmuseumgent.be/v2/id/objects?dateFrom=1950&dateTo=1969
GET https://data.designmuseumgent.be/v2/id/objects?dateFrom=1900
GET https://data.designmuseumgent.be/v2/id/objects?date=1920/1940&agent=DMG-A-00162
Info
Objects with no recorded production or creation date are excluded from date-filtered results.
By color — ?color=, ?cssColor=
Colors are extracted from digital images using background removal, KMeans clustering and LAB color distance matching.
Available base colors: red orange yellow green blue purple pink brown grey black white
GET https://data.designmuseumgent.be/v2/id/objects?color=pink
GET https://data.designmuseumgent.be/v2/id/objects?color=pink,grey
GET https://data.designmuseumgent.be/v2/id/objects?cssColor=Old+rose
GET https://data.designmuseumgent.be/v2/id/objects?hasColors=true&colors=true&fullRecord=true
Use /v2/id/colors to discover available CSS color names and collection statistics.
By type and material
GET https://data.designmuseumgent.be/v2/id/objects?type=vaas
GET https://data.designmuseumgent.be/v2/id/objects?type=vaas,bord
GET https://data.designmuseumgent.be/v2/id/objects?material=glas+%28materiaal%29
GET https://data.designmuseumgent.be/v2/id/objects?type=vaas&material=glas+%28materiaal%29&onDisplay=true
By concept — ?concept=, ?conceptSearch=
Both parameters automatically expand to include narrower concepts from the thesaurus hierarchy via recursive CTE.
# exact match by PID
GET https://data.designmuseumgent.be/v2/id/objects?concept=530000049
# search by label — expands to narrower concepts
GET https://data.designmuseumgent.be/v2/id/objects?conceptSearch=stoel
GET https://data.designmuseumgent.be/v2/id/objects?conceptSearch=glas&hasImages=true
Concepts are matched across object types, materials, techniques and sub-collections.
Object hierarchy — ?hasParts=, ?isPartOf=
?hasParts=true returns koepelrecords — objects that are administratively composed of a set of member objects (e.g. a cutlery service, a series). On these records the response includes crm:P106_is_composed_of listing all members.
?isPartOf=true returns the individual set members. On these records the response includes crm:P46i_forms_part_of pointing to the parent koepelrecord.
Note that crm:P46_has_component on any object expresses something different — the named physical parts (fysiekeOnderdelen) that physically constitute the object, such as individual ceramic forms or a wooden box. These are always present when recorded, regardless of koepelrecord status.
GET https://data.designmuseumgent.be/v2/id/objects?hasParts=true
GET https://data.designmuseumgent.be/v2/id/objects?isPartOf=true
Excluding koepelrecords — ?koepels=exclude
By default the collection includes koepelrecords alongside individual objects. Pass koepels=exclude to hide them — useful for image-based browsing interfaces where koepelrecords typically carry no IIIF image of their own.
GET https://data.designmuseumgent.be/v2/id/objects?koepels=exclude
GET https://data.designmuseumgent.be/v2/id/objects?koepels=exclude&hasImages=true&fullRecord=true
Tips
To browse only koepelrecords, use ?hasParts=true instead. To browse only the individual members of sets, use ?isPartOf=true.
Sorting — ?sortBy=, ?sortOrder=
By default results are sorted by objectNumber ascending. Use sortBy and sortOrder to change this.
sortBy value | Sorts on | Notes |
|---|---|---|
objectNumber | Object number | Default |
modified | Last modification date | Use with sortOrder=desc to get recently updated objects first |
titleNL | Dutch title | Objects without a Dutch title appear last |
titleFR | French title | Objects without a French title appear last |
titleEN | English title | Objects without an English title appear last |
dateBegin | Start of production date range | Objects with no recorded date appear last |
dateEnd | End of production date range | Objects with no recorded date appear last |
# most recently modified first
GET https://data.designmuseumgent.be/v2/id/objects?sortBy=modified&sortOrder=desc
# alphabetical by Dutch title
GET https://data.designmuseumgent.be/v2/id/objects?sortBy=titleNL&hasImages=true
# oldest objects first
GET https://data.designmuseumgent.be/v2/id/objects?sortBy=dateBegin&sortOrder=asc
# most recently modified, full records
GET https://data.designmuseumgent.be/v2/id/objects?sortBy=modified&sortOrder=desc&fullRecord=true&itemsPerPage=25
Info
Sorting is not applied on ?agent= queries — those results are returned in object number order from the RPC.
Language — ?language=
Returns only objects with a title in the specified language. Useful for identifying translation gaps:
GET https://data.designmuseumgent.be/v2/id/objects?language=FRA
GET https://data.designmuseumgent.be/v2/id/objects?language=ENG&itemsPerPage=1
Incremental harvesting — ?modifiedSince=
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.
| Code | Description |
|---|---|
| 200 | Successful request |
| 400 | Invalid modifiedSince date format |
| 500 | Server error |
Pagination — hydra:view
All active filters are preserved in pagination links. An RFC 8288 Link header is also included on every response.
Harvesting the full collection
async function harvest(url) {
const res = await fetch(url)
const data = await res.json()
// process data["hydra:member"]
if (data["hydra:view"]["hydra:next"]) {
await new Promise(r => setTimeout(r, 250)) // polite delay
await harvest(data["hydra:view"]["hydra:next"])
}
}
harvest('https://data.designmuseumgent.be/v2/id/objects?fullRecord=true&itemsPerPage=50')
Members — hydra:member
Lightweight stub (default)
| Field | Description |
|---|---|
@id | Internal DMG URI — resolvable to full record |
@type | Always crm:E22_Human-Made_Object |
rdfs:label | Dutch title |
crm:P129i_is_subject_of | IIIF manifest link if available |
Full record (?fullRecord=true)
Each member contains the complete CIDOC-CRM JSON-LD record — identical in structure to the single object endpoint. Includes production and creation events, acquisition, materials, dimensions, physical parts with their own dimensions, set composition, sub-collection membership, exhibitions, color data and IIIF images.
Info
Merged and permanently removed objects are automatically excluded from collection responses.
Performance
Full records return 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"
}
}
]
}