Ekayana Documentation
Everything you need to integrate decentralized storage, W3C identifiers, and AI-powered knowledge extraction into your research infrastructure.
Quick start
Full introduction →Sign 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.com/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.com/api/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body,
});
const { cid } = await res.json();
// Identical bytes always produce the same CID.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
GDPR compliant Decentralized Identifier system for research data
03BioAgents Architecture
AI powered system for research data processing and knowledge extraction
04Knowledge Graph
Extracted facts as a queryable graph of entities and relationships
05System Architecture
How the five components fit together, and where the trust boundaries sit
06Solana Registry Program
In-depth specification of the bio-did-registry on-chain program
07Protocol Labs Stack
What IPFS, Filecoin, libp2p, UCAN, and the rest of the stack each do here
08Dataverse Integration
Keep your DOIs - bridge datasets between Dataverse and IPFS
09UCAN Authorization
Trustless, decentralized authorization with capability based security
10Post-Quantum Security
FIPS 203/204 cryptography across identity, authorization, and storage
11Dedicated Gateways
High performance IPFS gateways with custom domains and SSL support
12Content Pinning
Ensure your content stays available in the IPFS network indefinitely
13IPNS Publishing
Create mutable links to IPFS content with consistent addressing
14Privacy Controls
GDPR compliant privacy controls for your IPFS content
15Organizations & Regulations
Global digital identity initiatives and Bio DID Sequencer compliance
Tutorials & API reference
Task-shaped guides and the endpoint reference.
Authentication
Register, sign in, and use post-quantum session tokens
02Creating a DID
Mint a conformant did:bio DID for a dataset and resolve it
03File Storage API
Upload, download, and manage content addressed files
04Sharing & Delegation
Grant scoped access to a file with revocable UCAN tokens
05IPNS Tutorial
Practical guide to using IPNS for mutable content references
06Errors & Rate Limits
Error response format, status codes, and throttling behaviour
Code examples
Copy-paste ready snippets against the live API.
Authenticate
Plain HTTP - 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.com/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.com/api/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body,
});
const { cid } = await res.json();
// Identical bytes always produce the same CID.Create a DID
Mint a decentralized identifier
// Mint a did:bio identifier for a dataset
const res = await fetch('https://api.ekayana.com/api/did', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
controller: 'did:bio:devnet:2T6zLFvMx7NJ...',
public_key: 'z6MkfuN2vWAoHermh6vY6TgAJfwhBWZC...',
metadata: {
title: 'Coral bleaching survey 2026',
researchers: [{ name: 'Ada Lovelace', role: 'PI' }],
keywords: ['coral', 'bleaching'],
license: 'CC-BY-4.0',
},
}),
});
const didDocument = await res.json();Knowledge Extraction
AI-powered data processing
// Send an uploaded paper through BioAgents
const res = await fetch('https://api.ekayana.com/api/bioagents/process', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
file_cid: 'QmXg9Pp2ytZ14xgK35M6iTC2Vz6jR9zYgooNp2UHPTMnPN',
title: 'CRISPR-Cas9 Gene Editing for Neurodegenerative Diseases',
authors: ['Jane Smith', 'John Doe'],
doi: '10.1038/s41586-021-03819-2',
}),
});
// Processing is async - poll the task until it completes
const { task_id } = await res.json();New here? Start with the introduction.
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