SKG-IF API
The SKG-IF API exposes the OpenAIRE Graph through the Scholarly Knowledge Graph Interoperability Framework — an RDA Working Group standard that lets scholarly knowledge graphs describe their content in a common, machine-readable way.
If you already consume SKG-IF data from another provider, this endpoint lets you query OpenAIRE with the same model and the same client code. If you only need OpenAIRE's own data model, use the Graph API instead — it offers more filters and richer per-entity metadata.
Base URL
https://api.openaire.eu/graph/skg-if/v1
You can access the Swagger documentation at Swagger UI.
Specification
The SKG-IF standard is maintained by the RDA Working Group of the same name, independently of OpenAIRE:
- Interoperability Framework — the data model: entities, their properties, and the vocabularies they use
- SKG-IF OpenAPI — the API specification this endpoint implements (raw YAML)
Use those to understand what a field means; use these pages for what OpenAIRE actually serves.
Entities
Each entity below links to its definition in the specification.
| Entity | Search endpoint | Single entity |
|---|---|---|
| Research products | GET /skg-if/v1/products | GET /skg-if/v1/products/{id} |
| Organisations | GET /skg-if/v1/organisations | GET /skg-if/v1/organisations/{id} |
| Persons | GET /skg-if/v1/persons | GET /skg-if/v1/persons/{id} |
| Data sources | GET /skg-if/v1/datasources | GET /skg-if/v1/datasources/{id} |
| Grants | GET /skg-if/v1/grants | GET /skg-if/v1/grants/{id} |
The specification also defines Venue and Topic entities. OpenAIRE does not expose them as standalone endpoints — venues and topics appear embedded inside research products, identified by on-the-fly identifiers.
Quick start
Get research literature:
/skg-if/v1/products?filter=product_type:literature
Retrieve a single research product by its local identifier:
/skg-if/v1/products/doi_dedup___::a55b42c0d32a4a24cf99e621623d110e
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
filter | string | — | Required. Comma-separated key:value predicates (see filtering) |
page | string | 1 | Page number, or * to start cursor paging (see paging) |
page_size | int | 10 | Results per page, range 1–100 |
Response format
Every response is a JSON-LD document with three top-level members:
{
"@context": [
"https://w3id.org/skg-if/context/1.1.0/skg-if.json",
"https://w3id.org/skg-if/context/1.0.0/skg-if-api.json",
{ "@base": "https://api.openaire.eu/graph/" }
],
"meta": {
"local_identifier": "https://api.openaire.eu/graph/skg-if/v1/products?filter=product_type:literature&page=1",
"entity_type": "search_result_page",
"prev_page": null,
"next_page": { "local_identifier": "...&page=2", "entity_type": "search_result_page" },
"part_of": {
"local_identifier": "https://api.openaire.eu/graph/skg-if/v1/products?filter=product_type:literature",
"entity_type": "search_result",
"total_items": 238603805
}
},
"@graph": [
...
]
}
@context— the SKG-IF JSON-LD contexts, plus an@basethat resolves relative identifiers into full URLs.meta— pagination: links to the previous and next page, and apart_ofobject carryingtotal_items, the total number of matching entities.@graph— the array of matching entities.
A single-entity request (/products/{id}) returns the same envelope with exactly one member in @graph.
Local identifiers
Every entity carries a local_identifier. Entities backed by a real OpenAIRE record use a path that resolves, via @base, to a dereferenceable URL:
"local_identifier": "https://api.openaire.eu/graph/skg-if/v1/products/doi_dedup___::a55b42c0d32a4a24cf99e621623d110e"
You can pass the final path segment straight back to the single-entity endpoint.
On-the-fly identifiers
Some entities — venues and topics, for example — have no persistent identifier of their own in the Graph. Following the SKG-IF specification, these receive a generated identifier in the form:
otf___<session-timestamp>___<entity-type>-<counter>
These identifiers are stable only within a single response. They are not dereferenceable, and they change between requests, so do not store them or use them as keys.
Product types
SKG-IF uses its own vocabulary for product types. The OpenAIRE equivalents are accepted as well and translated internally:
| SKG-IF value | OpenAIRE equivalent |
|---|---|
literature | publication |
research data | dataset |
research software | software |
other | other |
Differences from the specification
The implementation departs from a strict reading of the SKG-IF spec in two ways, both intended to make the API easier to consume:
- Embedded rather than referenced entities. Where the specification defines a plain string reference —
contributions[].by, for instance — OpenAIRE returns the full object inline, with names and identifiers included. This saves a follow-up request per reference. - Not every specified filter is available. A filter defined by the spec but not backed by the OpenAIRE index is rejected with
422, rather than silently ignored. See Filtering for what each endpoint supports.
Learn more
- Filtering — the
filtersyntax and the supported filters per entity - Paging — offset and cursor paging
- Examples — ready-to-run calls for every entity
- SKG-IF Interoperability Framework — the specification behind this API