API for developers

Connect directly to your datasets in YoDataSet.

Create an API key

Keys start with yodk_ and are scoped to your account only.

Quick start

1. Create a key with the button above — it's scoped to your account only.

2. Use the /api/datasets and /api/datasets/{id} endpoints to list datasets and fetch cleaned content.

import requests

API_KEY = 'yodk_...'
headers = {'Authorization': f"Bearer {API_KEY}"}

datasets = requests.get('/api/datasets', headers=headers).json()
ds = datasets[0]
data = requests.get(f'/api/datasets/{ds["id"]}?format=json', headers=headers).json()
# data["files"] now contains cleanedContent you can pass to a model
const res = await fetch('/api/datasets', {
  headers: {Authorization: "Bearer API_KEY"}
});
const datasets = await res.json();
const ds = datasets[0];
const data = await (await fetch(`/api/datasets/${ds.id}?format=json`, {
  headers: {Authorization: "Bearer API_KEY"}
})).json();

Example response

Trimmed JSON from GET /api/datasets/{id} with ?format=json.

{
  "id": "a1b2c3d4-...",
  "name": "Luganda voice corpus",
  "description": "Cleaned speech dataset",
  "fileCount": 50,
  "totalSizeBytes": 94371840,
  "createdAt": "2026-07-18T09:12:00.000Z",
  "updatedAt": "2026-07-18T09:40:00.000Z",
  "files": [
    {
      "id": "f_8f2a...",
      "originalName": "voice_memo_03.wav",
      "fileType": "audio/wav",
      "sizeBytes": 1887436,
      "confidenceScore": 0.94,
      "flaggedForReview": false,
      "cleanedContent": "transcribed and diarized text ...",
      "createdAt": "2026-07-18T09:13:00.000Z"
    }
  ]
}

Endpoints

Datasets
POST/api/upload

Upload a single file for cleaning.

GET/api/datasets

List all datasets for the authenticated user.

GET/api/datasets/{id}

Get a dataset with files and cleaned content (JSON or CSV).

POST/api/datasets

Create a new empty dataset (name required).

Projects
GET/api/projects

List the authenticated user's projects.

POST/api/projects

Create a new project.

Jobs and export
GET/api/jobs

Poll batch or file processing status (batchId or fileId required).

POST/api/export

Generate a dataset export and Data Card.

GET/api/download

Download a cleaned dataset as a zip (fileId or batchId required).

API keys
GET/api/keys

List API keys (dashboard session, not API key auth).

POST/api/keys

Create a new API key (dashboard session, not API key auth).

DELETE/api/keys/{id}

Revoke an API key (dashboard session, not API key auth).

Limits and errors

Rate limit (planned)

A per-key limit of 60 requests/minute is planned but is not yet enforced. Requests currently succeed without throttling.

Error codes

  • 401 — missing or invalid API key (or no session).
  • 400 — bad request (e.g. missing required field, unsupported format).
  • 404 — not found.
  • 500 — processing error; safe to retry.
  • 502 — export destination (Kaggle/GitHub) failure.

Note: 403 (scope) and 429 (rate limit) are not returned by the API today.

Ready to build?

Create an account and start building.

Need something custom?

We work with research labs, NGOs, and government bodies on tailored data-cleaning pipelines and private deployments.