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

# ListActivityFeedAPI mirrors erdo_list_activity_feed: the unified, ranked,


> read-only feed (attention items, approvals, workstream events, catalog updates, urgent cause-clusters). Query params carry limit/offset/categories/ scope. Responding to an item routes through /v1/attention/:id/respond and /v1/approvals/:id/decide — this endpoint is a view only. Omit categories for the attention-first default; catalog and execution history are opt-in.




## OpenAPI

````yaml /api/openapi.json get /v1/activity/feed
openapi: 3.0.0
info:
  title: Erdo API
  description: >-
    Erdo's REST API: query and write datasets, run agents, manage threads,
    integrations, pages, evals, workstreams, and experiments. Authenticate with
    a Bearer API key (erdo_api_...) or scoped token (erdo_token_...).
  version: '2026-07-25'
servers:
  - url: https://api.erdo.ai
    description: Production
security:
  - bearerAuth: []
paths:
  /v1/activity/feed:
    get:
      summary: >
        ListActivityFeedAPI mirrors erdo_list_activity_feed: the unified,
        ranked,
      description: >
        read-only feed (attention items, approvals, workstream events, catalog
        updates, urgent cause-clusters). Query params carry
        limit/offset/categories/ scope. Responding to an item routes through
        /v1/attention/:id/respond and /v1/approvals/:id/decide — this endpoint
        is a view only. Omit categories for the attention-first default; catalog
        and execution history are opt-in.
      operationId: GET:mcp.ListActivityFeedAPI
      parameters:
        - allowEmptyValue: true
          explode: true
          in: query
          name: limit
          required: false
          schema:
            format: int64
            type: integer
          style: form
        - allowEmptyValue: true
          explode: true
          in: query
          name: offset
          required: false
          schema:
            format: int64
            type: integer
          style: form
        - allowEmptyValue: true
          description: >
            Categories is a comma-separated subset of attention, approval,
            workstream, catalog, job, heartbeat. Empty delegates to the activity
            service's single product default (attention, approval, workstream);
            operational run and catalog history is opt-in. Attention +
            workstream sources appear only when the engine is enabled for your
            organization.
          explode: true
          in: query
          name: categories
          required: false
          schema:
            type: string
          style: form
        - allowEmptyValue: true
          description: >
            Scope is following | all (default all). API tokens are org-scoped
            and carry no per-user follow set, so following degrades to all for a
            token; it is meaningful only for a user-scoped credential that
            follows workstreams.
          explode: true
          in: query
          name: scope
          required: false
          schema:
            type: string
          style: form
        - allowEmptyValue: true
          explode: true
          in: query
          name: workstream_slug
          required: false
          schema:
            type: string
          style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  flood_summary:
                    type: string
                  items:
                    items:
                      $ref: '#/components/schemas/mcp.ActivityFeedItemV1'
                    type: array
                  total:
                    format: int64
                    type: integer
                  urgent_clusters:
                    items:
                      $ref: '#/components/schemas/types.UrgentCluster'
                    type: array
                type: object
          description: Success response
        default:
          $ref: '#/components/responses/APIError'
components:
  schemas:
    mcp.ActivityFeedItemV1:
      description: >
        external ranker needs — severity, slug, expiry — up out of the
        type-specific Metadata blob (which still rides along for the full
        payload) so a caller can render "needs you" bands and act on an item
        without re-parsing per-type JSON.
      properties:
        category:
          type: string
        clustered:
          type: boolean
        created_at:
          format: date-time
          type: string
        expires_at:
          format: date-time
          type: string
        id:
          type: string
        metadata:
          type: object
        needs_action:
          type: boolean
        severity:
          type: string
        slug:
          description: |
            POST /v1/attention/:id/respond. Empty for non-attention items.
          title: |
            Slug is the attention item's stable handle — pass it to
          type: string
        status:
          type: string
        summary:
          type: string
        thread_id:
          type: string
        title:
          type: string
        type:
          type: string
        workstream_id:
          type: string
        workstream_title:
          type: string
      title: >
        ActivityFeedItemV1 is one item in the external feed. It flattens the
        fields an
      type: object
    types.UrgentCluster:
      description: >
        workstream + kind, with a synthesized count so the operator sees the
        shape of the storm before drilling into any single alarm. No LLM:
        clustering is a group- by, the summary a format string.
      properties:
        count:
          format: int64
          title: >
            Count is how many open urgent items fall in this cluster within the
            window.
          type: integer
        item_ids:
          description: >
            reveal the members it has in the current page when the cluster is
            expanded.
          items:
            type: string
          title: >
            ItemIDs are the attention-item ids in this cluster, so the frontend
            can
          type: array
        kind:
          description: >
            items are almost always escalations, but the group-by keeps kinds
            distinct.
          title: >
            Kind is the shared attention kind (escalation | choice | digest);
            urgent
          type: string
        summary:
          title: >
            Summary is the synthesized row label, e.g. "5 escalations · Lead
            engine".
          type: string
        workstream_id:
          title: >
            WorkstreamID is the cluster's workstream ("" for standalone
            org-level items).
          type: string
        workstream_title:
          title: >
            WorkstreamTitle is denormalized for rendering; empty for standalone
            items.
          type: string
      title: |
        UrgentCluster is one deterministic grouping of a flood's urgent items by
      type: object
  responses:
    APIError:
      content:
        application/json:
          schema:
            externalDocs:
              url: https://pkg.go.dev/encore.dev/beta/errs#Error
            properties:
              code:
                description: Error code
                example: not_found
                externalDocs:
                  url: https://pkg.go.dev/encore.dev/beta/errs#ErrCode
                type: string
              details:
                description: Error details
                type: object
              message:
                description: Error message
                type: string
            title: APIError
            type: object
      description: Error response
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).

````