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

# Generate an AI Description

> Generate an AI one-liner description for a file and persist it.

Uses the filename as the primary signal. If the filename is generic or
short (≤ 8 chars stem, or matches common placeholder patterns), downloads
the file from S3 and extracts text (PDF via pypdf, plain-text verbatim)
to give the LLM richer context.

Generates a one-line description and persists it to `description`. Uses the filename as the primary signal; if the filename looks generic or is too short (an 8-character-or-shorter stem, or matches patterns like `document`, `scan`, `untitled`, `copy`, `temp`), it also downloads the object from S3 and extracts a text preview (PDF via `pypdf`, plain text verbatim, both capped) to give the model more context. Requires AI to be configured on this deployment.

The saved description is the only thing this call caches back to the `files` row — there's no stored "extracted text" field otherwise; the S3 read that feeds this happens live, on demand.

### Auth

Requires a CRM manage [scope](/authentication#scopes) and an active organization on the token. Any `*:manage` scope qualifies — in practice `contacts:manage`, `deals:manage`, `companies:manage`, or `activities:manage`.

### Response

| Field         | Type     | Description                                    |
| ------------- | -------- | ---------------------------------------------- |
| `description` | `string` | The generated (and already-saved) description. |

This response does **not** include the rest of the file row — re-fetch via [List Files](/api-reference/files/list-files) if you need it.

### Errors

| Status                    | Cause                                                      |
| ------------------------- | ---------------------------------------------------------- |
| `404 Not Found`           | File doesn't exist (or isn't in this org, or is archived). |
| `503 Service Unavailable` | AI isn't configured on this deployment.                    |


## OpenAPI

````yaml POST /files/{file_id}/generate-description
openapi: 3.1.0
info:
  title: anycrm-api
  version: 0.0.1
servers: []
security: []
tags:
  - name: Customer Intelligence
    description: >-
      Company research and ICP-fit scoring — create a research run, track its
      progress, and read back scored companies as leads.
  - name: Outreach
    description: >-
      The cold-email management console — domains, mailboxes, and campaigns — as
      a thin control plane over the SalesForge stack.
  - name: AnyCard
    description: >-
      Authenticated CRUD for AnyCard, the org's digital business-card /
      lead-capture product.
  - name: AnyCard Events
    description: >-
      Event-attribution analytics for AnyCard — which captured leads converted,
      broken down by source, owner, and deal.
  - name: AnyCard Share Links
    description: >-
      Unauthenticated endpoints reached by anyone who scans a QR code or opens a
      shared AnyCard link.
  - name: AI
    description: >-
      A streaming (SSE) AI chat endpoint with account-commit actions it can take
      on the caller's behalf.
  - name: Analytics Assistant
    description: >-
      The natural-language analytics assistant — a guarded text-to-SQL loop
      (SSE) that answers ad-hoc questions over the org's CRM data as a
      least-privilege, read-only database role.
  - name: Account Readiness
    description: >-
      Account Readiness Profiles — AI-scored signals on whether an account is
      ready for outreach or expansion, computed via a Temporal workflow.
  - name: Integrations
    description: >-
      Pipedream Connect — issuing connect tokens and managing the org's
      connected third-party accounts.
  - name: Feedback
    description: >-
      User-submitted platform feedback (bug reports, feature requests) — global,
      not scoped to one organization.
  - name: Public Media
    description: >-
      Unauthenticated image reads for publicly-embeddable assets (card photos,
      inline email images) — allowlisted by key shape; everything else in the
      storage bucket stays private.
  - name: Service Health
    description: Service liveness.
paths:
  /files/{file_id}/generate-description:
    post:
      tags:
        - Files
      summary: Generate File Description
      description: >-
        Generate an AI one-liner description for a file and persist it.


        Uses the filename as the primary signal. If the filename is generic or

        short (≤ 8 chars stem, or matches common placeholder patterns),
        downloads

        the file from S3 and extracts text (PDF via pypdf, plain-text verbatim)

        to give the LLM richer context.
      operationId: generate_file_description_files__file_id__generate_description_post
      parameters:
        - name: file_id
          in: path
          required: true
          schema:
            type: string
            description: UUID of the file to generate an AI description for.
            title: File Id
          description: UUID of the file to generate an AI description for.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: >-
                  Response Generate File Description Files  File Id  Generate
                  Description Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````