---
title: "Retrieve proposal categories"
method: GET
path: "/odata/proposals({proposalId})/Service.Categories()"
tags: ["Proposals"]
---

# Retrieve proposal categories

`GET /odata/proposals({proposalId})/Service.Categories()`

## Request

- Base URL: `https://sb2api.servicechannel.com/v3`
- URL: `https://sb2api.servicechannel.com/v3/odata/proposals({proposalId})/Service.Categories()`
- Auth: OAuth 2
  - Authorization code: `https://sb2login.servicechannel.com/oauth/authorize`
  - Token URL: `https://sb2login.servicechannel.com/oauth/token`
- TypeScript: <https://skmtc.dev/servicechannel/apis/servicechannel-api-v-3/docs/odata/proposals(:proposalId)/Service.Categories()/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns proposal categories for the specified proposal ID.
            <br />***Note:*** A proposal category represents a specific section in the proposal form. It can contain proposal costs information, for example, materials, installation labor, freight, etc.; or it can hold a question with answers configured for the proposal form.
            <br />Supports filtering and sorting in the response.
             • **$expand:** Not supported for this method.
             • **$select:** Not supported for this method.
             • **$filter:** Filter a collection of resources addressed by a request URL. For example, you can filter the proposal data to return only material costs **Name eq 'Materials'**. 
             • **$orderby:** Order proposal categories by the specified property in the response. For example, you can order by name in ascending order **Name asc** or in descending order **Name desc**.
             • **$top:** Return the specified number of proposal categories in the response.
             • **$skip:** Skip the specified number of proposal categories in the response.
             • **$count:** Include the count of the proposal categories in the response.

## Path parameters

- `proposalId` integer, required

## Query parameters

- `$expand` string
- `$select` string
- `$filter` string
- `$orderby` string
- `$top` integer
- `$skip` integer
- `$count` boolean

## Response `200`

Proposal categories are in the response.

- ServiceChannelServicesMessagingProposalsProposalCategory[]
  - `IsLocked` boolean: Controls the visibility of the category section, for example, *Materials*, *Installation Labor*, in the proposal form. Possible values: • `true`: The section (category) is hidden from the user interface. • `false`: The section (category) is visible in the user interface.
  - `DefaultHideDetails` boolean: Determines whether the category displays a standard template or extended rows. Possible values: • `true`: Shows the default template without additional rows. • `false`: Displays extended rows based on the template configuration.
  - `Description` string: No longer in use.
  - `IsActive` boolean: Shows whether the category is active.
  - `SortOrder` integer: Predefined order of appearance for a category.
  - `Columns` ServiceChannelServicesMessagingProposalsProposalCategoryColumn[]
    - `DataField` string: Database field associated with the column header in the proposal form.
    - `DataType` string: Data type, for example, `string`, `integer`, `double`.
    - `IsDescriptionColumn` boolean: Points to the description column in the proposal form.
    - `IsMarkUpColumn` boolean: Shows whether the column accepts the material markup percentage. Available with the *ProposalMaterialMarkup* feature flag.
    - `IsUserReservedColumn` boolean: Defines whether the column is used for user-specific input.
    - `Name` string: Title of the column header in the proposal form.
    - `Description` string: No longer in use.
    - `IsActive` boolean: Shows whether the column is active.
    - `SortOrder` integer: Order of appearance for column headers in the proposal form.
  - `Rows` ServiceChannelServicesMessagingProposalsProposalCategoryRow[]
    - `Required` boolean: Defines whether the data entry is mandatory.
    - `HideDetails` boolean: Controls whether only the total row is displayed for the proposal cost type in the proposal form. • When it returns `true` and the template contains more than one column, only the total row is shown. Other details are hidden. • When it returns `false`, cost type details are not hidden.
    - `TotalCost` number, double: Total cost for all the units of the specified type.
    - `ServiceType` string: Similar to the `FeesType` parameter; specifies the type of service for Excel reporting purposes.
    - `Name` string: Description of the proposal charge type.
    - `Description` string: No longer in use.
    - `IsActive` boolean: Shows whether the data is active.
    - `SortOrder` integer: Order of appearance.
    - `Quantity1` number, double: Quantity of units.
    - `Quantity2` integer: An auxiliary quantity field used in multi-column templates. Enables extended cost calculations such as: Total = Quantity1 × Quantity2 × UnitCost. If `Quantity2` is missing, a default value of 1 is used.
    - `UnitCost` number, double: Cost of a single unit.
    - `UnitOfMeasure` string: Unit of measure: each, sq. ft, feet, linear feet, etc.
    - `ExtendedCost` number, double: Represents the sum of individual row costs. Calculated per row and aggregated into the category total.
    - `Craft` string: Craft information.
    - `RepairCategory` string: Repair category.
    - `RepairType` string: Type of repair work.
    - `MaterialThickness` string: Material thickness.
    - `Markup` number, double: Material markup percentage. Available on the proposal behind the *ProposalMaterialMarkup* feature flag.
    - `PriceList` string: Negotiated price list. Learn more in [SCU](https://servicechannel.atlassian.net/wiki/spaces/SCU/pages/2856484865/Negotiated+Price+Lists).
    - `PartNumber` string: Part number as specified in the negotiated price list.
    - `PartName` string: Part name as specified in the negotiated price list.
    - `VAT` string: Value-added tax.
    - `FeesType` string: Defines the type of fee applied. Used exclusively in Excel report generation. For example, the "VAT" type will be rendered as "VAT%" in the report.
    - `DoNotApplyMarkup` boolean: Shows whether the material markup should be applied.
  - `Questions` ServiceChannelServicesMessagingProposalsProposalQuestion[]
    - `IsRequired` boolean: Shows whether the question is mandatory.
    - `IsMultipleChoiceAllowed` boolean: Defines whether multiple answers to the question are allowed.
    - `AnswerType` string: Indicates how the response is structured and displayed in the proposal form. Possible values: • `SINGLE_QUESTION` • `DROPDOWN`
    - `TextValue` string: No longer in use.
    - `Name` string: Question associated with the proposal. Check the `Options` parameter to view available answers to the question.
    - `Description` string: No longer in use.
    - `IsActive` boolean: Shows whether the question is active.
    - `SortOrder` integer: Predefined order of appearance.
    - `Options` ServiceChannelServicesMessagingProposalsProposalQuestionOption[]
      - `IsDefault` boolean: Defines which answer is pre-selected by default. Possible values: `true` and `false`.
      - `AnswerTextValue` string: No longer in use.
      - `IsChosen` boolean: Shows which answer option was chosen upon creating the proposal.
      - `Name` string: Answer option.
      - `Description` string: No longer in use.
      - `IsActive` boolean: Shows whether the answer option is active.
      - `SortOrder` integer: Order of appearance.
  - `Id` integer: Unique numeric identifier of the proposal category.
  - `Name` string: Type of proposal categories, for example, *Materials*, *Installation Labor*, *Non-Installation Expenses*, etc.
  - `TotalCost` number, double: Subtotal for the specific cost type, for example, materials.

## Other responses

- `400`: The request was not accepted due to bad syntax, missing parameters, insufficient data, etc. <br/>Error codes: 502 &mdash; Cannot find proposal data
- `401`: The requested resource requires authentication.
- `404`: The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
- `500`: Something went wrong, and the server was unable to complete your request. <br/>Error codes: 501 &mdash; The type 'ServiceChannel.Services.Messaging.Proposals.ProposalCategory' is not an entity type. Only entity types support $select and $expand.\r\nParameter name: context

---

[API](https://skmtc.dev/servicechannel/apis/servicechannel-api-v-3.md) - [All operations](https://skmtc.dev/servicechannel/apis/servicechannel-api-v-3/llms.txt) - [OpenAPI document](https://skmtc.dev/servicechannel/apis/servicechannel-api-v-3/revisions/d490d6596809?raw)
