> ## 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 Proposal Item Suppliers

> GET /public/proposals/{ProposalId}/items/{ProposalItemId}/suppliers — Lists the suppliers available for a proposal item, with costs and the one currently assigned.

Lists every supplier the item's catalog item can be bought from, with each supplier's cost. Call it before [set item supplier](/api-reference/proposals/items/set-item-supplier) to get the `id` that endpoint needs.

The entry with `isDefault: true` is the supplier the item currently uses — this is also how you confirm a supplier change, since the item itself only carries the supplier's display name. For that entry, `cost.value` and `cost.lastVerifiedDate` carry the proposal item's own values, including any cost written with [update cost](/api-reference/proposals/items/update-item-cost); for the others they are the supplier's catalog values. When the item has no supplier assigned, no entry is marked default.

This endpoint always returns costs, even when the `cost` field on the item itself comes back `null` for the same credentials.

`Labor`, `CustomItem`, and `Fee` items have no catalog item behind them, so the list comes back empty rather than `404`.

<Snippet file="hmac-signing.mdx" />


## OpenAPI

````yaml GET /public/proposals/{ProposalId}/items/{ProposalItemId}/suppliers
openapi: 3.1.1
info:
  title: Portal.io Public API
  version: '1.0'
servers:
  - url: https://sandbox.api.portal.io/
security:
  - mssApiAppId: []
    mssApiUserKey: []
    mssCustomDate: []
    mssSignature: []
paths:
  /public/proposals/{ProposalId}/items/{ProposalItemId}/suppliers:
    get:
      tags:
        - Proposals/Item
      summary: List Proposal Item Suppliers
      description: >-
        Lists every supplier available for the item's catalog item, with their
        cost details. The entry whose isDefault is true is the supplier the item
        currently uses, and both its cost and lastVerifiedDate carry the item's
        own values rather than the catalog ones; no entry is marked default when
        the item has no supplier assigned. The list is empty for Labor,
        CustomItem, and Fee items.
      operationId: getPublicProposalsByProposalIdItemsByProposalItemIdSuppliers
      parameters:
        - name: ProposalId
          in: path
          description: Unique ID of the proposal (not the proposal number).
          required: true
          schema:
            type: integer
            format: int32
            x-default: 11538
        - name: ProposalItemId
          in: path
          description: >-
            Unique ID of the proposal item to list available suppliers for. Must
            belong to the proposal.
          required: true
          schema:
            type: integer
            format: int32
            x-default: 92853
        - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                title: ListOfPublicSupplierInfoModel
                type: array
                items:
                  $ref: '#/components/schemas/PublicSupplierInfoModel'
              example:
                - id: 81376
                  name: Sonos Inc.
                  cost:
                    isPromo: false
                    lastVerifiedDate: '2030-09-04T00:22:19Z'
                    unitOfMeasure: Each
                    discountPercentage: 21.42
                    regularValue: 19.64
                    isCustom: false
                    futurePrice:
                      value: 550.5
                      effectiveDate: '2031-03-19T00:22:19Z'
                      lastModifiedDate: '2031-02-06T00:22:19Z'
                      isInUse: false
                    value: 550.5
                    lastModifiedDate: '2031-02-06T00:22:19Z'
                    modifiedBy: Jane Smith
                    currency:
                      code: USD
                      symbol: $
                  isDefault: false
                  sku: SON-AMP-BLK
                  isInStock: false
                  isDiscontinued: false
                  status: Activated
                  createdDate: '2030-08-21T00:22:19Z'
                  accountNumber: '104582'
        '401':
          description: >-
            Not Authorized. Ensure a valid session cookie or HMAC authentication
            headers are provided.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                responseStatus:
                  errorCode: Unauthorized
                  message: >-
                    Not Authorized. Ensure a valid session cookie or HMAC
                    authentication headers are provided.
        '402':
          description: >-
            The dealer's subscription is inactive or expired. An active
            subscription is required to use this endpoint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                responseStatus:
                  errorCode: PaymentRequired
                  message: >-
                    The dealer's subscription is inactive or expired. An active
                    subscription is required to use this endpoint.
        '403':
          description: You do not have permission for this action.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                responseStatus:
                  errorCode: Forbidden
                  message: You do not have permission for this action.
        '404':
          description: Proposal or proposal item not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                responseStatus:
                  errorCode: NotFound
                  message: Proposal or proposal item not found.
components:
  parameters:
    Accept:
      name: Accept
      in: header
      description: Accept Header
      required: true
      schema:
        enum:
          - application/json
        type: string
  schemas:
    PublicSupplierInfoModel:
      title: PublicSupplierInfoModel
      required:
        - id
        - name
        - isDefault
        - isInStock
        - isDiscontinued
        - createdDate
      type: object
      properties:
        id:
          type: integer
          description: Identifier of the supplier
          format: int32
        name:
          type: string
          description: Supplier display name
        cost:
          $ref: '#/components/schemas/PublicCostModel'
        isDefault:
          type: boolean
          description: Whether the supplier is the default one
        sku:
          type: string
          description: SKU the supplier uses for the item
        isInStock:
          type: boolean
          description: Whether the supplier reports the item as in stock
        isDiscontinued:
          type: boolean
          description: Whether the item is marked discontinued for the supplier
        status:
          $ref: '#/components/schemas/ManagingPriceStatuses'
        createdDate:
          type: string
          description: UTC timestamp when this supplier information was created
          format: date-time
        accountNumber:
          type: string
          description: Account number your company uses with the supplier
      description: Supplier-specific catalog item information
    ErrorResponse:
      title: ErrorResponse
      type: object
      properties:
        responseStatus:
          $ref: '#/components/schemas/ResponseStatus'
      description: ErrorResponse
    PublicCostModel:
      title: PublicCostModel
      required:
        - isPromo
        - isCustom
        - lastModifiedDate
      type: object
      allOf:
        - $ref: '#/components/schemas/PublicPriceModel'
      properties:
        isPromo:
          type: boolean
          description: Whether the current supplier cost is a promotional price.
        lastVerifiedDate:
          type: string
          description: UTC timestamp when the supplier price was last verified.
          format: date-time
        unitOfMeasure:
          type: string
          description: Unit of measure for the supplier price.
        discountPercentage:
          type: number
          description: Supplier discount percentage when applicable.
          format: double
        regularValue:
          type: number
          description: Regular or non-custom price value when available.
          format: double
        isCustom:
          type: boolean
          description: Whether the current value is a custom override.
        futurePrice:
          $ref: '#/components/schemas/PublicFuturePrice'
        value:
          type: number
          description: Current numeric value of the price.
          format: double
        lastModifiedDate:
          type: string
          description: UTC timestamp when this price was last modified.
          format: date-time
        modifiedBy:
          type: string
          description: Display name of the user or process that last modified this price.
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: Supplier cost information used by public catalog responses.
    ManagingPriceStatuses:
      enum:
        - None
        - Pending
        - RequireSecondAuthorization
        - Activated
        - BlockedBrand
        - Blocked
      type: string
    ResponseStatus:
      title: ResponseStatus
      type: object
      properties:
        errorCode:
          type:
            - 'null'
            - string
        message:
          type:
            - 'null'
            - string
        stackTrace:
          type:
            - 'null'
            - string
        errors:
          type:
            - 'null'
            - array
          items:
            $ref: '#/components/schemas/ResponseError'
        meta:
          title: DictionaryOfStringAndString
          type:
            - 'null'
            - object
          additionalProperties:
            type:
              - 'null'
              - string
      description: ResponseStatus
    PublicPriceModel:
      title: PublicPriceModel
      required:
        - isCustom
        - lastModifiedDate
      type: object
      allOf:
        - $ref: '#/components/schemas/PublicBasicPriceModel'
      properties:
        regularValue:
          type: number
          description: Regular or non-custom price value when available.
          format: double
        isCustom:
          type: boolean
          description: Whether the current value is a custom override.
        futurePrice:
          $ref: '#/components/schemas/PublicFuturePrice'
        value:
          type: number
          description: Current numeric value of the price.
          format: double
        lastModifiedDate:
          type: string
          description: UTC timestamp when this price was last modified.
          format: date-time
        modifiedBy:
          type: string
          description: Display name of the user or process that last modified this price.
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: >-
        Extended public price model including regular and future price
        information.
    PublicFuturePrice:
      title: PublicFuturePrice
      required:
        - effectiveDate
        - lastModifiedDate
        - isInUse
      type: object
      properties:
        value:
          type: number
          description: Future price value.
          format: double
        effectiveDate:
          type: string
          description: UTC timestamp when the future price becomes effective.
          format: date-time
        lastModifiedDate:
          type: string
          description: UTC timestamp when the future price record was last modified.
          format: date-time
        isInUse:
          type: boolean
          description: Whether the future price is currently active.
      description: Future-dated price scheduled for a catalog item.
    PublicCurrencyModel:
      title: PublicCurrencyModel
      required:
        - code
        - symbol
      type: object
      properties:
        code:
          type: string
          description: ISO 4217 code that identifies the currency used for the amount.
        symbol:
          type: string
          description: Symbol displayed alongside monetary values in this currency.
      description: Currency code and symbol used to display money values.
    ResponseError:
      title: ResponseError
      type: object
      properties:
        errorCode:
          type:
            - 'null'
            - string
        fieldName:
          type:
            - 'null'
            - string
        message:
          type:
            - 'null'
            - string
        meta:
          title: DictionaryOfStringAndString
          type:
            - 'null'
            - object
          additionalProperties:
            type:
              - 'null'
              - string
      description: ResponseError
    PublicBasicPriceModel:
      title: PublicBasicPriceModel
      required:
        - lastModifiedDate
      type: object
      properties:
        value:
          type: number
          description: Current numeric value of the price.
          format: double
        lastModifiedDate:
          type: string
          description: UTC timestamp when this price was last modified.
          format: date-time
        modifiedBy:
          type: string
          description: Display name of the user or process that last modified this price.
        currency:
          $ref: '#/components/schemas/PublicCurrencyModel'
      description: Base pricing information used by public catalog price models.
  securitySchemes:
    mssApiAppId:
      type: apiKey
      description: >-
        Portal application identifier used as part of HMAC-authenticated API
        requests.
      name: X-MSS-API-APPID
      in: header
    mssApiUserKey:
      type: apiKey
      description: Portal user API key used together with the HMAC signature headers.
      name: X-MSS-API-USERKEY
      in: header
    mssCustomDate:
      type: apiKey
      description: >-
        Timestamp header included in the signed request to prevent replay
        attacks.
      name: X-MSS-CUSTOM-DATE
      in: header
    mssSignature:
      type: apiKey
      description: >-
        HMAC-SHA256 signature for the request, calculated over the canonical
        string defined in the authentication docs.
      name: X-MSS-SIGNATURE
      in: header

````