> ## Documentation index
> Fetch the complete documentation index at: https://developer.rhombus.com/llms.txt
> Use it to discover all available pages before exploring further.

# Get partner portal quote

> Get a quote header and its lines for a quote on an opportunity registered under the authenticated partner organization. Prices are pending after a save until the header's lastCalculatedOn is at or after lastSavedOn; poll with backoff and a bounded number of attempts.

```http
POST https://api2.rhombussystems.com/api/partnerportal/getQuote
```

EU organizations send the same request to `https://api2.eu.rhombussystems.com`.

## Authentication and parameters

- `x-auth-apikey` (header, required): Your Rhombus API key. Must be accompanied by the `x-auth-scheme` header set to `api-token` (or `partner-api-token` for partner endpoints).
- `Authorization` (header): instead of an API key, an OAuth access token (`Bearer <token>`) with the `read` scope.
- `x-auth-scheme` (header, string, default: `partner-api-token`): Authentication scheme identifier. Use `api-token` or `partner-api-token` with the `x-auth-apikey` header, `api` or `partner-api` with `x-auth-apikey` plus a client certificate, `api-oauth-token` or `partner-api-oauth-token` with `x-auth-access-token`, and `federated-token` with `x-auth-ft`. A request with `Authorization: Bearer <token>` and no `x-auth-scheme` is treated as OAuth, and `federated-token` may also be sent as the `x-auth-scheme` and `x-auth-ft` query parameters. One of: `api-token`, `api`, `api-oauth-token`, `federated-token`, `partner-api-token`, `partner-api`, `partner-api-oauth-token`.

## Request body

Content type: `application/json`. Request object for getting a quote and its lines belonging to the authenticated partner organization.

- `quoteId` (string | null, required): Identifier of the Salesforce quote

## Response 200

OK. Content type: `application/json`

- `error` (boolean | null)
- `errorCode` (string | null): Stable, machine-readable code for the failure (one of the ApiErrorCode catalog) when error is true. Branch on this, not on errorMsg.
- `errorMsg` (string | null)
- `lines` (array<object> | null): Quote lines, ordered by line number
- `quote` (object): Header fields of a partner quote. Prices are recalculated asynchronously after a save and are pending until lastCalculatedOn is at or after lastSavedOn.
- `warningMsg` (string | null)

## Errors

Also 400, 401, 403, 429, 500, 503 with the standard error body (`errorCode`, `errorMsg`): https://developer.rhombus.com/errors

## OpenAPI

````yaml
openapi: 3.0.1
info:
  title: Rhombus API
  version: "1.0"
servers:
  - description: Production Server
    url: https://api2.rhombussystems.com
security:
  - ApiKeyAuth: []
paths:
  /api/partnerportal/getQuote:
    post:
      description: Get a quote header and its lines for a quote on an opportunity registered under the authenticated partner organization. Prices are pending after a save until the header's lastCalculatedOn is at or after lastSavedOn; poll with backoff and a bounded number of attempts.
      operationId: getQuote
      parameters:
        - description: "Authentication scheme identifier. Use `api-token` or `partner-api-token` with the `x-auth-apikey` header, `api` or `partner-api` with `x-auth-apikey` plus a client certificate, `api-oauth-token` or `partner-api-oauth-token` with `x-auth-access-token`, and `federated-token` with `x-auth-ft`. A request with `Authorization: Bearer <token>` and no `x-auth-scheme` is treated as OAuth, and `federated-token` may also be sent as the `x-auth-scheme` and `x-auth-ft` query parameters."
          example: partner-api-token
          in: header
          name: x-auth-scheme
          required: false
          schema:
            default: partner-api-token
            enum:
              - api-token
              - api
              - api-oauth-token
              - federated-token
              - partner-api-token
              - partner-api
              - partner-api-oauth-token
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Partnerportal_GetPartnerPortalQuoteWSRequest"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Partnerportal_GetPartnerPortalQuoteWSResponse"
          description: OK
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
      security:
        - ApiKeyAuth: []
        - oauth2:
            - read
      summary: Get partner portal quote
      tags:
        - Partner Portal Webservice
components:
  schemas:
    Partnerportal_GetPartnerPortalQuoteWSRequest:
      description: Request object for getting a quote and its lines belonging to the authenticated partner organization.
      properties:
        quoteId:
          description: Identifier of the Salesforce quote
          nullable: true
          type: string
      required:
        - quoteId
      type: object
    Partnerportal_GetPartnerPortalQuoteWSResponse:
      description: Response object containing a quote header and its lines.
      properties:
        error:
          nullable: true
          type: boolean
        errorCode:
          description: Stable, machine-readable code for the failure (one of the ApiErrorCode catalog) when error is true. Branch on this, not on errorMsg.
          nullable: true
          type: string
        errorMsg:
          nullable: true
          type: string
        lines:
          description: Quote lines, ordered by line number
          items:
            $ref: "#/components/schemas/Partnerportal_PartnerPortalQuoteLineType"
          nullable: true
          type: array
        quote:
          $ref: "#/components/schemas/Partnerportal_PartnerPortalQuoteHeaderType"
        warningMsg:
          nullable: true
          type: string
      type: object
    Partnerportal_PartnerPortalQuoteLineType:
      description: A single line on a partner quote.
      properties:
        additionalDiscountAmount:
          description: Additional discount amount
          nullable: true
          type: number
        additionalDiscountPercent:
          description: Additional discount percent
          nullable: true
          type: number
        contractEndDateTime:
          description: Contract end date and time, as returned by Salesforce
          nullable: true
          type: string
        contractStartDateTime:
          description: Contract start date and time, as returned by Salesforce
          nullable: true
          type: string
        creatorEntity:
          description: System that created the line; lines with a value cannot be updated or deleted
          nullable: true
          type: string
        discountFromMsrp:
          description: Discount from MSRP
          nullable: true
          type: number
        listPrice:
          description: List price (MSRP)
          nullable: true
          type: number
        netTotal:
          description: Net total of the line
          nullable: true
          type: number
        netUnitPrice:
          description: Net unit price
          nullable: true
          type: number
        number:
          description: Line number on the quote
          format: int32
          nullable: true
          type: integer
        partnerDiscount:
          description: Partner discount
          nullable: true
          type: number
        productCode:
          description: Product code (SKU)
          nullable: true
          type: string
        productId:
          description: Identifier of the Salesforce product
          nullable: true
          type: string
        productName:
          description: Name of the product
          nullable: true
          type: string
        quantity:
          description: Quantity
          nullable: true
          type: number
        quoteLineId:
          description: Identifier of the Salesforce quote line
          nullable: true
          type: string
        shippingNeeded:
          description: Whether the line needs shipping
          nullable: true
          type: string
        shippingPrice:
          description: Shipping price
          nullable: true
          type: number
        subscriptionTerm:
          description: Subscription term in months
          format: int32
          nullable: true
          type: integer
        tariffSurcharge:
          description: Tariff surcharge
          nullable: true
          type: number
        tax:
          description: Tax amount
          nullable: true
          type: number
        taxRate:
          description: Tax rate
          nullable: true
          type: number
      type: object
    Partnerportal_PartnerPortalQuoteHeaderType:
      description: Header fields of a partner quote. Prices are recalculated asynchronously after a save and are pending until lastCalculatedOn is at or after lastSavedOn.
      properties:
        additionalDiscountOverride:
          description: Whether the additional discount is overridden
          nullable: true
          type: boolean
        additionalDiscountPercent:
          description: Quote-level additional discount percent
          nullable: true
          type: number
        approvalStatus:
          description: Approval status of the quote
          nullable: true
          type: string
        billAttentionTo:
          description: Bill-to attention
          nullable: true
          type: string
        billingCity:
          description: Bill-to city
          nullable: true
          type: string
        billingCountry:
          description: Bill-to country
          nullable: true
          type: string
        billingName:
          description: Bill-to name
          nullable: true
          type: string
        billingPostalCode:
          description: Bill-to postal code
          nullable: true
          type: string
        billingState:
          description: Bill-to state
          nullable: true
          type: string
        billingStreet:
          description: Bill-to street
          nullable: true
          type: string
        channel:
          description: Sales channel of the quote
          nullable: true
          type: string
        discountOffMsrpOverride:
          description: Whether the discount off MSRP is overridden
          nullable: true
          type: boolean
        groupByBillOnlyOnPdf:
          description: Whether bill-only lines are grouped on the quote PDF
          nullable: true
          type: boolean
        lastCalculatedOn:
          description: Date and time prices were last calculated, as returned by Salesforce
          nullable: true
          type: string
        lastModifiedDate:
          description: Date and time the quote was last modified; send as expectedLastModifiedDate on updateQuote
          nullable: true
          type: string
        lastSavedOn:
          description: Date and time of the last partner portal save; prices are pending while lastCalculatedOn is earlier than this value
          nullable: true
          type: string
        netAmount:
          description: Net amount of the quote
          nullable: true
          type: number
        opportunityId:
          description: Identifier of the Salesforce opportunity the quote belongs to
          nullable: true
          type: string
        opportunityType:
          description: Type of the opportunity; subscription term is only editable on Renewal opportunities
          nullable: true
          type: string
        partnerEditable:
          description: False when the opportunity is not a converted deal registration or is a renewal; partners may view but not change it. Stage locks apply separately.
          nullable: true
          type: boolean
        pricebookId:
          description: Identifier of the price book the quote is priced from
          nullable: true
          type: string
        primary:
          description: Whether this is the primary quote on the opportunity
          nullable: true
          type: boolean
        quoteId:
          description: Identifier of the Salesforce quote
          nullable: true
          type: string
        quoteName:
          description: Display name of the quote
          nullable: true
          type: string
        quoteNumber:
          description: Salesforce quote record name
          nullable: true
          type: string
        shipAttentionTo:
          description: Ship-to attention
          nullable: true
          type: string
        shipping:
          description: Shipping amount
          nullable: true
          type: number
        shippingCity:
          description: Ship-to city
          nullable: true
          type: string
        shippingCountry:
          description: Ship-to country
          nullable: true
          type: string
        shippingMethod:
          description: Shipping method
          nullable: true
          type: string
        shippingName:
          description: Ship-to name
          nullable: true
          type: string
        shippingPostalCode:
          description: Ship-to postal code
          nullable: true
          type: string
        shippingPriceOverride:
          description: Whether the shipping price is overridden
          nullable: true
          type: boolean
        shippingState:
          description: Ship-to state
          nullable: true
          type: string
        shippingStreet:
          description: Ship-to street
          nullable: true
          type: string
        status:
          description: Status of the quote
          nullable: true
          type: string
        tax:
          description: Tax amount
          nullable: true
          type: number
        uncalculated:
          description: Whether prices are pending recalculation after the last save
          nullable: true
          type: boolean
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: Your Rhombus API key. Must be accompanied by the `x-auth-scheme` header set to `api-token` (or `partner-api-token` for partner endpoints).
      in: header
      name: x-auth-apikey
      type: apiKey
    oauth2:
      description: 'OAuth 2.0 authorization code flow with PKCE (`S256`). Send the access token as `Authorization: Bearer <token>`. Each operation lists the scopes it requires; a token without them is refused 403 with `WWW-Authenticate: Bearer error="insufficient_scope"`.'
      flows:
        authorizationCode:
          authorizationUrl: https://console.rhombus.com/oauth/authorize
          refreshUrl: https://auth-web.rhombussystems.com/oauth/token
          scopes:
            physical: Unlock doors and elevators, lockdown, alarms, speakers and robots
            read: View cameras, footage and settings
            write: Change settings and data
          tokenUrl: https://auth-web.rhombussystems.com/oauth/token
      type: oauth2
````
