> ## 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 and Search Proposals

> GET /public/proposals — Returns all proposals for the account with filtering by status, contact, date, and text search. Supports sorting and pagination.

Returns the proposals belonging to the authenticated account. You can narrow results by status, contact, modified date, search text, and archive state. The response includes a flat array of proposal summaries and a total count, making this the standard starting point for most proposal workflows.

<RequestExample>
  ```bash curl theme={null}
  curl -i -X GET \
    'https://sandbox.api.portal.io/public/proposals?PageNumber=1&PageSize=25' \
    -H 'Accept: application/json' \
    -H 'X-MSS-API-APPID: YOUR_APP_ID' \
    -H 'X-MSS-API-USERKEY: YOUR_USER_KEY' \
    -H 'X-MSS-CUSTOM-DATE: Mon, 06 Apr 2026 00:22:19 GMT' \
    -H 'X-MSS-SIGNATURE: BASE64_SIGNATURE'
  ```

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

  url = "https://sandbox.api.portal.io/public/proposals?PageNumber=1&PageSize=25"
  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://sandbox.api.portal.io/public/proposals?PageNumber=1&PageSize=25";
  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>

<ResponseExample>
  ```json 200 theme={null}
  {
    "proposals": [
      {
        "id": 1042,
        "number": 1001,
        "name": "Smith Residence AV",
        "status": "Draft",
        "total": {
          "proposalTotal": 12500.00,
          "currency": {
            "code": "USD",
            "symbol": "$"
          }
        },
        "createdDate": "2026-03-10T14:00:00Z",
        "lastModifiedDate": "2026-04-01T09:30:00Z",
        "customer": {
          "id": 88,
          "firstName": "Jane",
          "lastName": "Smith",
          "companyName": "",
          "contactEmail": "jane.smith@example.com"
        }
      }
    ],
    "proposalCount": 1
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /public/proposals
openapi: 3.1.0
info:
  title: Portal.Api
  version: '1.0'
servers:
  - url: http://127.0.0.1:5000
security: []
tags: []
paths:
  /public/proposals:
    get:
      tags:
        - Proposals
      summary: Search & Get Proposal List
      description: >-
        Returns the proposals for the current account. Supports filtering by
        status, contact, modified date, search text, and archive state, along
        with sorting and pagination.
      operationId: SearchAndGetProposalList
      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: SearchText
          in: query
          description: Search proposal by this text
          required: false
          schema:
            type: string
        - name: Statuses
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - Draft
                - Submitted
                - ViewedByClient
                - Accepted
                - Declined
                - Delayed
                - Completed
                - EmailFailed
                - Expired
          style: form
        - name: ContactId
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: ModifiedAfter
          in: query
          description: Modified after timestamp in UTC
          required: false
          schema:
            type: string
            format: date-time
        - name: SortBy
          in: query
          required: false
          schema:
            type: string
            enum:
              - CreatedDate
              - ModifiedDate
              - Number
              - Name
              - ClientName
              - Status
              - LastModifiedByMe
        - name: IsArchive
          in: query
          description: >-
            If true return only archived proposals otherwise return non archive
            proposals
          required: false
          schema:
            type: boolean
        - name: SortDirection
          in: query
          required: false
          schema:
            type: string
        - name: PageNumber
          in: query
          description: Page number. Starting from 1
          required: false
          schema:
            type: integer
            format: int32
        - name: PageSize
          in: query
          description: Page Size
          required: false
          schema:
            type: integer
            format: int32
        - name: SalespersonId
          in: query
          description: Filter proposals by salesperson user ID
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicProposalListModel'
        '401':
          description: >-
            Not Authorized to access this endpoint or your HMAC hash was
            incorrect.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebServiceException'
        '402':
          description: This action requires an active subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpError'
        '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:
    PublicProposalListModel:
      title: PublicProposalListModel
      required:
        - proposals
        - proposalCount
      properties:
        proposals:
          description: Proposals returned within the current page boundaries
          type: array
          items:
            $ref: '#/components/schemas/PublicProposalModel'
        proposalCount:
          description: Total number of proposals matching the query across all pages
          type: integer
          format: int32
      description: Paginated proposal list
      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
    PublicProposalModel:
      title: PublicProposalModel
      required:
        - id
        - number
        - name
        - status
        - createdDate
        - lastModifiedDate
      properties:
        id:
          description: Unique numeric identifier of the proposal
          type: integer
          format: int32
        number:
          description: Proposal number shown to the dealer in the UI
          type: integer
          format: int32
        name:
          description: Display name of the proposal
          type: string
        status:
          description: Current proposal status
          type: string
          enum:
            - Undefined
            - Draft
            - Submitted
            - ViewedByClient
            - Accepted
            - Declined
            - Delayed
            - Completed
            - EmailFailed
            - Expired
        total:
          $ref: '#/components/schemas/PublicProposalTotalModel'
        createdDate:
          description: UTC timestamp when the proposal was created
          type: string
          format: date-time
        lastModifiedDate:
          description: >-
            UTC timestamp when the proposal was last modified by the system or a
            user
          type: string
          format: date-time
        lastModifiedByUserDate:
          description: UTC timestamp when the proposal was last modified by a user action
          type: string
          format: date-time
        customer:
          $ref: '#/components/schemas/PublicContactModel'
        salesperson:
          $ref: '#/components/schemas/PublicSalespersonModel'
      description: Proposal summary
      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
    PublicProposalTotalModel:
      title: PublicProposalTotalModel
      properties:
        proposalTotal:
          description: Total proposal amount
          type: number
          format: double
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: Proposal total amount and currency
      type: object
    PublicContactModel:
      title: PublicContactModel
      required:
        - id
        - partyType
        - contactType
      properties:
        id:
          description: Unique numeric identifier of the contact
          type: integer
          format: int32
        partyType:
          description: Contact party type such as Person or Company
          type: string
          enum:
            - Undefined
            - Person
            - Company
        contactType:
          description: Contact category type
          type: string
          enum:
            - Undefined
            - Client
            - Employee
            - Contractor
            - Other
        firstName:
          description: Contact first name
          type: string
        lastName:
          description: Contact last name
          type: string
        companyName:
          description: Company name when the contact represents a company
          type: string
        contactEmail:
          description: Primary contact email address
          type: string
        contactEmailCC:
          description: Additional email addresses copied when a proposal is submitted
          type: string
        contactPhone:
          description: Primary contact phone number
          type: string
      description: Contact summary model
      type: object
    PublicSalespersonModel:
      title: PublicSalespersonModel
      required:
        - email
        - firstName
      properties:
        id:
          description: User ID of the salesperson
          type: integer
          format: int32
        email:
          description: Salesperson email address
          type: string
        firstName:
          description: User first name
          type: string
        lastName:
          description: User last name
          type: string
      description: Salesperson summary
      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
    PublicCurrencyModel:
      title: PublicCurrencyModel
      required:
        - code
        - symbol
      properties:
        code:
          description: Currency code, for example USD.
          type: string
        symbol:
          description: Currency symbol used for display, for example $.
          type: string
      description: Currency code and symbol used to display money values.
      type: object

````