swagger: '2.0' info: title: Limitless Developer Chats Lifelogs API description: 'API for accessing lifelogs, providing transparency and portability to user data. ## Rate Limiting The API implements rate limiting to ensure fair usage and protect against abuse. - **Default Rate Limit:** 180 requests per minute per API key - **Rate Limit Response:** When exceeded, returns 429 Too Many Requests with retry information ' version: 1.0.0 host: api.limitless.ai basePath: / schemes: - https tags: - name: Lifelogs paths: /v1/lifelogs: get: operationId: getLifelogs summary: Returns a list of lifelogs. description: Returns a list of lifelogs based on specified time range or date. If a search parameter is provided, performs hybrid search across the lifelogs. Pagination is not supported when using the search parameter. parameters: - in: query name: timezone type: string description: IANA timezone specifier. If missing, UTC is used. - in: query name: date type: string format: date description: Will return all entries beginning on a date in the given timezone (YYYY-MM-DD). - in: query name: start type: string format: date-time description: Start datetime in modified ISO-8601 format (YYYY-MM-DD or YYYY-MM-DD HH:mm:SS). Timezones/offsets will be ignored. - in: query name: end type: string format: date-time description: End datetime in modified ISO-8601 format (YYYY-MM-DD or YYYY-MM-DD HH:mm:SS). Timezones/offsets will be ignored. - in: query name: cursor type: string description: Cursor for pagination to retrieve the next set of entries. Will not work when `search` parameter is provided. - in: query name: direction type: string enum: - asc - desc default: desc description: Sort direction for entries. - in: query name: includeMarkdown type: boolean default: true description: Whether to include markdown content in the response. - in: query name: includeHeadings type: boolean default: true description: Whether to include headings in the response. - in: query name: isStarred type: boolean description: Filter entries by their starred status. - in: query name: limit type: integer description: Maximum number of entries to return. Upper limit is 100. - in: query name: includeContents type: boolean default: true description: Whether to include structured contents in the response. When false, the contents array will be empty. Note that contents are automatically excluded when more than 25 results are returned, regardless of this parameter. - in: query name: search type: string description: 'Search query to perform hybrid search across lifelogs. When provided, other filtering parameters are applied as additional constraints. You cannot paginate requests when using this parameter. Upper limit of 100 results. Hybrid search is a combination of keyword search and semantic search; you can therefore send: - semantic queries, like "place bob recommended at dinner" - boolean keyword search, like "blue OR red" (While "AND" queries are supported, sending "red AND blue" is the same as sending "red blue"). ' responses: '200': description: Successful response with entries. schema: $ref: '#/definitions/LifelogsResponse' '429': description: Too Many Requests - Rate limit exceeded. schema: type: object properties: error: type: string description: Error message indicating rate limit exceeded. retryAfter: type: string description: Number of seconds to wait before retrying. tags: - Lifelogs /v1/lifelogs/{id}: get: operationId: getLifelog summary: Returns a single lifelog by ID. description: Returns a specific lifelog entry by its unique identifier. parameters: - in: path name: id type: string required: true description: Unique identifier of the lifelog to retrieve. - in: query name: timezone type: string description: IANA timezone specifier. If missing, UTC is used. - in: query name: includeMarkdown type: boolean default: true description: Whether to include markdown content in the response. - in: query name: includeHeadings type: boolean default: true description: Whether to include headings in the response. - in: query name: includeContents type: boolean default: true description: Whether to include structured contents in the response. When false, the contents array will be empty. responses: '200': description: Successful response with a single lifelog entry. schema: $ref: '#/definitions/LifelogResponse' '404': description: Lifelog entry not found. '401': description: Unauthorized - Invalid or missing API key. '429': description: Too Many Requests - Rate limit exceeded. schema: type: object properties: error: type: string description: Error message indicating rate limit exceeded. retryAfter: type: string description: Number of seconds to wait before retrying. tags: - Lifelogs delete: operationId: deleteLifelog summary: Deletes a single lifelog by ID. description: Permanently deletes a specific lifelog entry by its unique identifier. parameters: - in: path name: id type: string required: true description: Unique identifier of the lifelog to delete. responses: '200': description: Lifelog successfully deleted. schema: type: object properties: success: type: boolean description: Indicates whether the deletion was successful. '404': description: Lifelog entry not found. '401': description: Unauthorized - Invalid or missing API key. '429': description: Too Many Requests - Rate limit exceeded. schema: type: object properties: error: type: string description: Error message indicating rate limit exceeded. retryAfter: type: string description: Number of seconds to wait before retrying. tags: - Lifelogs definitions: LifelogsResponseData: type: object properties: lifelogs: type: array items: $ref: '#/definitions/Lifelog' LifelogResponseData: type: object properties: lifelog: $ref: '#/definitions/Lifelog' x-nullable: true LifelogResponse: type: object properties: data: $ref: '#/definitions/LifelogResponseData' Lifelog: type: object properties: id: type: string description: Unique identifier for the entry. title: type: string description: Title of the entry. Equal to the first heading1 node. markdown: type: string description: Raw markdown content of the entry. x-nullable: true contents: type: array items: $ref: '#/definitions/ContentNode' description: List of ContentNodes. startTime: type: string format: date-time description: ISO format in given timezone. endTime: type: string format: date-time description: ISO format in given timezone. isStarred: type: boolean description: Whether the entry is starred. Defaults to false if not explicitly starred. updatedAt: type: string format: date-time description: Last update time of the entry in ISO format in given timezone. MetaLifelogs: type: object properties: nextCursor: type: string description: Cursor for pagination to retrieve the next set of lifelogs, bound to the query parameters from the original request. When using a cursor, other query parameters are ignored. x-nullable: true count: type: integer description: Number of lifelogs in the current response. ContentNode: type: object properties: type: type: string description: Type of content node (e.g., heading1, heading2, heading3, blockquote). More types might be added. content: type: string description: Content of the node. startTime: type: string format: date-time description: ISO format in given timezone. endTime: type: string format: date-time description: ISO format in given timezone. startOffsetMs: type: integer description: Milliseconds after start of this entry. endOffsetMs: type: integer description: Milliseconds after start of this entry. children: type: array items: $ref: '#/definitions/ContentNode' description: Child content nodes. speakerName: type: string description: Speaker identifier, present for certain node types (e.g., blockquote). x-nullable: true speakerIdentifier: type: string description: Speaker identifier, when applicable. Set to "user" when the speaker has been identified as the user. enum: - user x-nullable: true Meta: type: object properties: lifelogs: $ref: '#/definitions/MetaLifelogs' LifelogsResponse: type: object properties: data: $ref: '#/definitions/LifelogsResponseData' meta: $ref: '#/definitions/Meta'