Uploading to the Metadata Catalogue
There are two ways for metadata to be registered into the metadata catalogue. The first is an automated process where connector services automatically index information from popular AI and research platforms such as Hugging Face. The second is to directly register metadata with the metadata catalogue. This may be done directly through the REST API, or by services built on top of it such as RAIL or the (to be added) metadata catalogue editor.
This page describes the steps to register metadata through the REST API.
What is metadata?
Metadata is data about data. A tabular dataset stored in an excel sheet or a trained machine learning model is the data. The metadata then describes information about that data, for example, "how big is the dataset?", "how was the model trained?", "where is the data stored?" or "which publication describes the data?".
The metadata catalogue does not provide an option to upload the data alongside the metadata. If you want to upload your model or dataset, we recommend you do this in platforms that specialize in storing this artifacts, such as Zenodo, OpenML, or Hugging Face. If you do this with a platform which has a connector to the metadata catalogue, the metadata for that asset will automatically be registered in the metadata catalogue and there is no need to manually register it as described below.
In the future there may also be services on the AI-on-Demand platform which can be used for data storage.
Workflow for Uploading Metadata
Registering new metadata requires a user to submit it to the metadata catalogue's REST API,
after which a reviewer will publish the asset or suggest changes. This general workflow
is shown in the image below. In the image and the description after ASSET
denotes
a type of asset, e.g., Organisation
or FundingOpportunity
. Refer to the REST API
documentation for more information about the latest versions
of the endpoints, including their exact addresses and schemas used.
The sections below describe the process in more detail.
Registering the Asset
You upload your assets to /ASSET/v1
using a POST
request that contains
in the JSON body all the required data for the asset type. A successful response
should look something like this:
{
"identifier": 3
}
Take a note of the identifier assigned to the asset, as you will need it to request a review in the next step.
The asset is now in draft mode, which means that other users cannot see it but you can, and you may still edit it.
To edit the asset, use the PUT
endpoints for /ASSET/v1
.
Requesting a Review
When you want to publish the asset, you can submit it for review. You
can do this by making a POST
request to the /ASSET/submit/v1/IDENTIFIER
endpoint.
Here you need to replace IDENTIFIER
with the identifier of the asset you retrieved
in the last step.
You may include a comment to the reviewer of up to 256 characters in the body of the
POST
request, this should generally not be necessary but may be useful to provide
some clarification:
{
"comment": "Clarification the reviewer should be aware of."
}
When you request a submission, you also get a response with the submission's identifier.
{
"submission_identifier": 1
}
Info
An asset submitted for review may longer be edited. If you do not want it published, you may retract the asset from review after which you are allowed to edit it again.
Awaiting a Review
After submitting your asset for review, you must wait for a reviewer to process your submission. If the reviewer accepts the submission, it will be published to AIoD without further action by you. If the reviewer rejects the submission, you can find their feedback in their review.
You can check that status of your pending submission in two ways.
First, you can request the status for that review specifically using the
/submissions/v1/IDENTIFIER
endpoint, where IDENTIFIER
needs to replaced with the
identifier of the submission (not the asset!).
For example, if the submission identifier we received was '1', we can query
submissions/v1/1
and retrieve its status which would look something like:
{
"comment": "Clarification the reviewer should be aware of.",
"identifier": 1,
"request_date": "2025-03-20T09:09:54",
"aiod_entry_identifier": 212,
"asset_type": "case_study",
"reviews": [],
"asset": {
...
}
}
"reviews": []
).
Alternatively, you can request an overview of all your submissions with a GET
request
to the submissions/v1
endpoint, which will result in a response such as:
[
{
"comment": "Clarification the reviewer should be aware of.",
"identifier": 1,
"request_date": "2025-03-20T09:09:54",
"aiod_entry_identifier": 212,
"asset_type": "case_study"
}
]
submissions/v1/?mode=pending
.
Please refer to the endpoint documentation for other options.
Users are only ever able to view information about their own submissions. While it is registered in the database which user requested the submission, this information is not revealed to the reviewer. That is to say, it is a double-blind review process (though in general the content of the metadata is likely revealing).
Retracting a Submission
Sometimes you may want to retract a submitted asset before a reviewer manages to review it.
For example, to correct a mistake in the original submission. You can retract an asset from
review at any time by doing a POST
request to the /submissions/retract/v1/SUBMISSION_IDENTIFIER
endpoint.
A retracted submission is treated the same as a rejected submission. The asset is put back into draft status and will not be reviewed until the you submit a new review request.
A Rejected Submission
You may find that your submission gets rejected. In that case, the submissions/v1/IDENTIFIER
endpoint will provide you with the reviewer feedback, e.g.:
{
"comment": "Clarification the reviewer should be aware of.",
"identifier": 1,
"request_date": "2025-03-20T09:09:54",
"aiod_entry_identifier": 212,
"asset_type": "case_study",
"reviews": [
{
"comment": "Several critical fields have incomplete information. Please improve the description, and add a house number to the address.",
"identifier": 1,
"decision_date": "2025-03-20T09:23:27",
"decision": "rejected",
"submission_identifier": 1
}
],
"asset": { ... }
}
PUT
requests to /ASSET/v1
to address
the reviewer feedback, and then request a new review following the regular submission
process.
Reviewer Process
Reviewers are user with a special role assigned in Keycloak. They have access to all submissions and can review them. The only restriction is that a reviewer cannot review their own submission.
For reviewers, the main endpoints of interest are:
/submissions/v1
to fetch identifiers of submissions which require a review. The?mode=oldest
parameter can be used to fetch the submission which has been waiting for a review the longest./submissions/v1/{identifier}
to get more detailed information on the submission, in particular this will provide also the asset body to review./reviews/v1
the endpoint through which reviews can be made usingPOST
requests.
Given a submission identifier (obtained from either /submissions
endpoint mentioned above),
the review can post a review to /reviews/v1
. This requires the user to make a decision
to accept or reject the submission, and optionally leave a comment. When rejecting an
asset, a comment is strongly encouraged, otherwise the user will not know how to improve
their submission. An example body of the POST
request to /reviews/v1
could look like:
{
"comment": "Several critical fields have incomplete information. Please improve the description, and add a house number to the address.",
"decision": "rejected",
"submission_identifier": 0
}
Notes
Assets registered by users will automatically be associated with the "AIoD" platform, indicating that it's a direct registration. Users cannot associate their registered metadata with other platforms, as that is reserved to data which is automatically registered through connectors.
Platforms cannot be created by regular users, and require a special permission set in Keycloak.
There is currently no mechanism for pushing notifications to users, so we cannot notify a user directly when their assets are published. Some polling mechanism needs to be used for now.