Skip to main content
POST
/
public
/
proposals
/
{ProposalId}
/
location
/
{LocationId}
curl -i -X POST \
  'https://api.portal.io/public/proposals/123/location/789' \
  -H 'Accept: application/json' \
  -H 'Content-Type: 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' \
  -d '{"proposalId": 123, "locationId": 789}'
{
  "id": 123,
  "createdDate": "2026-03-01T09:00:00Z",
  "lastModifiedDate": "2026-04-06T00:22:19Z",
  "financialSummary": {
    "partsSubtotal": 2500.00,
    "laborTotal": 500.00,
    "feeTotal": 0,
    "proposalSubtotal": 3000.00,
    "salesTax": {
      "taxStatus": "Ok",
      "total": 247.50
    },
    "proposalTotal": 3247.50
  }
}
Use this endpoint to assign a specific location to a proposal that already has a contact assigned. The location must belong to the proposal’s currently assigned contact and to the same account. Once a location is set, the API recalculates all applicable taxes for the proposal and returns the complete updated proposal object.
You cannot assign a location before assigning a contact. If the proposal has no contact, the API returns 409. Call Assign a Contact to a Proposal first.
curl -i -X POST \
  'https://api.portal.io/public/proposals/123/location/789' \
  -H 'Accept: application/json' \
  -H 'Content-Type: 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' \
  -d '{"proposalId": 123, "locationId": 789}'
{
  "id": 123,
  "createdDate": "2026-03-01T09:00:00Z",
  "lastModifiedDate": "2026-04-06T00:22:19Z",
  "financialSummary": {
    "partsSubtotal": 2500.00,
    "laborTotal": 500.00,
    "feeTotal": 0,
    "proposalSubtotal": 3000.00,
    "salesTax": {
      "taxStatus": "Ok",
      "total": 247.50
    },
    "proposalTotal": 3247.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.

LocationId
integer<int32>
required

ID of the location to assign to the proposal’s existing person. Must belong to the current account.

Body

application/json

Proposals Service

proposalId
integer<int32>
required

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

locationId
integer<int32>
required

ID of the location to assign to the proposal’s existing person. Must belong to the current account.

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.