Catalogue Prototype
Details en transactierollen voor deze API.
API
- Naam
- Catalogue
- Versie
- v2.0.0
- Sector(en) P
- PO VO MBO
- Status P
- Actief
Transactierollen P
Bron
Afnemer
Endpoints
Beschikbare endpoints voor deze API.
API-specificatie (YAML)
Volledige definitie uit het afsprakenstelsel.
openapi: 3.0.0
info:
title: Catalogue API
version: '2.0.0'
description: |-
The Catalogue API is implemented by the publisher or reseller of learning materials.
The Catalogue API is the source of Product information and provides GET endpoints to receive the latest state.
Two entities are available to Consumers of the Catalogue API:
- **Product**: the full set of attributes including metadata, media, licensing, pricing, and payment information, especially useful for the `Overkoepelende leermiddelencatalogus`, `Selectieomgeving leermiddelen`, and `Bestelomgeving leermiddelen`.
- **ProductInfo**: a smaller subset of attributes focused on displaying the product within a portal, especially useful for the `Leermiddelenportaal` and `Onderwijsleeromgeving`
In a future version the Notifications API can be used to notify Consumers of the Catalogue API whenever a Product changes (new, update or delete).
contact:
name: Edu-V
url: www.edu-v.org/afsprakenstelsel
email: info@edu-v.org
components:
schemas:
schemaVersion:
type: string
description: |
Schema version of this API using semantic versioning 2.0.0.
The API version number is communicated in the header.
The major version is communicated in the URI.
For more information see the [Edu-V versioning guidelines](https://edu-v.atlassian.net/wiki/spaces/AFSPRAKENS/pages/9437200/Versiebeheer).
default: 2.0.0
Product:
title: Product
type: object
x-tags:
- Product
description: 'A product that is available for selection within a `Bestelomgeving leermiddelen`, `Selectieomgeving leermiddelen`, and `Overkoepelende leermiddelencatalogus`.
This entity captures all information needed for presentation, selection and optionally sale.'
properties:
productId:
$ref: '#/components/schemas/ProductID'
description: 'The unique identifier for this product. For all products that are forSale an EAN or ISBN number is provided.
For all other Products a uuid is generated by the provider of the product.'
publisher:
type: string
description: 'Name of the organisation supplying and providing the product: the `Leermiddelenaanbieder`.'
reseller:
type: string
description: |
Name of the organisation reselling the product: the `Leermiddelenverkoper`.
This field is only mandatory when this Catalogue API is provided by the reseller.
type:
type: string
description: 'Type of product. In case the product consists of both physical and digital products, the value combi is chosen.'
enum:
- 'physical'
- 'digital'
- 'combi'
status:
type: string
description: 'Lifecycle status of the product.'
enum:
- 'not-yet-available'
- 'limited-available'
- 'available'
- 'temporary-not-available'
- 'no-longer-available'
- 'will-never-be-available'
- 'not-available-or-usable'
forSale:
type: boolean
description: |
True if the product is forSale.
False if the product is not for sale (e.g. for Demo products or Digital products that are only sold as a Combi or Set)
saleUnitSize:
type: integer
description: |
The number of units within this product.
For example this value is 5 for a set of five physical books.
minimum: 1
isConsumptionProduct:
type: boolean
description: |
True if the product is `verbruiksmateriaal`.
name:
type: string
description: 'Name of the Product'
productFamilyName:
type: string
description: 'Name of the Product Family this Product belongs to.'
edition:
type: string
description: 'The issue (In Dutch: nummer) and version (In Dutch: Druk) of the product.'
example: 'Nr + Druk'
productUsages:
type: array
description: |
The intended product usage.
Values are in Dutch for backwards compatibility. This field is on the Edu-V backlog and will be revised and completed in a future version.
items:
type: string
enum:
- leerboek
- werkboek
- leerwerkboek
- examenbundel
- oefenmateriaal
- naslagwerk
- docentenmateriaal
- toets
- examen
- anders
intendedEndUserRole:
type: string
description: |
The intended end users of the product, being one of:
- student
- educator (e.g. teachers, coaches or assistants)
- administrator
enum:
- student
- educator
- administrator
courseReferences:
type: array
description: 'Reference to this products course detailed description'
items:
$ref: '#/components/schemas/CourseReference'
studies:
type: array
description: 'The studies and study years that this product is targeted at.'
items:
$ref: '#/components/schemas/Study'
subjects:
type: array
description: 'The subjects that this product is targeted at.'
items:
$ref: '#/components/schemas/Subject'
price:
type: array
description: |
Public List price of the Product. It is possible to include historic and future prices for a product (e.g. for Indexation).
When applicable, include the historic price (t-1), the current price (t) and the future price (t+1).
items:
type: object
properties:
priceExcl:
type: number
description: 'Price excluding VAT and rounded to 2 decimals'
priceIncl:
type: number
description: 'Price including VAT and rounded to 2 decimals'
priceCurrency:
type: string
description: 'The applicable currency according to ISO4217 currency codes, see: https://en.wikipedia.org/wiki/ISO_4217.'
default: "EUR"
pattern: "[A-Z]{3}$"
validFrom:
type: string
format: date
description: 'The date (incl.) from which this price is valid, format: YYYY-MM-DD (according to RFC3339)'
priceType:
type: string
enum:
- standard
- tier
- schoolSize
default: standard
description: 'The type of pricing for this product.'
schoolSizePricing:
type: array
description: 'Array of schoolSizePrice objects. Only applicable when priceType is `schoolSize`.'
items:
$ref: '#/components/schemas/SchoolSizePrice'
tierPricing:
type: array
description: 'Array of tierPrice objects. Only applicable when priceType is `tier`.'
items:
$ref: '#/components/schemas/TierPrice'
required:
- priceExcl
- priceIncl
- priceCurrency
- validFrom
paymentModels:
type: array
description: 'The payment models applicable to this Product.'
items:
type: string
enum:
- 'pre-paid'
- 'post-paid'
- 'periodically-paid'
licensePeriod:
type: object
description: 'Duration of the license period. Mandatory field for digital products'
properties:
licenseVariant:
type: string
description: |
The variant of the the license period.
- days: the expirationDate is set a specified number of days after the firstUsed (initial activation) date.
- month: the expirationDate is set a month after the firstUsed (initial activation) date.
- year: the expirationDate is set a year after the firstUsed (initial activation) date.
- schoolyear: the expirationDate is set at 31st of July after the firstUsed (initial activation) date.
enum:
- 'days'
- 'month'
- 'year'
- 'schoolyear'
licenseDays:
description: 'Number of days. Mandatory field for licenseVariant `days`.'
type: integer
required:
- licenseVariant
activationPeriod:
type: object
description: 'Prescribes the way the activationUntilDate can be calculated.'
properties:
activationVariant:
type: string
description: |
The variant that should be applied to calculate the ActivationUntilDate.
- days: number of days after the startDate of the activation period. Value activationDays is a mandatory field.
- date: fixed activationDate for every entitlement. Value activationUntilDate is a mandatory field.
- schoolyear: the activationUntilDate is set at 31st of July after the startDate.
enum:
- 'days'
- 'date'
- 'schoolyear'
activationDays:
description: 'Number of days. Mandatory field for activationDays `days`.'
type: integer
activationUntilDate:
type: string
format: date
description: 'A fixed activationUntilDate for all entitlements, format: YYYY-MM-DD (according to RFC3339)'
required:
- activationVariant
deliveryTypes:
type: array
description: 'The delivery variant available for this product.'
items:
type: string
enum:
- school-all
- school-studies
- school-subjects
- school-groups
- school-students
- school-employees
- school-activationcodes
- customer-student
- customer-activationcode
trialAccessUrl:
type: string
description: 'Optional trial / preview URL.'
defaultAccessUrl:
type: string
description: |
The default Access Url used to access the product after selection or purchase.
Mandatory field for combi and digital products.
For sets of digital products and combi products a single Access URl is listed from which all underlying digital products can be activated.
specificAccessUrls:
type: array
description: |
list of fields where specific access links can be specified.
items:
type: object
properties:
accessUrl:
type: string
description: 'The URL of the access link.'
accessUrlType:
type: string
description: 'The type URL of the access link in accessUrl.'
enum:
- OIDC
- BP
- ENTREE
required:
- accessUrl
- accessUrlType
shortDescription:
type: string
description: 'Short description for display on search pages or other marketing blocks.'
minLength: 1
maxLength: 80
longDescription:
type: string
description: 'Long description for display on a product page.'
copyrightType:
type: string
description: |
Indicator if copyright is applicable to the Product.
The Creative Commons licenses are specified according to the [CreativeCommons version 4.0 specification](https://purl.edustandaard.nl/copyrightsandotherrestrictions_nllom_20131202).'
In case, another type of copyright is applicable to the product, the value `yes` is used.
If no copyright is applicable to the product, the value `no` is used.
enum:
- cc-by-40
- cc-by-sa-40
- cc-by-nc-40
- cc-by-nc-sa-40
- cc-by-nd-40
- cc-by-nc-nd-40
- cc-by-30
- cc-by-sa-30
- cc-by-nc-30
- cc-by-nc-sa-30
- cc-by-nd-30
- cc-by-nc-nd-30
- yes
- no
authors:
type: object
properties:
individuals:
type: array
items:
type: object
properties:
givenName:
type: string
familyName:
type: string
familyNamePrefix:
type: string
required:
- givenName
- familyName
organisations:
type: array
items:
type: string
description: 'The name of the organisation.'
media:
type: object
description: 'A collection of media for use in product pages.'
properties:
publisherThumbnailUrl:
description: 'The logo of the publisher to show in a thumbnail.'
$ref: '#/components/schemas/Media'
mainThumbnailUrl:
description: 'The main media item to show in a thumbnail.'
$ref: '#/components/schemas/Media'
resellerThumbnailUrl:
description: |
The logo of the reseller to show in a thumbnail.
This field is only mandatory when this Catalogue API is provided by the reseller.
$ref: '#/components/schemas/Media'
productImageUrls:
type: array
description: 'A collection of image urls for a product.'
items:
$ref: '#/components/schemas/Media'
productVideoUrls:
type: array
description: 'A collection of video urls for a product.'
items:
$ref: '#/components/schemas/Media'
productDocUrls:
type: array
description: 'A collection of document urls for a product.'
items:
$ref: '#/components/schemas/Media'
required:
- publisherThumbnailUrl
followUpProduct:
description: 'productId of the product that succeeds this product.'
$ref: '#/components/schemas/ProductID'
relatedProducts:
type: array
description: 'An array of related product IDs (for display alongside the product within a product page).'
items:
$ref: '#/components/schemas/ProductID'
description: 'productIds of the related products.'
bundledProducts:
type: array
description: |
In case this product is a combi product or set, all underlying products can be included and referred in this attribute.
This field is mandatory for sets of digital products.
This field is optional (but recommended) for combi products and sets of physical products.
items:
$ref: '#/components/schemas/ProductID'
description: 'productIds of the products in the set or in the combi product.'
firstPublishedDate:
type: string
format: date
description: 'Date the product will be or is published on the market, format: YYYY-MM-DD (according to RFC3339)'
deprecationDate:
type: string
description: 'Date when a follow-up product is available on the market, format: YYYY-MM-DD (according to RFC3339)'
format: date
supportedUntilDate:
type: string
description: 'Date after which the product can no longer be ordered or sold, format: YYYY-MM-DD (according to RFC3339). Mandatory field for the status: `no-longer-available` and `not-available-or-usable`.'
format: date
endOfLifeDate:
type: string
description: 'Date after which the product is no longer available, format: YYYY-MM-DD (according to RFC3339). Mandatory field for the status: `no-longer-available` and `not-available-or-usable`.'
format: date
dateCreated:
type: string
description: 'Indicates the date and time the object was first created. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
format: date-time
example: "2017-07-21T17:32:28Z"
dateLastModified:
type: string
description: 'Indicates the date and time the object was last modified. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
format: date-time
example: "2022-08-11T15:31:12Z"
required:
- productId
- publisher
- type
- status
- forSale
- saleUnitSize
- name
- studies
- edition
- subjects
- shortDescription
- copyrightType
- media
- firstPublishedDate
- dateCreated
- dateLastModified
ProductInfo:
title: ProductInfo
type: object
x-tags:
- Product
description: 'Product info for the `Leermiddelenportaal` and `Onderwijsleeromgeving`. This entity includes name, product lifecycle status and dates, media information, studies and subject metadata and the AccessUrl.'
properties:
productId:
$ref: '#/components/schemas/ProductID'
description: 'The unique identifier for this product. For all products that are forSale an EAN or ISBN number is provided.
For all other Products a uuid is generated by the provider of the product.'
publisher:
type: string
description: 'Name of the organisation supplying and providing the product: the `Leermiddelenaanbieder`.'
type:
type: string
description: 'Type of product. In case the product consists of both physical and digital products, the value combi is chosen.'
enum:
- 'physical'
- 'digital'
- 'combi'
status:
type: string
description: 'Lifecycle status of the product.'
enum:
- 'not-yet-available'
- 'limited-available'
- 'available'
- 'temporary-not-available'
- 'no-longer-available'
- 'will-never-be-available'
- 'not-available-or-usable'
name:
type: string
description: 'Name of the Product'
productFamilyName:
type: string
description: 'Name of the Product Family this Product belongs to. Required if the product is part of a method family.'
courseReferences:
type: array
description: 'Reference to this products course detailed description'
items:
$ref: '#/components/schemas/CourseReference'
studies:
type: array
description: 'The studies and study years that this product is targeted at.'
items:
$ref: '#/components/schemas/Study'
subjects:
type: array
description: 'The subjects that this product is targeted at.'
items:
$ref: '#/components/schemas/Subject'
infoLink:
type: string
description: 'URL to the information about the product.'
trialAccessUrl:
type: string
description: 'Optional trial / preview URL.'
defaultAccessUrl:
type: string
description: |
The default Access Url used to access the product after selection or purchase.
Mandatory field for combi and digital products.
For sets of digital products and combi products a single Access URl is listed from which all underlying digital products can be activated.
shortDescription:
type: string
description: 'Short description for display on search pages or other marketing blocks.'
longDescription:
type: string
description: 'Long description for display on a product page.'
media:
type: object
description: 'A collection of media for use in product pages.'
properties:
publisherThumbnailUrl:
description: 'The logo of the publisher to show in a thumbnail.'
$ref: '#/components/schemas/Media'
mainThumbnailUrl:
description: 'The main media item to show in a thumbnail.'
$ref: '#/components/schemas/Media'
required:
- publisherThumbnailUrl
- mainThumbnailUrl
bundledProducts:
type: array
description: |
In case this product is a combi product or set, all underlying products can be included and referred in this attribute.
This field is mandatory for sets of digital products.
This field is optional (but recommended) for combi products and sets of physical products.
items:
$ref: '#/components/schemas/ProductID'
description: 'productIds of the products in the set or in the combi product.'
firstPublishedDate:
type: string
format: date
description: 'Date the product will be or is published on the market, format: YYYY-MM-DD (according to RFC3339)'
deprecationDate:
type: string
description: 'Date when a follow-up product is available on the market, format: YYYY-MM-DD (according to RFC3339)'
format: date
supportedUntilDate:
type: string
description: 'Date after which the product can no longer be ordered or sold, format: YYYY-MM-DD (according to RFC3339). Mandatory field for the status: `no-longer-available` and `not-available-or-usable`.'
format: date
endOfLifeDate:
type: string
description: 'Date after which the product is no longer available, format: YYYY-MM-DD (according to RFC3339). Mandatory field for the status: `no-longer-available` and `not-available-or-usable`.'
format: date
dateCreated:
type: string
description: 'Indicates the date and time the object was first created. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
format: date-time
example: "2017-07-21T17:32:28Z"
dateLastModified:
type: string
description: 'Indicates the date and time the object was last modified. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
format: date-time
example: "2022-08-11T15:31:12Z"
required:
- productId
- publisher
- type
- status
- name
- studies
- subjects
- defaultAccessUrl
- shortDescription
- media
- firstPublishedDate
- dateCreated
- dateLastModified
CourseReference:
title: CourseReference
type: object
x-tags:
- Product
properties:
courseId:
type: string
title:
type: string
description:
type: string
description: |-
A reference to the content of the products.
The details of the content can be retrieved via the Course API.
A product gives access to one or more courses. A course can be referenced by one or more Products.
Study:
title: Study
type: object
description: 'A study where this product is targeted at.'
properties:
studyName:
type: string
description: |
Official name of the study.
- primary education: the `po-opleidingseenheden in RIO korte naam` name as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
- secondary education: the `vo-opleidingseenheden in RIO korte naam` name as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
- vocational education: the `kwalificatienaam` as specified in [Register kwalificatiestructuur SBB](https://kwalificatie-mijn.s-bb.nl) is used.
studyCode:
type: string
description: |
Official code of the study.
- primary education: the `opleidingseenheidcode` as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
- secondary education: the `opleidingseenheidcode` as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
- vocational education: the `crebocode` as specified in [Register kwalificatiestructuur SBB](https://kwalificatie-mijn.s-bb.nl) is used.
studyLevels:
type: array
description: |
Official levels of the study.
Primary and secondary education studyLevels are based on the `Niveau` as specified in [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/niveau/)
For Vocational Education Edu-V extended this list as documented on [Waardelijst onderwijsniveaus en leerjaren](https://edu-v.atlassian.net/wiki/spaces/AFSPRAKENS/pages/179470347/Waardelijst+onderwijsniveaus+en+leerjaren).
items:
type: object
properties:
studyLevelId:
type: string
description: 'The uuid of the level.'
example: 'cb61531d-61eb-4412-a52f-ca065ca37e39/'
pattern: '^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$'
studyLevelPrefix:
type: string
description: 'The prefix of the level'
example: 4205
minLength: 4
maxLength: 4
pattern: "^[0-9]*$"
studyLevelName:
type: string
description: 'The name of the level.'
example: 'havo 5'
required:
- studyLevelId
- studyLevelPrefix
- studyLevelName
required:
- studyName
Subject:
title: Subject
type: object
x-tags:
- Product
description: 'A subject where this product is targeted at.'
properties:
subjectPrefix:
type: string
description: |
Prefix of the subject.
- primary education: the `vakleergebied prefix` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
- secondary education:the `vakleergebied prefix` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
subjectName:
type: string
description: |
Name of the subject.
- primary education: the `vakleergebied name` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
- secondary education:the `vakleergebied name` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
required:
- subjectName
- subjectPrefix
SchoolSizePrice:
type: object
properties:
qty:
type: integer
description: 'Minimum number of students from which this price applies.'
priceExcl:
type: number
format: float
description: 'Price excluding VAT.'
priceIncl:
type: number
format: float
description: 'Price including VAT.'
TierPrice:
type: object
properties:
qty:
type: integer
description: 'Minimum number of copies from which this price applies.'
priceExcl:
type: number
format: float
description: 'Price excluding VAT.'
priceIncl:
type: number
format: float
description: 'Price including VAT.'
Media:
title: Media
type: object
x-tags:
- Product
properties:
url:
type: string
description: 'url to the media object.'
description:
type: string
description: 'short description of the media object, which can be displayed as hover info.'
width:
type: integer
description: 'width in pixels'
height:
type: integer
description: 'height in pixels'
description: 'A reference to a media object.'
required:
- url
ProductID:
title: ProductID
x-tags:
- Product
anyOf:
- type: string
description: 'uuid'
pattern: '^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$'
example: '3b951e8f-de9e-4d0a-be3e-0caea2467ec8'
- type: string
description: 'isbn'
pattern: '^[0-9]{13}$'
example: '9789402054958'
- type: string
description: 'ean'
pattern: '^[0-9]{13}$'
example: '4003994155486'
StatusResponse:
title: StatusResponse
type: object
description: 'Functional status code and status message.'
properties:
status:
type: integer
description: 'See functional status codes within the Documentation.'
statusMessage:
type: string
description: 'See functional status messages within the Documentation.'
required:
- status
securitySchemes:
OAuth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://api.example.com/oauth2/token
refreshUrl: https://api.example.com/oauth2/token
scopes:
eduv.catalogue: scope that allows a party to retrieve products from the catalogue
paths:
/products:
parameters:
- schema:
type: string
format: date-time
in: query
name: since
required: false
description: |
Request all products modified after the specified timestamp. Format: Conform openapi in ZULU time as specified in RFC 3339, section 5.6.
Clients are encouraged to use the since parameter above fetching the resource fully.
**Maximum age of the timestamp is 7 days in the past.**
example: "2017-07-21T17:32:28Z"
get:
summary: Get All Products
operationId: get-all-products
x-tags:
- Product
tags:
- Leveranciersspecifieke leermiddelencatalogus
description: Get all products
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Product'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
security:
- OAuth2:
- eduv.catalogue
/products/{id}:
parameters:
- schema:
type: string
name: id
in: path
required: true
get:
summary: Get Product by ID
operationId: get-product-by-id
x-tags:
- Product
tags:
- Leveranciersspecifieke leermiddelencatalogus
description: Get a specific product by id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
security:
- OAuth2:
- eduv.catalogue
/products/info:
parameters:
- schema:
type: string
format: date-time
in: query
name: since
required: false
description: |
Request all products modified after the specified timestamp. Format: Conform openapi in ZULU time as specified in RFC 3339, section 5.6.
Clients are encouraged to use the since parameter above fetching the resource fully.
**Maximum age of the timestamp is 7 days in the past.**
example: "2017-07-21T17:32:28Z"
get:
summary: Get All Products Info for Display In Portal
operationId: get-all-products-info
x-tags:
- Product
tags:
- Leveranciersspecifieke leermiddelencatalogus
description: Get all products info
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProductInfo'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
security:
- OAuth2:
- eduv.catalogue
/products/info/{id}:
parameters:
- schema:
type: string
name: id
in: path
required: true
get:
summary: Get Product Info by ID for Display in Portal
operationId: get-product-info-by-id
x-tags:
- Product
tags:
- Leveranciersspecifieke leermiddelencatalogus
description: Get a specific product info by id
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductInfo'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
security:
- OAuth2:
- eduv.catalogue
x-tags:
- name: Product