Developers

SpeakNotes API authentication

The API takes three credentials: an API key, an OAuth access token, or a Firebase ID token from a signed-in session.

API keys

Send the key as a bearer token on every request. Any signed-in account can create one, and it works straight away.

curl https://api.speaknotes.io/v1/notes \
  -H "Authorization: Bearer sn_live_YOUR_API_KEY"

Live keys start sn_live_ and act on your real library. Sandbox keys start sn_test_ and run against fixed output. Keys issued before scopes existed still work and carry full access.

Scopes

Every key and every OAuth token carries scopes. Reading never implies writing, so a key scoped to notes:read cannot delete anything. A request missing a scope gets a 403 that names what is missing.

  • notes:readRead notes, transcripts, and summaries.
  • notes:writeCreate, update, and delete notes.
  • folders:readRead folders.
  • folders:writeCreate, update, and delete folders.
  • transcriptions:writeTranscribe audio and video.
  • summaries:writeGenerate summaries from audio, text, and YouTube URLs.
  • usage:readRead credit balance and usage history.

Rate limits

Limits are counted per credential, not per IP, so one integration cannot starve another. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset, and a 429 carries Retry-After.

120
Reads per minute
30
Writes per minute
10
Processing per minute
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="SpeakNotes API", error="invalid_token",
  resource_metadata="https://api.speaknotes.io/.well-known/oauth-protected-resource"

{
  "error": {
    "type": "authentication_error",
    "code": "invalid_token",
    "message": "The API key is invalid, expired, or revoked.",
    "doc_url": "https://speaknotes.io/developers/errors#invalid_token"
  }
}

OAuth

Building something other SpeakNotes users sign in to? Use OAuth rather than asking them to paste a key. /developers/oauth

Rotating and revoking

A key is shown once, at creation, and stored only as a hash. Revoking one takes effect immediately. Keys can also be given an expiry date when you create them.