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.com/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.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.

Tutorials & API reference

Task-shaped guides and the endpoint reference.

Code examples

Copy-paste ready snippets against the live API.

Authenticate

Plain HTTP - 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.com/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.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

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

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