Developers · Read-only API

Your meetings, in your workflow.

Read your synced meetings, transcripts, notes, and saved summaries from a script or integration. Free to use, powered by DittoDub's servers.

Get started

  1. Sign in to BreezeType and sync a meeting from the desktop app.
  2. Open Account → API keys, name your key, and copy it. Its only permission is breeze:read.
  3. Set BREEZE_API_KEY in your environment, then make your first request:
curl 'https://api.dittodub.com/v1/breeze/meetings?limit=20' \
  -H "Authorization: Bearer $BREEZE_API_KEY"

Keep keys in server-side environment variables or a secret store. Do not put them in URLs, public frontend code, or source control. You can revoke a key at any time from your account.

Endpoints

Base URL: https://api.dittodub.com

GET/v1/breeze/meetings

List your synced meetings

Metadata only, newest started_at first, with ID as a stable tie-breaker. Pass page.next_offset while page.has_more is true. Concurrent sync or deletion may shift offset pages; deduplicate by id. Timestamps use Unix seconds.

limit (query, optional)
1–100; default 20.
offset (query, optional)
0–1000000; default 0.
GET/v1/breeze/meetings/{meeting_id}

Get a meeting and its saved content

Returns saved transcript, notes, and summary when available. Returns 404 for another owner's meeting, including meetings shared with you. Does not generate content or return audio download links.

meeting_id (path, required)
Use an id from the meeting list.
curl 'https://api.dittodub.com/v1/breeze/meetings/MEETING_ID' \
  -H "Authorization: Bearer $BREEZE_API_KEY"

Saved content, ready to use

The list returns metadata and a page object. While page.has_more is true, pass page.next_offset as the next offset. Deduplicate by meeting ID if sync changes the list while you paginate. Fetch a meeting by ID to retrieve its saved content:

{
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "Weekly planning",
    "started_at": 1789327000,
    "ended_at": 1789328000,
    "duration_seconds": 1000,
    "tags": [],
    "updated_at": 1789328001,
    "transcript_text": "Let's review this week's priorities.",
    "transcript_segments": [
      {
        "start": 0,
        "end": 3,
        "text": "Let's review this week's priorities.",
        "speaker_id": null
      }
    ],
    "notes": [],
    "summary": null,
    "summary_generated_at": null
  }
}

Timestamps are Unix seconds. Transcript segments use offsets in seconds. Saved notes and segment fields can vary by desktop version. A missing summary or transcript is null; reading never generates one. The OpenAPI 3.1 schema contains all response fields and error formats.

Access and limits

  • Keys read your own visible, synced meetings. Local-only, deleted, hidden, and shared-with-you meetings are excluded.
  • The API cannot create, edit, delete, share, upload, or generate content. Audio download links are not included.
  • Existing DittoDub project keys and OAuth connections do not grant BreezeType access. In DittoDub, switch to your personal workspace and choose “Read BreezeType meetings only” when creating a key.
  • Use up to 100 meetings per page. Avoid continuous polling. Back off on errors, and honor Retry-After when provided.
API error responses
StatusMeaning
400Invalid ID or pagination.
401Missing, expired, or revoked key.
403The key needs personal breeze:read access.
404Meeting not found or not owned by your account.
405The endpoint is read-only.
429Too many requests; back off and retry.

Also available in the DittoDub API reference. This hosted read API can serve integrations and future MCP connectors; the desktop app's local MCP remains available separately.