Ekayana Documentation
Everything you need to integrate decentralized storage, W3C identifiers, and AI powered knowledge extraction into your research infrastructure.
Quick start
Full introductionSign in for a token
# No SDK to install. The API is plain HTTP/JSON.
# Sign in once and use the token on every request.
curl -X POST https://api.ekayana.io/api/signin \
-H "Content-Type: application/json" \
-d '{ "email": "ada@lab.example", "password": "..." }'
# -> { "token": "..." }Upload your first file
// Upload research data. The CID comes back immediately
const body = new FormData();
body.append('file', file); // e.g. dataset.csv
const res = await fetch('https://api.ekayana.io/api/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body,
});
const { cid } = await res.json();
// The CID names the sealed envelope, so every upload gets a new one.Core documentation
How the platform is put together, and why each piece is there.
Getting Started
Content addressed storage and did:bio identifiers for research data
02Bio-DID-Sequencer
The API service behind accounts, did:bio records, sealed storage, UCAN sharing and the upstream proxies
03BioAgents Architecture
The ElizaOS deployment behind the knowledge base, the knowledge graph and protein structure lookups
04Knowledge Graph
A SPARQL store of published papers, one named graph per DOI, and the typed searches over it
05System Architecture
The subsystems, the repositories that implement them, the keys that control them, and the path of a request
06Solana Registry Program
The bio-did-registry program, with its accounts, the two create paths, authorization, instructions, costs and resolution
07Protocol Labs Stack
The parts of the IPFS stack the platform runs, what each one does here, and how to check it
08Dataverse Integration
Deposit to Dataverse through the API and link a did:bio to the DOI a dataset already has
09UCAN Authorization
UCAN 1.0 delegations and invocations, signed by your wallet and validated by pq-ucan
10Post Quantum Security
FIPS 203/204 cryptography across identity, authorization and storage, and where the boundary sits
11Dedicated Gateways
High performance IPFS gateways with custom domains and SSL support
12Content Pinning
How uploads are kept on the platform node, and how they are released
13IPNS Publishing
Stable names for content that gets revised, with every version retained
14Privacy Controls
What is public, what is sealed, who can open it, and what that gives you under GDPR
15Organizations & Regulations
Global digital identity initiatives and where a did:bio identifier fits
Tutorials & API reference
Task shaped guides and the endpoint reference.
Authentication
Register, sign in, use an opaque session token, and link the wallet that is your identity
02did:bio Identifiers
Key subjects, wallet owned subjects, anchoring with your wallet, and resolution
03File Storage API
Upload, download, and manage sealed, content addressed files
04Sharing & Delegation
Grant scoped access to a file with a delegation your wallet signs
05IPNS Tutorial
Practical guide to publishing revisions behind one stable name
06Errors & Rate Limits
Error response format, status codes, and throttling behaviour
Code examples
Copy paste ready snippets against the live API.
Authenticate
Plain HTTP with no SDK required
# No SDK to install. The API is plain HTTP/JSON.
# Sign in once and use the token on every request.
curl -X POST https://api.ekayana.io/api/signin \
-H "Content-Type: application/json" \
-d '{ "email": "ada@lab.example", "password": "..." }'
# -> { "token": "..." }Upload Data
Store research data on IPFS
// Upload research data. The CID comes back immediately
const body = new FormData();
body.append('file', file); // e.g. dataset.csv
const res = await fetch('https://api.ekayana.io/api/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body,
});
const { cid } = await res.json();
// The CID names the sealed envelope, so every upload gets a new one.Create a DID
Mint a decentralized identifier
// Mint a did:bio identifier for a dataset
const res = await fetch('https://api.ekayana.io/api/did', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
kind: 'dataset',
metadata: {
title: 'Coral bleaching survey 2026',
researchers: [{ name: 'Ada Lovelace', role: 'PI' }],
keywords: ['coral', 'bleaching'],
license: 'CC-BY-4.0',
},
}),
});
// anchored: false until your wallet signs the anchor workflow
const record = await res.json();Knowledge Extraction
AI powered data processing
// Register an uploaded paper with BioAgents
const res = await fetch('https://api.ekayana.io/api/research-paper', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
file_cid: 'bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi',
title: 'CRISPR-Cas9 Gene Editing for Neurodegenerative Diseases',
authors: ['Jane Smith', 'John Doe'],
doi: '10.1038/s41586-021-03819-2',
}),
});
// Ingestion runs in the background. Poll the paper record for its status
const { did, status } = await res.json();Start with the introduction if you are new here.
It covers what a did:bio identifier is, why the data sits on IPFS, and how the two fit together, in about ten minutes.
Start learning