Skip to main content
POST
/
public
/
proposals
/
{ProposalId}
curl -i -X POST \
  'https://sandbox.api.portal.io/public/proposals/1042' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -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' \
  -d 'Name=Smith+Residence+Phase+2' \
  -d 'SalesPersonId=55'
{
  "id": 1042,
  "createdDate": "2026-03-10T14:00:00Z",
  "lastModifiedDate": "2026-04-06T00:22:19Z",
  "lastModifiedByUserDate": "2026-04-06T00:22:19Z",
  "financialSummary": {
    "partsSubtotal": 8000.00,
    "partsTotal": 8000.00,
    "laborTotal": 2500.00,
    "feeTotal": 0,
    "proposalSubtotal": 10500.00,
    "salesTax": {
      "taxStatus": "Ok",
      "total": 892.50
    },
    "proposalTotal": 11392.50
  }
}
Performs a partial update on an existing proposal. You can rename the proposal, reassign it to a different salesperson, or do both in a single request. Both body fields are optional — any field you omit keeps its current value. The salesperson must be a user belonging to the same account. The response returns the complete updated proposal detail.
A 409 Conflict is returned if the proposal is in a terminal state (e.g. accepted, cancelled) that prevents editing. Check the proposal’s status field before attempting updates.
curl -i -X POST \
  'https://sandbox.api.portal.io/public/proposals/1042' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -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' \
  -d 'Name=Smith+Residence+Phase+2' \
  -d 'SalesPersonId=55'
{
  "id": 1042,
  "createdDate": "2026-03-10T14:00:00Z",
  "lastModifiedDate": "2026-04-06T00:22:19Z",
  "lastModifiedByUserDate": "2026-04-06T00:22:19Z",
  "financialSummary": {
    "partsSubtotal": 8000.00,
    "partsTotal": 8000.00,
    "laborTotal": 2500.00,
    "feeTotal": 0,
    "proposalSubtotal": 10500.00,
    "salesTax": {
      "taxStatus": "Ok",
      "total": 892.50
    },
    "proposalTotal": 11392.50
  }
}

Headers

Accept
enum<string>
required

Accept Header

Available options:
application/json
X-MSS-API-APPID
string
required

Application Id

X-MSS-CUSTOM-DATE
string
required

A date timestamp of the request

X-MSS-SIGNATURE
string
required

A signature for the request

X-MSS-API-USERKEY
string
required

User API Key

Path Parameters

ProposalId
integer<int32>
required

ID of the proposal to update. Must belong to the current account.

Body

application/x-www-form-urlencoded
Name
string

Optional new name for the proposal. If omitted, the current name is retained.

SalesPersonId
integer<int32>

Optional ID of the new salesperson (user) to assign. Must belong to the current account. If omitted, the current salesperson is retained.

Response

Success

Detailed proposal representation

id
integer<int32>
required

Unique identifier for the proposal. Use this id for subsequent API calls that reference the proposal.

createdDate
string<date-time>
required

UTC timestamp when the proposal was initially created. Returned in ISO 8601 format.

lastModifiedDate
string<date-time>
required

UTC timestamp when the proposal was last modified by any user or system process.

lastModifiedByUserDate
string<date-time>
required

UTC timestamp when the proposal was last modified by a human user (not an automated system update).

financialSummary
PublicFinancialSummaryModel · object
required

Financial totals, discounts, tax, and currency values for the proposal

number
integer<int32>
required

Proposal number unique within the dealer account.

name
string
required

Display name of the proposal.

status
enum<string>
required

The current status of the resource.

Available options:
Undefined,
Draft,
Submitted,
ViewedByClient,
Accepted,
Declined,
Delayed,
Completed,
EmailFailed,
Expired
dealer
PublicDealerModel · object
required

Dealer information

lastModifiedUser
PublicUserModel · object
required

User summary returned within proposal detail responses

clientLastDecisionDate
string<date-time>

UTC timestamp when the client last accepted or declined the proposal. Null if no client decision has been recorded.

lastCompletedDate
string<date-time>

UTC timestamp when the proposal last reached a completed state, if applicable.

changeOrders
PublicChangeOrderModel · object[]

List of change orders associated with this proposal. Each item contains details of scope changes, price adjustments, and approval state.

lastSubmittedDate
string<date-time>

UTC timestamp when the proposal was last submitted to the customer.

clientLastOpenedDate
string<date-time>

UTC timestamp when the customer last opened the proposal viewer link.

customer
PublicCustomerModel · object

Customer contact

coverpageImageUrl
string

Absolute URL of the proposal cover image, when one is available.

aboutUs
string

The about us text for the company profile.

projectDescription
string

A description of the project.

areas
PublicAreaModel · object[]

The list of areas.

profit
PublicProfitModel · object

Profit summary for the proposal

recurringServices
PublicRecurringServicesModel · object

Recurring service summary associated with the proposal.

paymentSchedule
PublicPaymentScheduleModel · object

Payment schedule configuration for the proposal, including the customer-facing description and individual payment milestones.

paymentRequests
PublicPaymentRequestModel · object[]

Payment requests already issued for this proposal.

projectTerms
string

The terms and conditions for the project.