> ## Documentation Index
> Fetch the complete documentation index at: https://guide.mylifenote.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List journal entries

> Lists the user's non-deleted journal entries, newest first (ordered by entry date, then entry time, both descending). Pagination is offset-based; there is no cursor, total count or `has_more` flag. To poll for new entries, request `limit=100` (or fewer) with a recent `since` and de-duplicate on `id`. Entry HTML is stripped to plain text.



## OpenAPI

````yaml /api-reference/openapi.json get /entries
openapi: 3.1.0
info:
  title: Life Note Agent API
  version: 1.0.0
  description: >-
    Read-only HTTP API for connecting AI agents and automation tools (such as
    Zapier) to a user's Life Note account. Authenticate with OAuth 2.0
    authorization code + PKCE (S256) and send the access token as
    `Authorization: Bearer <access_token>`. Journal content is decrypted
    server-side and returned only to the authorizing user's own token.
servers:
  - url: https://mylifenote.ai/api/agent/v1
    description: Production
security: []
tags:
  - name: OAuth
    description: Authorization and token exchange
  - name: Account
  - name: Journal
paths:
  /entries:
    get:
      tags:
        - Journal
      summary: List journal entries
      description: >-
        Lists the user's non-deleted journal entries, newest first (ordered by
        entry date, then entry time, both descending). Pagination is
        offset-based; there is no cursor, total count or `has_more` flag. To
        poll for new entries, request `limit=100` (or fewer) with a recent
        `since` and de-duplicate on `id`. Entry HTML is stripped to plain text.
      operationId: listEntries
      parameters:
        - name: since
          in: query
          required: false
          description: >-
            Lower date bound, inclusive, compared against the entry date at day
            granularity. Accepts a relative form `<N>d` (for example `7d`,
            `30d`, computed from the current UTC date), a date `YYYY-MM-DD`, or
            an ISO 8601 datetime (the time part is discarded). An unparseable
            value is silently ignored (no error, no filter).
          schema:
            type: string
          example: 7d
        - name: limit
          in: query
          required: false
          description: >-
            Page size. Default 20. Values outside 1-100 are clamped, not
            rejected.
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
        - name: offset
          in: query
          required: false
          description: >-
            Number of entries to skip. Default 0. Negative values are clamped to
            0.
          schema:
            type: integer
            default: 0
            minimum: 0
      responses:
        '200':
          description: A page of entries.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntryList'
              example:
                entries:
                  - id: 10452
                    date: '2026-10-21'
                    time: '08:14:09'
                    emoji: 🌿
                    content: >-
                      Slow morning. Walked before work and noticed how much
                      lighter I felt.
                    preview: >-
                      Slow morning. Walked before work and noticed how much
                      lighter I felt.
                count: 1
                limit: 20
                offset: 0
                since: '2026-10-14'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/InsufficientScope'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - oauth2:
            - journal:read
components:
  schemas:
    EntryList:
      type: object
      properties:
        entries:
          type: array
          items:
            $ref: '#/components/schemas/Entry'
        count:
          type: integer
          description: Entries in this page.
        limit:
          type: integer
          description: Effective (clamped) limit.
        offset:
          type: integer
          description: Effective offset.
        since:
          type:
            - string
            - 'null'
          description: Normalized YYYY-MM-DD filter applied, or null.
    Entry:
      type: object
      properties:
        id:
          type: integer
          description: Stable entry id. Use for de-duplication.
        date:
          type: string
          description: Entry date, YYYY-MM-DD.
          example: '2026-10-21'
        time:
          type:
            - string
            - 'null'
          description: Entry time as stored, typically HH:MM:SS.
          example: '08:14:09'
        emoji:
          type:
            - string
            - 'null'
        content:
          type:
            - string
            - 'null'
          description: >-
            Full entry as plain text (HTML stripped). `null` if empty or it
            could not be decrypted.
        preview:
          type:
            - string
            - 'null'
          description: >-
            Plain text truncated to 160 characters with a trailing `…` when
            longer; `null` when content is null.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Machine-readable code.
        detail:
          type: string
          description: Human-readable detail; not always present.
  responses:
    BadRequest:
      description: Invalid parameter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: invalid_request
            detail: limit/offset must be int
    Unauthorized:
      description: >-
        Missing, malformed, expired or revoked access token. The response
        carries a `WWW-Authenticate: Bearer realm="lifenote",
        resource_metadata="https://mylifenote.ai/.well-known/oauth-protected-resource"`
        header (plus `error="invalid_token"` when a token was sent but
        rejected).
      headers:
        WWW-Authenticate:
          schema:
            type: string
          description: Bearer challenge with a pointer to the protected-resource metadata.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missing:
              summary: No Authorization header
              value:
                error: missing_token
            invalid:
              summary: Bad, expired or revoked token
              value:
                error: invalid_token
    InsufficientScope:
      description: The token is valid but lacks the required scope.
      content:
        application/json:
          schema:
            type: object
            required:
              - error
              - granted
            properties:
              error:
                type: string
                enum:
                  - insufficient_scope
              required:
                type: array
                items:
                  type: string
                description: Scopes that were all required. Not present on `/search`.
              required_any_of:
                type: array
                items:
                  type: string
                description: '`/search` only: at least one of these is required.'
              granted:
                type: array
                items:
                  type: string
          example:
            error: insufficient_scope
            required:
              - journal:read
            granted:
              - chat:read
    RateLimited:
      description: >-
        A rate limit was exceeded. No `Retry-After` header is sent. `reason` is
        one of: `per-token per-minute limit exceeded`, `per-token daily limit
        exceeded`, `per-ip per-minute limit exceeded`, `per-user daily limit
        exceeded`.
      content:
        application/json:
          schema:
            type: object
            required:
              - error
              - reason
            properties:
              error:
                type: string
                enum:
                  - rate_limited
              reason:
                type: string
          example:
            error: rate_limited
            reason: per-token per-minute limit exceeded
  securitySchemes:
    oauth2:
      type: oauth2
      description: >-
        OAuth 2.0 authorization code with mandatory PKCE (S256). Public clients;
        no client secret. Send the access token as `Authorization: Bearer
        <access_token>`.
      flows:
        authorizationCode:
          authorizationUrl: https://mylifenote.ai/api/agent/v1/oauth/authorize
          tokenUrl: https://mylifenote.ai/api/agent/v1/oauth/token
          refreshUrl: https://mylifenote.ai/api/agent/v1/oauth/token
          scopes:
            journal:read: Read journal entries and mentor responses, and search them
            chat:read: Read mentor chat conversations and search chat messages

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.