Welcome to Ekayana
Ekayana stores research data on IPFS and gives every dataset a did:bio identifier that anyone can resolve without asking permission. Files are addressed by their hash. Access is granted with short lived, revocable capability tokens rather than API keys. Anything private is encrypted before it reaches the network.
The reason any of this exists: research data has a citation lifetime measured in decades, and most of the infrastructure holding it does not. A DOI resolves for exactly as long as someone keeps paying for the resolver. A dataset behind an institutional login disappears when the lab does. Content addressing and self-certifying identifiers remove both of those dependencies, and everything else here follows from that.
What the platform is made of
Storage is IPFS, and every upload is pinned as part of the write, there is no separate pin step to forget. Identity is a W3C conformant DID method anchored on Solana, where every valid identifier resolves whether or not anything was ever written on-chain. Authorization is UCAN: each grant names one resource, carries a signed expiry, can be revoked, and can be re-delegated without anyone handing over a credential.
Signatures and key wrapping are post-quantum throughout - ML-DSA-87 and ML-KEM-1024, the final FIPS standards rather than the round-3 drafts that shipped in a lot of "quantum safe" software. That choice costs kilobytes per token, which is a fair trade for data that has to stay confidential into the 2050s.
The rest is specific to research work: BioAgents for metadata extraction and knowledge graph enrichment, a Dataverse bridge so a dataset can keep the DOI it already has, and IPNS pointers so a dataset can be revised without breaking the citation to the version a reviewer actually read.
Quick start
Four steps: register, sign in for a token, upload, share.
No SDK required. The platform is a plain HTTP/JSON API - any language with an HTTP client works. A published client library is planned but not yet released, so the examples below usecurlandfetch.
Authenticate
curl -X POST https://api.ekayana.com/api/signin \
-H "Content-Type: application/json" \
-d '{ "email": "ada@lab.example", "password": "..." }'
# -> { "token": "..." }Every subsequent request carries that token: Authorization: Bearer <token>. See Authentication.
Upload a file
curl -X POST https://api.ekayana.com/api/upload \
-H "Authorization: Bearer $TOKEN" \
-F "file=@results.csv"{ "cid": "QmXyz...", "name": "results.csv", "size": 20480,
"timestamp": "2026-07-24T10:00:00Z", "user_id": 42 }The same from JavaScript:
const body = new FormData();
body.append('file', file);
const res = await fetch('https://api.ekayana.com/api/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body,
});
const { cid } = await res.json();The CID is a hash of the content, so re-uploading identical bytes returns the same identifier. See File Storage.
Where to go next
The tutorials are ordered the way you'd actually use them:
- Authentication - session tokens and how they are verified
- Creating a DID - mint a
did:bioidentity for a dataset - Sharing & Delegation - grant revocable access
- IPNS Tutorial - mutable pointers with version history
- Errors & Rate Limits - error codes and throttling
If you'd rather start from the design instead of the API, read Post-Quantum Security and the Solana Registry Program spec - most of the platform's decisions trace back to one of those two pages.