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

Request

POST /public/proposals/{ProposalId}/location/{LocationId}

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.
X-MSS-CUSTOM-DATE
string
required
Current UTC timestamp in RFC 7231 format.
X-MSS-SIGNATURE
string
required
HMAC-SHA256 signature, Base64-encoded.

Path Parameters

ProposalId
integer
required
The unique ID of the proposal to update. Must belong to the current account.
LocationId
integer
required
The unique ID of the location to assign. Must belong to the proposal’s assigned contact.

Response

200 Success

Returns the full updated proposal detail after the location has been assigned and taxes have been recalculated.
id
integer
required
Unique identifier of the proposal.
createdDate
string
ISO 8601 timestamp of when the proposal was created.
lastModifiedDate
string
ISO 8601 timestamp of the most recent modification.
financialSummary
object
Updated financial totals including recalculated sales tax.
financialSummary.salesTax
object
Sales tax details recalculated based on the assigned location.
financialSummary.proposalSubtotal
number
Subtotal before tax.

Error Codes

CodeMeaning
401Not authorized. Invalid or missing HMAC authentication headers.
402Active subscription required.
403You do not have permission for this action.
404Proposal or location not found.
409The proposal has no contact assigned; a location cannot be set.

Example

curl -i -X POST \
  'https://api.portal.io/public/proposals/123/location/789' \
  -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'
{
  "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": "Calculated",
      "total": 247.50
    },
    "proposalTotal": 3247.50
  }
}