Skip to main content

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.

Returns complete detail for the specified proposal, including all areas, options, customer information, and a full financial summary. The HTTP response also sets a Last-Modified header derived from the proposal’s lastModifiedDate, which you can use for conditional request patterns.

Request

GET /public/proposals/{ProposalId}

Headers

Accept
string
required
Must be application/json.
X-MSS-API-APPID
string
required
Your API Application Key.
X-MSS-API-USERKEY
string
required
Your User API Key obtained from the authentication exchange.
X-MSS-CUSTOM-DATE
string
required
Current UTC timestamp in RFC 7231 format, e.g. Mon, 06 Apr 2026 00:22:19 GMT.
X-MSS-SIGNATURE
string
required
HMAC-SHA256 signature of the canonical request message, Base64-encoded.

Path Parameters

ProposalId
integer
required
The unique numeric ID of the proposal to retrieve. This is the id field returned by the list or create endpoints — not the human-readable proposal number.

Response

200 Success

The response Last-Modified header is set to the proposal’s lastModifiedDate.
id
integer
required
Unique numeric ID of the proposal.
number
integer
required
Proposal number unique within the dealer account.
name
string
required
Display name of the proposal.
status
string
required
Current proposal status. One of Undefined, Draft, Submitted, ViewedByClient, Accepted, Declined, Delayed, Completed, EmailFailed, Expired.
createdDate
string
required
ISO 8601 timestamp when the proposal was created.
lastModifiedDate
string
required
ISO 8601 timestamp of the most recent modification. This value is also sent as the Last-Modified response header.
lastModifiedByUserDate
string
required
ISO 8601 timestamp when the proposal was last modified by a human user (not an automated system update).
lastSubmittedDate
string
ISO 8601 timestamp when the proposal was last submitted to the customer. Null if never submitted.
clientLastOpenedDate
string
ISO 8601 timestamp when the customer last opened the proposal viewer link. Null if never opened.
clientLastDecisionDate
string
ISO 8601 timestamp when the client last accepted or declined the proposal. Null if no client decision has been recorded.
lastCompletedDate
string
ISO 8601 timestamp when the proposal last reached a completed state. Null if not yet completed.
financialSummary
object
required
Full financial breakdown including parts, labor, fees, discounts, and tax totals.
areas
array
The proposal’s areas (rooms), each containing one or more options with line items.
changeOrders
array
List of change orders associated with this proposal. Each item contains details of scope changes, price adjustments, and approval state.
customer
object
Customer contact details associated with this proposal.
dealer
object
required
Dealer account details for the account that owns this proposal.
coverpageImageUrl
string
Absolute URL of the proposal cover image. Null when no cover image is set.
aboutUs
string
The about us text from the company profile, included on proposal documents.
projectDescription
string
Client-facing description of the project, shown on customer-facing proposal documents.
profit
object
Profit summary for the proposal.
recurringServices
object
Recurring service plan details associated with the proposal.
paymentSchedule
object
Payment schedule configuration for the proposal.
paymentRequests
array
Payment requests already issued for this proposal.
projectTerms
string
Terms and conditions for the project, shown on proposal documents.
lastModifiedUser
object
required
Details of the user who last modified the proposal.

Error Codes

CodeMeaning
401Not authorized. Check that your HMAC signature and headers are correct.
403Your user does not have permission to view this proposal.

Example

curl -i -X GET \
  'https://sandbox.api.portal.io/public/proposals/1042' \
  -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'
{
  "id": 1042,
  "number": 1001,
  "name": "Smith Residence AV",
  "status": "Draft",
  "createdDate": "2026-03-10T14:00:00Z",
  "lastModifiedDate": "2026-04-01T09:30:00Z",
  "lastModifiedByUserDate": "2026-04-01T09:30:00Z",
  "lastSubmittedDate": null,
  "clientLastOpenedDate": null,
  "clientLastDecisionDate": null,
  "lastCompletedDate": null,
  "financialSummary": {
    "partsSubtotal": 8000.00,
    "partsTotal": 8000.00,
    "laborTotal": 2500.00,
    "feeTotal": 0,
    "proposalSubtotal": 10500.00,
    "salesTax": {
      "taxStatus": "Ok",
      "total": 892.50
    },
    "proposalTotal": 11392.50
  },
  "areas": [],
  "changeOrders": [],
  "customer": {
    "id": 88,
    "firstName": "Jane",
    "lastName": "Smith",
    "companyName": "",
    "contactEmail": "jane.smith@example.com"
  },
  "dealer": {
    "id": 5,
    "name": "AV Solutions Inc."
  },
  "coverpageImageUrl": null,
  "aboutUs": "We specialize in smart home integration.",
  "projectDescription": "Whole-home AV and lighting control system.",
  "profit": null,
  "recurringServices": null,
  "paymentSchedule": null,
  "paymentRequests": [],
  "projectTerms": "Payment due within 30 days of completion.",
  "lastModifiedUser": {
    "id": 12,
    "firstName": "Alex",
    "lastName": "Johnson"
  }
}