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 modelconst 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
/api/uploadUpload a single file for cleaning.
/api/datasetsList all datasets for the authenticated user.
/api/datasets/{id}Get a dataset with files and cleaned content (JSON or CSV).
/api/datasetsCreate a new empty dataset (name required).
/api/projectsList the authenticated user's projects.
/api/projectsCreate a new project.
/api/jobsPoll batch or file processing status (batchId or fileId required).
/api/exportGenerate a dataset export and Data Card.
/api/downloadDownload a cleaned dataset as a zip (fileId or batchId required).
/api/keysList API keys (dashboard session, not API key auth).
/api/keysCreate a new API key (dashboard session, not API key auth).
/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.
Need something custom?
We work with research labs, NGOs, and government bodies on tailored data-cleaning pipelines and private deployments.