Skip to main content
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.

Request

POST /public/proposals/{ProposalId}

Headers

Accept
string
required
Must be application/json.
Content-Type
string
required
Must be application/x-www-form-urlencoded.
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 update. Must belong to the current account.

Body Parameters

Name
string
New display name for the proposal. If omitted, the current name is retained.
SalesPersonId
integer
ID of the new salesperson to assign. Must be a user in the current account. If omitted, the current salesperson is retained.
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.

Response

200 Success

Returns the full updated proposal detail object. The structure is identical to the Get Proposal response.
id
integer
required
Unique numeric ID of the proposal.
lastModifiedDate
string
ISO 8601 timestamp reflecting the update just performed.
financialSummary
object
Full financial breakdown. See Get Proposal for field details.

Error Codes

CodeMeaning
401Not authorized. Check that your HMAC signature and headers are correct.
402The account’s subscription is inactive or expired.
403Your user does not have permission to update this proposal.
404No proposal found with the given ProposalId.
409The proposal’s current state prevents editing (e.g. terminal status).

Example

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": "Taxable",
      "total": 892.50
    },
    "proposalTotal": 11392.50
  }
}