Documentation

Ekayana Documentation

Everything you need to integrate decentralized storage, W3C identifiers, and AI powered knowledge extraction into your research infrastructure.

1

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.io/api/signin \
  -H "Content-Type: application/json" \
  -d '{ "email": "ada@lab.example", "password": "..." }'
# -> { "token": "..." }
2

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.

01

Getting Started

Content addressed storage and did:bio identifiers for research data

02

Bio-DID-Sequencer

The API service behind accounts, did:bio records, sealed storage, UCAN sharing and the upstream proxies

03

BioAgents Architecture

The ElizaOS deployment behind the knowledge base, the knowledge graph and protein structure lookups

04

Knowledge Graph

A SPARQL store of published papers, one named graph per DOI, and the typed searches over it

05

System Architecture

The subsystems, the repositories that implement them, the keys that control them, and the path of a request

06

Solana Registry Program

The bio-did-registry program, with its accounts, the two create paths, authorization, instructions, costs and resolution

07

Protocol Labs Stack

The parts of the IPFS stack the platform runs, what each one does here, and how to check it

08

Dataverse Integration

Deposit to Dataverse through the API and link a did:bio to the DOI a dataset already has

09

UCAN Authorization

UCAN 1.0 delegations and invocations, signed by your wallet and validated by pq-ucan

10

Post Quantum Security

FIPS 203/204 cryptography across identity, authorization and storage, and where the boundary sits

11

Dedicated Gateways

High performance IPFS gateways with custom domains and SSL support

12

Content Pinning

How uploads are kept on the platform node, and how they are released

13

IPNS Publishing

Stable names for content that gets revised, with every version retained

14

Privacy Controls

What is public, what is sealed, who can open it, and what that gives you under GDPR

15

Organizations & Regulations

Global digital identity initiatives and where a did:bio identifier fits

Tutorials & API reference

Task shaped guides and the endpoint reference.

Code examples

Copy paste ready snippets against the live API.

Authenticate

Plain HTTP with no SDK required

bash
# 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

typescript
// 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

typescript
// 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

typescript
// 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