Skip to main content

Prerequisites

  • An eligible plan — API access is available on Pro, Team, and Enterprise plans.
  • An API key — Create one in Settings → Developers → API Keys.

Creating an API Key

  1. Navigate to Settings → Developers → API Keys
  2. Click Add API Key
  3. If you’re an admin, choose the scope: Personal or Workspace (see Access & Security for the difference)
  4. Enter a name and optional description
  5. Click Create API Key
  6. Copy your key immediately — it won’t be shown again
Store your API key securely. If you lose it, you’ll need to regenerate it from the API key settings. Treat it like a password.

Authentication

Every request must include your API key in the x-api-key header. API keys start with the jk_ prefix. If the key is missing or invalid, you’ll receive a 401 Unauthorized response.

Making Requests

Both key types use the same request format:
  • Reading data uses GET with optional parameters via ?input={"json": { ... }}
  • Deleting uses POST with a JSON body
  • When no parameters are needed, just call the URL directly
The only difference is the route prefix: /v1/workspace/ for workspace keys, /v1/me/ for personal keys.

Examples

List meetings (no parameters):
List meetings with filters:
Get a specific meeting:
List open tasks:
Delete a meeting (POST):
Search meetings (personal key only):
List your tags (personal key only):
Don’t want to build requests by hand? Use the Request Builder in Settings → Developers → API Keys to visually select an endpoint, add parameters, and get a ready-to-use cURL command or URL you can copy.
Cheat sheet:
  • URL pattern: /v1/{workspace or me}/{procedure} (e.g., /v1/workspace/meetings.list)
  • Reading: GET with optional ?input={"json": {...}}
  • Deleting: POST with body {"json": {...}}
  • No parameters? Just call the URL directly

Response Format

All responses wrap data in an envelope:
Your data is inside result.data.json.

Pagination

List endpoints return paginated results. When more data is available, the response includes a nextCursor field. Pass it in your next request:
When nextCursor is null, you’ve reached the end of the results.