Creates a new proposal under the authenticated account. You must supply the ID of a salesperson (user) who belongs to the same account. If no name is provided, the system assigns a default name using the same naming logic as the Portal.io UI. The response returns the complete proposal detail object, including the new proposal’s ID, number, status, and financial summary.
Request
POST /public/proposals
Must be application/json.
Must be application/x-www-form-urlencoded.
Your API Application Key.
Your User API Key obtained from the authentication exchange.
Current UTC timestamp in RFC 7231 format, e.g. Mon, 06 Apr 2026 00:22:19 GMT.
HMAC-SHA256 signature of the canonical request message, Base64-encoded.
Body Parameters
The ID of the salesperson (user) who will own the proposal. Must be a user in the current account.
Display name for the new proposal. If omitted, the system assigns a default name.
Response
200 Success
Unique numeric ID of the new proposal. Use this value in all subsequent calls that reference the proposal.
ISO 8601 timestamp when the proposal was created.
ISO 8601 timestamp of the most recent modification.
Calculated totals for the proposal. Show Financial summary fields
financialSummary.partsSubtotal
Subtotal for all parts before discounts.
financialSummary.partsTotal
Parts total after discounts.
financialSummary.laborTotal
Total labor charges.
financialSummary.feeTotal
Total fees.
financialSummary.proposalSubtotal
Subtotal before tax.
financialSummary.salesTax.total
Calculated sales tax amount.
financialSummary.proposalTotal
Grand total including tax.
Error Codes
Code Meaning 401 Not authorized. Check that your HMAC signature and headers are correct. 402 The account’s subscription is inactive or expired. 403 Your user does not have permission to create proposals. 404 The specified SalesPersonId was not found in the current account.
Example
curl -i -X POST \
'https://sandbox.api.portal.io/public/proposals' \
-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 'SalesPersonId=42' \
-d 'Name=Smith+Residence+AV'
{
"id" : 1042 ,
"createdDate" : "2026-04-06T00:22:19Z" ,
"clientLastDecisionDate" : null ,
"lastCompletedDate" : null ,
"lastModifiedDate" : "2026-04-06T00:22:19Z" ,
"lastModifiedByUserDate" : "2026-04-06T00:22:19Z" ,
"financialSummary" : {
"partsSubtotal" : 0 ,
"partsDiscountType" : "Percentage" ,
"partsDiscountPercentage" : 0 ,
"partsDiscount" : 0 ,
"partsTotal" : 0 ,
"laborTotal" : 0 ,
"feeTotal" : 0 ,
"proposalSubtotal" : 0 ,
"salesTax" : {
"taxStatus" : "Undefined" ,
"total" : 0
},
"proposalTotal" : 0
}
}