openapi: 3.0.3 info: title: Rijksmuseum Usersets API version: "1.0.0" description: | The Rijksmuseum Usersets API exposes user-generated content from Rijksstudio — the Rijksmuseum's collaborative platform where members curate personal sets of objects from the collection. Two operations are provided: * **List usersets** — return a paginated list of sets curated by Rijksstudio members (set name, slug, item count, owner, created/updated timestamps). * **Get userset details** — return the full contents of a single set, including the curator profile, the ordered list of items, and per-item crop metadata for cover images. Responses are localised through the `culture` path parameter (`nl` for Dutch, `en` for English). Every request must carry a `key` query parameter holding the caller's API key, issued for free when registering a Rijksstudio account. termsOfService: https://www.rijksmuseum.nl/en/data/policy contact: name: Rijksmuseum Research Services url: https://www.rijksmuseum.nl/en/research/conduct-research/contact-form license: name: See Rijksmuseum Data Policy url: https://www.rijksmuseum.nl/en/data/policy x-generated-from: documentation x-source-url: https://data.rijksmuseum.nl/user-generated-content/api/ x-last-validated: "2026-05-29" x-api-evangelist-pipeline: opensource servers: - url: https://www.rijksmuseum.nl/api description: Production tags: - name: User Generated Content description: Rijksstudio sets curated by Rijksmuseum's online community. security: - ApiKeyQuery: [] paths: /{culture}/usersets: get: operationId: listUserSets summary: List Rijksstudio User Sets description: | Returns a paginated list of Rijksstudio user sets. `page * pageSize` cannot exceed 10,000. tags: [User Generated Content] x-microcks-operation: delay: 0 dispatcher: FALLBACK parameters: - $ref: '#/components/parameters/Culture' - $ref: '#/components/parameters/ApiKey' - $ref: '#/components/parameters/Format' - name: page in: query description: Result page number (0-based). `page * pageSize` cannot exceed 10,000. required: false schema: type: integer minimum: 0 default: 0 example: 0 - name: pageSize in: query description: Number of results per page. required: false schema: type: integer minimum: 1 maximum: 100 default: 10 example: 10 responses: "200": description: A paginated page of user-set summaries. content: application/json: schema: $ref: '#/components/schemas/UserSetListResponse' examples: page2: $ref: '#/components/examples/ListUserSetsPage2' "401": $ref: '#/components/responses/Unauthorized' "429": $ref: '#/components/responses/RateLimited' /{culture}/usersets/{setId}: get: operationId: getUserSet summary: Get Rijksstudio User Set Details description: | Returns the full contents of a single Rijksstudio set, including the owner profile, set metadata, and the ordered list of set items (`setItems`) linking back to Collection API objects. tags: [User Generated Content] x-microcks-operation: delay: 0 dispatcher: FALLBACK parameters: - $ref: '#/components/parameters/Culture' - $ref: '#/components/parameters/ApiKey' - $ref: '#/components/parameters/Format' - name: setId in: path required: true description: | Composite set identifier of the form `{userId}-{slug}` (e.g. `1836065-meestermatches`). schema: type: string example: 1836065-meestermatches - name: page in: query description: Result page number (0-based) for the embedded `setItems` list. required: false schema: type: integer minimum: 0 default: 0 example: 0 - name: pageSize in: query description: Items per page for the embedded `setItems` list. required: false schema: type: integer minimum: 1 maximum: 100 default: 25 example: 25 responses: "200": description: The user set with its items. content: application/json: schema: $ref: '#/components/schemas/UserSetResponse' examples: meestermatches: $ref: '#/components/examples/GetMeesterMatches' "401": $ref: '#/components/responses/Unauthorized' "404": $ref: '#/components/responses/NotFound' "429": $ref: '#/components/responses/RateLimited' components: securitySchemes: ApiKeyQuery: type: apiKey in: query name: key description: Free API key issued on creating a Rijksstudio account. parameters: Culture: name: culture in: path required: true description: Locale for the response content (`nl` Dutch, `en` English). schema: type: string enum: [nl, en] example: en ApiKey: name: key in: query required: true description: The caller's Rijksstudio API key. schema: type: string pattern: '^[A-Za-z0-9]+$' example: 0fiuZxBwf Format: name: format in: query required: false description: Response format. JSON is the default. schema: type: string enum: [json, jsonp, xml] default: json example: json responses: Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested set could not be found. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: Daily quota or short-window rate limit exceeded. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: UserSetListResponse: type: object description: A paginated page of Rijksstudio user-set summaries. properties: count: type: integer description: Total number of user sets across all pages. example: 97957 elapsedMilliseconds: type: integer example: 631 userSets: type: array items: $ref: '#/components/schemas/UserSetSummary' UserSetResponse: type: object description: Single Rijksstudio user set with its items. properties: elapsedMilliseconds: type: integer example: 505 userSet: $ref: '#/components/schemas/UserSet' UserSetSummary: type: object description: Lightweight summary of a Rijksstudio user set. properties: links: $ref: '#/components/schemas/UserSetLinks' id: type: string example: 123-setname-3 count: type: integer example: 25 type: type: string example: Default name: type: string example: setname (3) slug: type: string example: setname-3 description: type: string nullable: true user: $ref: '#/components/schemas/RijksstudioUser' createdOn: type: string format: date-time example: "2012-11-02T12:28:21.9070376Z" updatedOn: type: string format: date-time example: "2013-04-10T10:50:21.7559145Z" UserSet: allOf: - $ref: '#/components/schemas/UserSetSummary' - type: object properties: setItems: type: array items: $ref: '#/components/schemas/UserSetItem' UserSetLinks: type: object properties: self: type: string format: uri example: https://www.rijksmuseum.nl/api/usersets/123-setname-3 overview: type: string format: uri example: https://www.rijksmuseum.nl/api/usersets web: type: string format: uri example: https://www.rijksmuseum.nl/nl/mijn/verzamelingen/321--john/setname-3 UserSetItem: type: object description: One item in a Rijksstudio user set, linking back to a collection object. properties: links: $ref: '#/components/schemas/UserSetItemLinks' id: type: string example: 8c6e3ec4-08d9-4547-b72a-36907c0a3823 objectNumber: type: string example: SK-A-3148 relation: type: string example: None relationDescription: type: string example: Held cropped: type: boolean example: false cropX: type: integer example: 0 cropY: type: integer example: 0 cropWidth: type: integer example: 0 cropHeight: type: integer example: 0 origWidth: type: integer example: 0 origHeight: type: integer example: 0 image: $ref: '#/components/schemas/UserSetItemImage' UserSetItemLinks: type: object properties: artobject: type: string format: uri example: https://www.rijksmuseum.nl/api/nl/collection/SK-A-3148 web: type: string format: uri example: https://www.rijksmuseum.nl/nl/collection/SK-A-3148 UserSetItemImage: type: object properties: guid: type: string example: 6d40dc7d-e58c-4e13-812d-60cff190a3d5 parentObjectNumber: type: string example: SK-A-3148 cdnUrl: type: string format: uri cropX: type: integer cropY: type: integer width: type: integer example: 1824 height: type: integer example: 2500 offsetPercentageX: type: integer example: 50 offsetPercentageY: type: integer example: 36 RijksstudioUser: type: object properties: id: type: integer example: 321 name: type: string example: John lang: type: string example: nl avatarUrl: type: string format: uri nullable: true headerUrl: type: string format: uri nullable: true initials: type: string example: J Error: type: object properties: statusCode: type: integer example: 401 message: type: string example: Invalid API key. examples: ListUserSetsPage2: summary: Second page of Rijksstudio user sets value: count: 97957 elapsedMilliseconds: 631 userSets: - links: self: https://www.rijksmuseum.nl/api/usersets/123-setname-3 web: https://www.rijksmuseum.nl/nl/mijn/verzamelingen/321--john/setname-3 id: 123-setname-3 count: 25 type: Default name: "setname (3)" slug: setname-3 description: null user: id: 321 name: John lang: nl avatarUrl: null headerUrl: null initials: B createdOn: "2012-11-02T12:28:21.9070376Z" updatedOn: "2013-04-10T10:50:21.7559145Z" GetMeesterMatches: summary: Get the "meestermatches" user set value: elapsedMilliseconds: 505 userSet: links: overview: https://www.rijksmuseum.nl/api/usersets web: https://www.rijksmuseum.nl/nl/mijn/verzamelingen/321--john/setname-3 id: 123-setname-3 count: 25 type: Default name: "setname (3)" slug: setname-3 description: null user: id: 321 name: John lang: nl avatarUrl: null headerUrl: null initials: B setItems: - links: artobject: https://www.rijksmuseum.nl/api/nl/collection/SK-A-3148 web: https://www.rijksmuseum.nl/nl/collection/SK-A-3148 id: 8c6e3ec4-08d9-4547-b72a-36907c0a3823 objectNumber: SK-A-3148 relation: None relationDescription: Held cropped: false cropX: 0 cropY: 0 cropWidth: 0 cropHeight: 0 origWidth: 0 origHeight: 0 image: guid: 6d40dc7d-e58c-4e13-812d-60cff190a3d5 parentObjectNumber: SK-A-3148 cdnUrl: http://lh4.ggpht.com/X6E9IJ33ioVI1W7x0XgDedCmAu5NizMlLuX2f6gSgmpFqMxCCU1qOSCOqc2ORrLw-nHLtaph1zStxZFKKWqlnRU1IUw=s0 cropX: 0 cropY: 0 width: 1824 height: 2500 offsetPercentageX: 50 offsetPercentageY: 36 createdOn: "2012-11-02T12:28:21.9070376Z" updatedOn: "2013-04-10T10:50:21.7559145Z"