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

# List AI Builder Content for a Proposal

> GET /public/proposals/{ProposalId}/ai/content — Returns all AI Builder content items attached to a proposal, including processing status and metadata.

Returns all AI Builder content items (text, audio, and video uploads) attached to a proposal. Each item includes its processing status and metadata. Use this endpoint to check which content has been uploaded and whether transcription is complete before generating an outline.

<RequestExample>
  ```bash curl theme={null}
  curl -i -X GET \
    'https://api.portal.io/public/proposals/12345/ai/content' \
    -H 'Accept: application/json' \
    -H 'X-MSS-API-APPID: YOUR_API_APPID' \
    -H 'X-MSS-API-USERKEY: YOUR_API_USERKEY' \
    -H 'X-MSS-CUSTOM-DATE: Thu, 17 Apr 2026 12:00:00 GMT' \
    -H 'X-MSS-SIGNATURE: Base64EncodedHMACSHA256Signature'
  ```

  ```python python theme={null}
  import requests
  from portal_auth import sign_request  # See authentication guide

  url = "https://api.portal.io/public/proposals/12345/ai/content"
  timestamp = "Mon, 06 Apr 2026 00:22:19 GMT"
  signature = sign_request("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY")

  response = requests.get(url, headers={
      "Accept": "application/json",
      "X-MSS-API-APPID": "YOUR_APP_ID",
      "X-MSS-API-USERKEY": "YOUR_USER_KEY",
      "X-MSS-CUSTOM-DATE": timestamp,
      "X-MSS-SIGNATURE": signature
  })
  print(response.json())
  ```

  ```javascript node.js theme={null}
  const { signRequest } = require('./portalAuth'); // See authentication guide

  const url = "https://api.portal.io/public/proposals/12345/ai/content";
  const timestamp = new Date().toUTCString();
  const signature = signRequest("GET", url, "", timestamp, "YOUR_USER_KEY", "YOUR_SECRET_KEY");

  const response = await fetch(url, {
      headers: {
          "Accept": "application/json",
          "X-MSS-API-APPID": "YOUR_APP_ID",
          "X-MSS-API-USERKEY": "YOUR_USER_KEY",
          "X-MSS-CUSTOM-DATE": timestamp,
          "X-MSS-SIGNATURE": signature
      }
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

```json Response theme={null}
{
  "items": [
    {
      "id": 42,
      "name": "Project Discovery Call",
      "summary": "Client discussed requirements for a new e-commerce platform...",
      "status": "Transcribed",
      "sourceType": "Audio",
      "createdDate": "2026-04-10T09:30:00Z",
      "userCreated": {
        "id": 7,
        "firstName": "Jane",
        "lastName": "Smith",
        "email": "jane.smith@example.com"
      }
    }
  ]
}
```


## OpenAPI

````yaml GET /public/api/proposals/{ProposalId}/ai/content
openapi: 3.1.0
info:
  title: Portal.Api
  version: '1.0'
servers:
  - url: http://127.0.0.1:5000
security: []
tags: []
paths:
  /public/api/proposals/{ProposalId}/ai/content:
    get:
      tags:
        - Proposal AI Builder
      summary: Get AI Builder Content List
      description: >-
        Returns all AI Builder content items (text, audio, video uploads)
        attached to a proposal, including their processing status and metadata.
        Use this to check which content has been uploaded and whether
        transcription is complete before generating an outline.
      operationId: GetAiProposalContentList
      parameters:
        - $ref: '#/components/parameters/Accept'
        - name: X-MSS-API-APPID
          in: header
          description: Application Id
          required: true
          schema:
            type: string
        - name: X-MSS-CUSTOM-DATE
          in: header
          description: A date timestamp of the request
          required: true
          schema:
            type: string
        - name: X-MSS-SIGNATURE
          in: header
          description: A signature for the request
          required: true
          schema:
            type: string
        - name: X-MSS-API-USERKEY
          in: header
          description: User API Key
          required: true
          schema:
            type: string
        - name: ProposalId
          in: path
          description: >-
            Unique identifier of the proposal whose AI Builder content items
            should be retrieved. Must be a proposal owned by the authenticated
            account.
          required: true
          x-nullable: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicAiProposalContentListResponse'
        '401':
          description: >-
            Not Authorized to access this endpoint or your HMAC hash was
            incorrect.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebServiceException'
        '403':
          description: You do not have permission for this API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpError'
      deprecated: false
      x-codeSamples: []
components:
  parameters:
    Accept:
      name: Accept
      in: header
      description: Accept Header
      required: true
      schema:
        type: string
        enum:
          - application/json
  schemas:
    PublicAiProposalContentListResponse:
      title: PublicAiProposalContentListResponse
      required:
        - items
      properties:
        items:
          description: >-
            List of AI Builder content items attached to the proposal, ordered
            by CreatedDate ascending. Empty if no content has been uploaded.
          type: array
          items:
            $ref: '#/components/schemas/PublicAiProposalContentItemModel'
      description: PublicAiProposalContentListResponse
      type: object
    WebServiceException:
      title: WebServiceException
      properties:
        statusCode:
          type: integer
          format: int32
        statusDescription:
          type: string
        responseHeaders:
          $ref: '#/components/schemas/WebHeaderCollection'
        responseDto:
          $ref: '#/components/schemas/Object'
        responseBody:
          type: string
        message:
          type: string
        errorCode:
          type: string
        errorMessage:
          type: string
        serverStackTrace:
          type: string
        state:
          $ref: '#/components/schemas/Object'
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
        targetSite:
          $ref: '#/components/schemas/MethodBase'
        data:
          $ref: '#/components/schemas/IDictionary'
        innerException:
          $ref: '#/components/schemas/Exception'
        helpLink:
          type: string
        source:
          type: string
        hResult:
          type: integer
          format: int32
        stackTrace:
          type: string
      description: WebServiceException
      type: object
    HttpError:
      title: HttpError
      properties:
        errorCode:
          type: string
        stackTrace:
          type: string
        contentType:
          type: string
        headers:
          $ref: '#/components/schemas/Dictionary_String_String_'
        cookies:
          type: array
          items:
            $ref: '#/components/schemas/Cookie'
        status:
          type: integer
          format: int32
        statusCode:
          type: string
        statusDescription:
          type: string
        response:
          $ref: '#/components/schemas/Object'
        responseFilter:
          $ref: '#/components/schemas/IContentTypeWriter'
        requestContext:
          $ref: '#/components/schemas/IRequest'
        paddingLength:
          type: integer
          format: int32
        resultScope:
          $ref: '#/components/schemas/Func_IDisposable_'
        options:
          $ref: '#/components/schemas/IDictionary_String_String_'
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
        targetSite:
          $ref: '#/components/schemas/MethodBase'
        message:
          type: string
        data:
          $ref: '#/components/schemas/IDictionary'
        innerException:
          $ref: '#/components/schemas/Exception'
        helpLink:
          type: string
        source:
          type: string
        hResult:
          type: integer
          format: int32
      description: HttpError
      type: object
    PublicAiProposalContentItemModel:
      title: PublicAiProposalContentItemModel
      required:
        - id
        - name
        - status
        - sourceType
        - createdDate
        - userCreated
      properties:
        id:
          description: >-
            Unique identifier of the content item. Use this ID when deleting
            content via DELETE
            /public/api/proposals/{ProposalId}/ai/content/{ContentId}.
          type: integer
          format: int32
        name:
          description: >-
            Original file name of the uploaded content (e.g. 'site-survey.pdf',
            'client-call.mp3').
          type: string
        summary:
          description: >-
            AI-generated summary of the content after transcription is complete.
            Null while the content is still being processed or if transcription
            failed.
          type: string
        status:
          description: >-
            Current processing status of the content item. Possible values:
            Uploaded (0) - file received, pending processing; Processing (1) -
            transcription in progress; Transcribed (2) - transcription complete,
            content is ready for outline generation; Invalid (3) - processing
            failed, content cannot be used.
          type: string
        sourceType:
          description: >-
            Media type of the uploaded source file. Possible values: Text
            (documents such as PDF, TXT), Audio (MP3, WAV, AAC, etc.), Video
            (MP4, AVI, MOV, etc.).
          type: string
        createdDate:
          description: >-
            UTC timestamp indicating when the content item was originally
            uploaded.
          type: string
          format: date-time
        userCreated:
          $ref: '#/components/schemas/SimpleUserModel'
      description: PublicAiProposalContentItemModel
      type: object
    WebHeaderCollection:
      title: WebHeaderCollection
      properties: {}
      description: WebHeaderCollection
      type: object
    Object:
      properties: {}
      description: Object
      type: object
    ResponseStatus:
      title: ResponseStatus
      properties:
        errorCode:
          type: string
        message:
          type: string
        stackTrace:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ResponseError'
        meta:
          $ref: '#/components/schemas/Dictionary_String_String_'
      description: ResponseStatus
      type: object
    MethodBase:
      title: MethodBase
      properties: {}
      description: MethodBase
      type: object
    IDictionary:
      title: IDictionary
      properties: {}
      description: IDictionary
      type: object
    Exception:
      title: Exception
      properties: {}
      description: Exception
      type: object
    Dictionary_String_String_:
      title: Dictionary<String,String>
      additionalProperties:
        type: string
      description: Dictionary<String,String>
      type: object
    Cookie:
      title: Cookie
      properties: {}
      description: Cookie
      type: object
    IContentTypeWriter:
      title: IContentTypeWriter
      properties: {}
      description: IContentTypeWriter
      type: object
    IRequest:
      title: IRequest
      properties: {}
      description: IRequest
      type: object
    Func_IDisposable_:
      title: Func`1
      properties: {}
      description: Func<IDisposable>
      type: object
    IDictionary_String_String_:
      title: IDictionary<String,String>
      additionalProperties:
        type: string
      description: IDictionary<String,String>
      type: object
    SimpleUserModel:
      title: SimpleUserModel
      required:
        - id
      properties:
        id:
          type: integer
          format: int32
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
      description: SimpleUserModel
      type: object
    ResponseError:
      title: ResponseError
      properties:
        errorCode:
          type: string
        fieldName:
          type: string
        message:
          type: string
        meta:
          $ref: '#/components/schemas/Dictionary_String_String_'
      description: ResponseError
      type: object

````