Memo AIDocs
API Reference

Bulk export

POST /transcriptions/export — export up to 100 transcriptions as a single ZIP archive in one request.

POST /transcriptions/export

Export many transcriptions at once. Returns a ZIP archive — one request regardless of count (1–100 per call). Far faster and cheaper than calling Export in a loop.

Request body

{
  "ids": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "7c9e6679-7425-40de-944b-e07fc1f90ae7"
  ],
  "format": "md"
}
FieldTypeDefaultDescription
idsUUID[]1–100 transcription IDs. Required.
formatstringmdmd or txt.

Request

curl -X POST https://app.memoai.tech/api/v1/developer/transcriptions/export \
  -H "Authorization: Bearer mk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": ["3fa85f64-5717-4562-b3fc-2c963f66afa6", "7c9e6679-7425-40de-944b-e07fc1f90ae7"],
    "format": "md"
  }' \
  -o transcriptions.zip
import httpx

resp = httpx.post(
    "https://app.memoai.tech/api/v1/developer/transcriptions/export",
    headers={"Authorization": "Bearer mk_live_your_key_here"},
    json={
        "ids": [
            "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "7c9e6679-7425-40de-944b-e07fc1f90ae7",
        ],
        "format": "md",
    },
)
resp.raise_for_status()

with open("transcriptions.zip", "wb") as f:
    f.write(resp.content)
import { writeFile } from "node:fs/promises";

const res = await fetch(
  "https://app.memoai.tech/api/v1/developer/transcriptions/export",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer mk_live_your_key_here",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      ids: [
        "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      ],
      format: "md",
    }),
  },
);
await writeFile("transcriptions.zip", Buffer.from(await res.arrayBuffer()));

Export all my meetings from last week to ~/notes/meetings.

The assistant lists the week's transcriptions, then calls memo_bulk_export with their IDs and an output_dir. It downloads the ZIP and unpacks the files for you in one step.

Response

200 OK — a ZIP archive (Content-Type: application/zip, Content-Disposition: attachment; filename="transcriptions.zip"). Each entry is a file named after its meeting title.

Partial results are silent

IDs that don't exist or aren't in your workspace are skipped — they don't cause an error. If two meetings share a title, filenames are de-duplicated (name (2).md). Compare the number of files in the ZIP against the IDs you sent to detect skips.

Errors

StatusWhen
401Missing/invalid key, or key passed in the URL.
403Plan without API access.
422ids empty or over 100, or format invalid.
429Rate limit exceeded.

See Errors.

On this page