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

# Generate a Snackable Read

> Generate concise takeaways from an indexed page.

Generate a short set of takeaways from content already indexed for a page. Use
the page's canonical URL to identify the content.

<Note>
  Send URL context only. Do not send the full page body from the browser. The
  API returns `not_found` when the page is not available in the selected index.
</Note>

## Choose generation behavior

| Goal                                   | Field                                                                           |
| -------------------------------------- | ------------------------------------------------------------------------------- |
| Return between one and six takeaways   | Set `max_bullets`. The default is `3`.                                          |
| Adjust the writing style               | Set `tone` to `neutral`, `warm`, `professional`, or `concise`.                  |
| Keep existing takeaways                | Pass up to five strings in `existing_bullets`. They count toward `max_bullets`. |
| Test unpublished runtime changes       | Set `version` to `unpublished`. Production requests default to `published`.     |
| Bypass the cache and summary analytics | Set `is_private_session` to `true` or `tracking_consent` to `false`.            |

<Warning>
  In a private session, the API rewrites `existing_bullets` in the requested
  tone. In a non-private session, it preserves them and generates only the
  remaining bullets.
</Warning>

## Handle the response status

The endpoint returns HTTP `200` for each application-level result.

| Status      | Meaning                                                    |
| ----------- | ---------------------------------------------------------- |
| `ready`     | `bullets` contains the generated takeaways.                |
| `not_found` | The page is not in the selected index. `bullets` is empty. |
| `error`     | The API could not produce usable takeaways.                |

<Info>
  The legacy `POST /api/v1/quick-read` route remains compatible. Use
  `POST /api/v1/snackable-read` for new integrations.
</Info>


## OpenAPI

````yaml api-reference/openapi-latest.json POST /api/v1/snackable-read
openapi: 3.1.0
info:
  title: Webless API
  description: >-
    Reference for the latest Webless API surface. New integrations should use
    the /api/v1 endpoints.
  version: v1
servers:
  - url: https://api.webless.ai
    description: Production API
security: []
paths:
  /api/v1/snackable-read:
    post:
      tags:
        - Page content API
      summary: Generate a Snackable Read
      description: >-
        Returns concise takeaways from content already indexed for the supplied
        page URL. Send URL context, not the full page body.
      operationId: createSnackableReadV1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V1SnackableReadRequest'
            examples:
              default:
                value:
                  company: YOUR_COMPANY
                  canonical_url: https://example.com/articles/product-launch
                  page_url: https://example.com/articles/product-launch#webless
                  title: Product launch
                  version: published
                  max_bullets: 3
                  requestId: 1f7c5f74-7b9e-4a0a-9b7d-4e3e2a5e3b60
                  sessionId: a1c2d3e4-1111-2222-3333-444455556666
      responses:
        '200':
          description: Snackable Read result for the supplied page URL
          headers:
            X-Webless-Requested-Version:
              description: Runtime version requested by the client.
              schema:
                type: string
            X-Webless-Resolved-Version:
              description: Runtime version used for the response.
              schema:
                type: string
            X-Webless-Version-Fallback-Reason:
              description: Reason for a runtime version fallback, when one occurs.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1SnackableReadResponse'
              examples:
                ready:
                  value:
                    status: ready
                    bullets:
                      - The launch introduces a faster setup flow.
                      - Existing integrations remain compatible.
                      - The new experience is available to all customers.
                    source_url: https://example.com/articles/product-launch
                    title: Product launch
                    cache_status: miss
                    version: published
                    resolved_version: published
                    resolved_corpus_version: 12
                    generated_at: '2026-06-12T19:30:00+00:00'
                not_found:
                  value:
                    status: not_found
                    bullets: []
                    source_url: https://example.com/articles/product-launch
                    title: Product launch
                    cache_status: miss
                    version: published
                    resolved_version: published
                    resolved_corpus_version: 12
                    generated_at: '2026-06-12T19:30:00+00:00'
        '422':
          description: Invalid request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
components:
  schemas:
    V1SnackableReadRequest:
      type: object
      required:
        - company
        - canonical_url
      properties:
        company:
          type: string
          description: Public company or index identifier.
        canonical_url:
          type: string
          description: Canonical URL of the page to summarize.
        page_url:
          type: string
          description: >-
            Current browser URL. Optional; fragments and tracking params are
            normalized server-side.
        title:
          type: string
          description: Optional page title for display and prompt context.
        locale:
          type: string
          description: Optional locale or language hint.
        requestId:
          type: string
          description: Caller-generated request identifier.
        sessionId:
          type: string
          description: Caller-generated session identifier.
        is_private_session:
          type: boolean
          default: false
          description: When true, bypasses the cache and summary analytics logging.
        tracking_consent:
          type: boolean
          nullable: true
          description: >-
            Tracking consent for this request. Setting this to false also
            enables private-session behavior.
        model:
          type: string
          default: gpt
          description: Model alias configured for the runtime package.
        version:
          $ref: '#/components/schemas/V1RuntimeVersion'
        max_bullets:
          type: integer
          minimum: 1
          maximum: 6
          default: 3
          description: Maximum number of Snackable Read bullets to return.
        tone:
          type: string
          enum:
            - neutral
            - warm
            - professional
            - concise
          nullable: true
          description: Writing style for generated bullets.
        existing_bullets:
          type: array
          maxItems: 5
          nullable: true
          items:
            type: string
          description: >-
            Existing bullets to preserve or rewrite. These count toward
            max_bullets.
    V1SnackableReadResponse:
      type: object
      required:
        - status
        - bullets
        - cache_status
      properties:
        status:
          $ref: '#/components/schemas/V1SnackableReadStatus'
        bullets:
          type: array
          items:
            type: string
          description: Concise page takeaways. Empty when status is not_found or error.
        source_url:
          type: string
          nullable: true
          description: Normalized source URL used for lookup.
        title:
          type: string
          nullable: true
          description: Page title returned by the request or indexed content.
        cache_status:
          $ref: '#/components/schemas/V1SnackableReadCacheStatus'
        version:
          $ref: '#/components/schemas/V1RuntimeVersion'
        resolved_version:
          type: string
          nullable: true
          description: Resolved runtime pointer after fallback handling.
        resolved_corpus_version:
          type: integer
          nullable: true
          description: Resolved indexed corpus version used internally for the response.
        generated_at:
          type: string
          format: date-time
          nullable: true
          description: Server timestamp for the generated response.
    ValidationErrorResponse:
      type: object
      properties:
        detail:
          type: array
          items:
            type: object
            additionalProperties: true
    V1RuntimeVersion:
      type: string
      enum:
        - published
        - unpublished
      default: published
      description: >-
        Runtime package pointer. Omit this field or use `published` for
        production traffic. Use `unpublished` only when testing an unpublished
        runtime package.
    V1SnackableReadStatus:
      type: string
      enum:
        - ready
        - not_found
        - error
      description: Snackable Read generation status.
    V1SnackableReadCacheStatus:
      type: string
      enum:
        - hit
        - miss
        - bypass
      description: Whether the response came from cache.

````