Skip to main content
The Timeless API is a REST API served over HTTPS. All requests and responses use JSON, and all endpoints require authentication. Base URL:
https://api.timeless.day/v1

Authentication

Authenticate by including your API token in the Authorization header using the Bearer scheme.
curl https://api.timeless.day/v1/meetings \
  -H "Authorization: Bearer YOUR_API_TOKEN"
You can generate API tokens from your Timeless dashboard. Tokens are 64-character hex strings. Keep them secret — treat them like passwords. If authentication fails, the API returns a 401 response:
{
  "error": {
    "code": "unauthorized",
    "message": "Authentication required"
  }
}

Errors

The API uses standard HTTP status codes. All error responses share the same structure:
{
  "error": {
    "code": "not_found",
    "message": "Resource not found"
  }
}
Validation errors include a details array identifying the invalid fields:
{
  "error": {
    "code": "bad_request",
    "message": "Request validation failed",
    "details": [
      {
        "field": "limit",
        "message": "Input should be less than or equal to 100"
      }
    ]
  }
}
StatusCodeDescription
400bad_requestInvalid request parameters or body
401unauthorizedMissing or invalid API token
403forbiddenToken is valid but lacks permission
404not_foundResource does not exist or is not accessible
429rate_limitedToo many requests
500internal_errorUnexpected server error

Rate limiting

Requests are rate limited per API token and IP address. The default limits are:
EndpointLimit
Most endpoints60 requests/minute
Webhook creation20 requests/minute
File upload10 requests/minute
Every response includes rate limit headers:
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
When you exceed the limit, the API returns 429 with a Retry-After header indicating how many seconds to wait.

Pagination

List endpoints use cursor-based pagination. Responses include:
{
  "data": [...],
  "next_cursor": "eyJjcmV...",
  "has_more": true
}
Pass cursor as a query parameter to fetch the next page. Control page size with limit (1-100, default 25).
curl "https://api.timeless.day/v1/meetings?limit=10&cursor=eyJjcmV..."  \
  -H "Authorization: Bearer YOUR_API_TOKEN"
When has_more is false, you have reached the end of the list.

Resource IDs

All resources use prefixed IDs to make them easy to identify at a glance:
ResourcePrefixExample
Meetingmtg_mtg_abc123
Roomroom_room_abc123
Documentdoc_doc_abc123
Userusr_usr_abc123
Speakerspk_spk_abc123
Webhookwhk_whk_abc123
Some endpoints support an expand query parameter that includes related resources inline instead of requiring separate requests. For example, to include documents with meetings:
curl "https://api.timeless.day/v1/meetings?expand=documents" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
When a field is expandable but not requested, it is omitted from the response entirely.