Developer API

Wave API

Programmatically access your session data, including transcripts, summaries, and semantic search.

Base URL: https://api.wave.co/v1/

Quick Start

1. Get an API token

Create a token at app.wave.co/settings/integrations/api. Choose the scopes your application needs.

2. Make your first request

Include your token in the Authorization header:

curl -H "Authorization: Bearer wave_api_xxx..." \
  https://api.wave.co/v1/sessions

3. Handle the response

All responses are JSON. Successful responses return the data directly:

{
  "sessions": [
    {
      "id": "abc123",
      "title": "Weekly Standup",
      "timestamp": "2025-01-20T10:00:00Z",
      "duration_seconds": 1800,
      "type": "meeting",
      "platform": "zoom"
    }
  ],
  "next_cursor": "2025-01-19T09:00:00Z",
  "has_more": true
}

Authentication

All API requests must be authenticated using a Bearer token in the Authorization header.

Creating a Token

  1. Go to app.wave.co/settings/integrations/api
  2. Click "Create Token" and give it a descriptive name
  3. Select the permissions (scopes) your application needs
  4. Copy the token immediately — it will only be shown once

Scopes

Tokens are granted specific permissions that control what data they can access. Request only the scopes your application actually needs.

sessions:read

List sessions and retrieve session metadata including titles, timestamps, summaries, and notes. Also allows access to session statistics and bulk export.

Required for: GET /v1/sessions, GET /v1/sessions/:id, GET /v1/sessions/stats, POST /v1/sessions/bulk

sessions:write

Update session metadata including title, notes, tags, and favorite status.

Required for: PATCH /v1/sessions/:id

sessions:delete

Permanently delete sessions. Storage files are cleaned up asynchronously.

Required for: DELETE /v1/sessions/:id

sessions:search

Perform semantic search across all your sessions using natural language queries.

Required for: POST /v1/sessions/search

transcripts:read

Access full session transcripts with speaker attribution and timestamps. Also required when requesting transcripts in bulk exports.

Required for: GET /v1/sessions/:id/transcript

media:read

Access signed URLs for session audio and video files. URLs expire after 1 hour.

Required for: GET /v1/sessions/:id/media

account:read

Read account information including subscription status and total session count.

Required for: GET /v1/account

webhooks:manage

Create, list, update, delete, and test webhook endpoints. Manage signing secrets.

Required for: All /v1/webhooks/* endpoints

Token Security

  • Tokens are only shown once when created — store them securely
  • Tokens expire after 1 year but can be revoked at any time
  • Use environment variables to store tokens, never commit them to code
  • Create separate tokens for different applications
  • Revoke tokens immediately if they may have been compromised
  • Grant only the scopes your application needs (principle of least privilege)

Error Responses

Authentication errors return appropriate HTTP status codes:

401unauthorized

Missing or malformed Authorization header

{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid Authorization header"
  }
}
401invalid_token

Token is invalid, expired, or has been revoked

{
  "error": {
    "code": "invalid_token",
    "message": "Token is invalid, expired, or revoked"
  }
}
403insufficient_scope

Token does not have the required scope for this endpoint

{
  "error": {
    "code": "insufficient_scope",
    "message": "This endpoint requires the 'sessions:write' scope"
  }
}

API Endpoints

Quick reference for all Wave API endpoints. For request/response schemas and a built-in request builder, see the Interactive API Reference.

All endpoints require a Bearer token. Base URL: https://api.wave.co

Sessions

MethodPathScopeDescription
GET/v1/sessionssessions:readList sessions with cursor-based pagination
GET/v1/sessions/:idsessions:readGet session details (metadata, summary, notes, tags)
PATCH/v1/sessions/:idsessions:writeUpdate title, notes, tags, or favorite status
DELETE/v1/sessions/:idsessions:deletePermanently delete a session
POST/v1/sessions/searchsessions:searchSemantic search across all sessions
GET/v1/sessions/statssessions:readAggregated session statistics for a date range
POST/v1/sessions/bulksessions:readBulk export up to 50 sessions by ID

Transcripts

MethodPathScopeDescription
GET/v1/sessions/:id/transcripttranscripts:readFull transcript with optional speaker segments

Media

MethodPathScopeDescription
GET/v1/sessions/:id/mediamedia:readSigned audio/video URLs (expire after 1 hour)

Account

MethodPathScopeDescription
GET/v1/accountaccount:readUser profile, subscription status, and session count

Webhooks

Register HTTPS endpoints to receive real-time notifications when sessions are completed, updated, or deleted. Payloads are signed with HMAC-SHA256 for verification.

MethodPathScopeDescription
GET/v1/webhookswebhooks:manageList all registered webhooks
POST/v1/webhookswebhooks:manageRegister a new webhook (returns signing secret)
PATCH/v1/webhooks/:idwebhooks:manageUpdate URL, events, or active status
DELETE/v1/webhooks/:idwebhooks:manageDelete a webhook
POST/v1/webhooks/:id/rotate-secretwebhooks:manageRegenerate the signing secret
POST/v1/webhooks/:id/testwebhooks:manageSend a test event and report delivery status

Webhook Events

EventTriggered When
session.completedA new session finishes processing
session.updatedSession metadata is updated via the API
session.deletedA session is deleted via the API

Signature Verification

Each delivery includes these headers for verification:

HeaderDescription
X-Wave-Webhook-IdUnique event ID
X-Wave-Webhook-TimestampUnix timestamp of the delivery
X-Wave-Webhook-SignatureHMAC-SHA256 signature

To verify: compute HMAC-SHA256(secret, "webhookId.timestamp.body") and compare with the signature header.

Error Codes

All errors return a consistent JSON structure:

{
  "error": {
    "code": "error_code",
    "message": "Human-readable description"
  }
}
CodeStatusDescription
invalid_request400Missing or invalid parameters
unauthorized401Missing or invalid Authorization header
invalid_token401Token is invalid, expired, or revoked
insufficient_scope403Token lacks required permission
not_found404Resource not found
limit_exceeded400Resource limit reached (e.g. max webhooks)
rate_limit_exceeded429Too many requests
internal_error500Server error

Rate Limits

  • 60 requests per minute per token
  • 1,000 requests per day per token

Rate limit info is included in every response:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1706000000

API Reference

The full OpenAPI 3.1 specification is available at:

https://api.wave.co/v1/openapi.json

Use it to generate client libraries, import into Postman, or validate requests.

Want to try these endpoints? Open the Interactive API Reference for a built-in request builder with live responses.