Specala AIDocs
Guides

Export your whole archive

Back up or migrate everything — page through every transcription with limit and offset and export your whole Specala AI archive in batches of 100.

To back up or migrate everything, page through all your transcriptions and export them in batches — bulk export handles up to 100 per request.

Collect every transcription ID

Page through the list with limit + offset until you've seen them all.

import httpx

BASE = "https://app.specala.ai/api/v1/developer"
HEADERS = {"Authorization": "Bearer sk_live_your_key_here"}

ids, offset, page = [], 0, 100
while True:
    resp = httpx.get(
        f"{BASE}/transcriptions",
        headers=HEADERS,
        params={"limit": page, "offset": offset, "status": "completed"},
    )
    resp.raise_for_status()
    data = resp.json()
    ids += [t["id"] for t in data["items"]]
    offset += page
    if offset >= data["total"]:
        break

print(f"Found {len(ids)} transcriptions")

Export in batches of 100

Bulk export accepts up to 100 IDs per call. Chunk the list and write each ZIP to disk.

import io, zipfile, pathlib

OUT = pathlib.Path("specala-archive")
OUT.mkdir(exist_ok=True)

for i in range(0, len(ids), 100):
    batch = ids[i : i + 100]
    resp = httpx.post(
        f"{BASE}/transcriptions/export",
        headers=HEADERS,
        json={"ids": batch, "format": "md"},
    )
    resp.raise_for_status()
    with zipfile.ZipFile(io.BytesIO(resp.content)) as zf:
        zf.extractall(OUT)
    print(f"Batch {i // 100 + 1}: {len(batch)} files")

Mind the rate limit

Data endpoints allow 500 requests/minute. Exporting thousands of meetings in 100-item batches stays well under that — but if you parallelise heavily, add a small delay between batches to avoid 429.

See also

On this page