iiRDS Request API
How it worksWhy this serviceDevelopersDeployClone the repo
Semantic gateway · iiRDS Request API

One API for every iiRDS archive — wherever it lives.

Point it at archives already sitting on disk, S3 or IPFS. The gateway loads their metadata into an isolated semantic graph and serves it through the official iiRDS query API — no uploads, no vendor lock-in.

Clone the repoOpen the API docs
Stateless
scales horizontally
Multi-tenant
named-graph isolation
AGPL v3
open source
Ingest → index → query
Resource URI
ipfs://bafy… · s3://docs · file://default
Named graph = resourceURI
metadata.rdf + iiRDS core schema
iiRDS JSON / SPARQL
scoped to your authorized graphs
The problem

You already produce iiRDS. Serving and querying it is the hard part.

Archives end up scattered across object storage, local disk and content-addressed networks. Every consumer needs a different slice, exposed safely, with the guarantee they only see what they are authorized for. Bespoke interfaces don't interoperate, and rolling your own semantic layer per project doesn't scale.

This service is a standards-compliant gateway that turns those scattered archives into a single, secure query surface — without moving a byte you didn't ask it to.

Use it when
You have iiRDS archives and want the official Request API, not a bespoke one.
Archives live across disk, S3 and IPFS and you want one query surface.
You need hard multi-tenant isolation between consumers.
You want decentralized auth (DID-JWT) or to reuse an existing OIDC provider.
Not an authoring tool — it does not create archives or accept file uploads. Archives are referenced, never pushed.
How it works

Three steps, all by reference.

01 · INGEST
Point at what already exists

Call POST /api/ingest with a resource URI. The gateway fetches its metadata.rdf in the background. Nothing is uploaded through the API.

02 · INDEX
Each archive gets its own graph

Triples are merged with the iiRDS core schema and loaded into a named graph keyed by that resource URI. Poll /api/ingest/status for readiness.

03 · QUERY
Ask it directly

Run SPARQL against /api/sparql, or use the native iiRDS JSON query language. Every result is scoped to the URIs you are authorized to see.

Why this service

The iiRDS spec defines the query. We built everything around it.

A plain Request API assumes one store, one identity, one deployment. Real documentation estates aren't like that. Five extensions turn the standard into something you can actually operate.

Capability
Plain iiRDS Request API
This service
Addressing
Resource URI scheme
scheme://source/path routes to the right backend automatically.
Storage providers
Where archives live
Undefined / single store
Pluggable Local disk · IPFS · S3 / MinIO, one query surface over all.
Auth providers
Who gets in
Out of scope
DID-JWT + OAuth2/Keycloak + static token, in parallel on one Bearer header.
Graph providers
Where triples run
Fixed
Swap memory → local → Oxigraph → remote — same queries, horizontal scale.
Query templates
How you ask
Raw SPARQL only
Customisable iiRDS JSON query language + raw SPARQL 1.1.
Multi-tenancy
Isolation model
Named-graph isolation per resource URI; queries auto-scoped to grants.
Built for production

Everything the standard leaves to you.

Semantic discovery

Query with the iiRDS JSON query language or raw SPARQL 1.1 over the merged core schema.

Pluggable storage

Fetch archives from local disk, S3/MinIO or IPFS — pre-configured sources prevent SSRF and credential leaks.

Tenant isolation

Every archive loads into its own named graph; requests are automatically restricted to the caller's grants.

Stateless auth

Self-signed DID-JWT proofs verified without server-side keys, with optional OAuth2/Keycloak alongside.

Horizontal scale

A stateless app tier plus a shared Oxigraph backend means you add replicas behind a load balancer.

Observability

Helmet hardening, global rate limiting, health & readiness probes, Sentry and structured Winston logging.

Developer quick start

Register, ingest, query — three requests.

Click through the flow. Every request is a copy-paste curl against a running server. Auth is a single Bearer header the whole way.

Full API reference
response
Authentication

Bring whichever identity you already run.

DID-JWTAlways on

Self-sovereign identity for federated clients and machine identities. Register a did:jwk with an admin or trusted-domain invite, then sign a fresh proof JWT per request. The public key is derived from the DID — nothing is stored server-side.

OAuth2 / KeycloakEnabled

Existing users and service accounts reach the API with tokens from your OIDC provider — validated locally against the issuer's JWKS. No client secret is stored, and both schemes run on the same Bearer header.

Static bearer tokenEnabled

One shared token scoped to every known resource URI, for trusted service-to-service automation. Present it as a Bearer header — meant for internal jobs, not public clients.

Architecture

Five modules, one graph store.

Auth
DID + OAuth2, scoping
Ingest
fetch, parse, load
Storage
provider router
Graph
named-graph store
iiRDS
Request API + SPARQL
client──DID-JWT / OAuth2──▶/api/ingest · /api/resources · /api/sparql──scoped──▶named graphs
Deployment

Run it yourself, or let us run it.

The service is AGPLv3 open source — clone it and self-host on Docker or Kubernetes. Prefer a managed setup? We offer it as a SaaS or a fully on-premise deployment.

Self-hosted · AGPL v3

A production Docker image plus a Helm chart (stateless app, bundled Oxigraph). Point at a shared graph store and scale to as many replicas as you need.

yarn build            # -> dist/iirds
docker build -t iirds .
helm install iirds charts/iirds
Managed by EnduraDocs

Skip the ops. We host, monitor and update the gateway for you.

SaaS — multi-tenant, on our infrastructure, minutes to onboard.
On-premise — deployed inside your own environment, fully isolated.

Serve your iiRDS archives, today.

Clone the repository and run the full local stack — app, Postgres, MinIO and Oxigraph — with a single command.

Clone the repoRead the docs
git clone gitlab.com/enduradocs/applications/services/iirds
iiRDS Request API — a stateless, multi-tenant semantic gateway for tekom's iiRDS standard.
NestJS · PostgreSQL · Oxigraph · AGPL-3.0