The Portal API is a RESTful service. It uses resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
PRODUCTION ACCESS
You will use our sandbox until your integration is reviewed and approved. Once approved we'll provide keys to use our production API at https://api.portal.io
SANDBOX ACCESS
STEP 1
Sign up for a free Sandbox Account at https://sandbox.portal.io. This is a dealer test account you will use to exchange test data.
STEP 2
After you have a sandbox account, let your Portal rep know, and they will provide you an API Application Key, as well as a Secret Key (used to hach the signature in your requests)
STEP 3
You're now ready to get your User Key. Please refer to the User Authentication section, which is next in these docs. The User Key is the last thing you'll need to start making requests to the sandbox API at https://sandbox.api.portal.io
To call the authenticated public API you first need a User Key.
Use the authentication exchange endpoint documented here:
GET /authenticate/apikeyexchange
For the initial exchange:
X-MSS-API-APPID, X-MSS-CUSTOM-DATE, and X-MSS-SIGNATURE headersSigning requests
Portal signs requests with HMAC-SHA256 and Base64-encodes the result.
Build the canonical message by concatenating these parts with no separator:
[HTTP method][absolute URL][content type][timestamp][user API key]
Rules:
GET requests, omit the content-type segment.GET requests, include the exact content type sent in the request.X-MSS-CUSTOM-DATE.X-MSS-API-USERKEY.Example canonical message for the initial exchange:
GEThttps://api.portal.io/authenticate/apikeyexchange?UserName=user%40example.com&Password=MyP%40ss123Mon, 06 Apr 2026 00:22:19 GMT
If the exchange succeeds, use meta.apiKey from the response on all later authenticated requests. For the HMAC-based public API, this is the value that matters, not bearerToken.
Exchange your Portal username and password for a User API Key. Send the HMAC authentication headers with this request to obtain the key.
Success
Invalid credentials or User Email is not verified
{- "userId": "string",
- "sessionId": "string",
- "userName": "string",
- "displayName": "string",
- "referrerUrl": "string",
- "bearerToken": "string",
- "refreshToken": "string",
- "refreshTokenExpiry": "2019-08-24T14:15:22Z",
- "profileUrl": "string",
- "roles": [
- "string"
], - "permissions": [
- "string"
], - "authProvider": "string",
- "responseStatus": {
- "errorCode": "string",
- "message": "string",
- "stackTrace": "string",
- "errors": [
- {
- "errorCode": "string",
- "fieldName": "string",
- "message": "string",
- "meta": {
- "property1": "string",
- "property2": "string"
}
}
], - "meta": {
- "property1": "string",
- "property2": "string"
}
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}Most proposal workflows start with GET /public/proposals to Search & Get Proposal List, then GET /public/proposals/{ProposalId} to Get Proposal Details.
Returns the proposals for the current account. Supports filtering by status, contact, modified date, search text, and archive state, along with sorting and pagination.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
{- "proposals": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}
}
], - "proposalCount": 0
}Creates a new proposal for the authenticated account. Supply a salesperson ID from the same account and, optionally, a proposal name. If no name is given, the system assigns a default name using the same logic as the Portal UI. The response includes the full proposal detail, including the new proposal ID, number, status, and financial summary.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
No resource exists with the given ID.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Returns detailed information for the specified proposal. The HTTP response also sets the Last-Modified header from the response LastModifiedDate.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Performs a partial update on an existing proposal. You can update the proposal name, reassign the salesperson, or do both in one request. Both fields are optional, and omitted fields keep their current values. SalesPersonId must reference a user in the same account. The response includes the full updated proposal detail.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal not found.
Proposal state prevents editing
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Updates the client-facing project description of a proposal. This is the description shown on customer-facing proposal documents. The request body accepts a single description string. The response includes the full updated proposal detail.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal not found.
Proposal state prevents editing
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Updates the internal installer notes (installer project description) of a proposal. These notes are visible only to the dealer's team and do not appear on client-facing documents. The request body accepts a single internal notes string. The response includes the full updated proposal detail.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
No resource exists with the given ID.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Returns detailed information for the specified change order. The HTTP response also sets the Last-Modified header from the response LastModifiedDate.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "changeOrderSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Returns the change orders for the specified proposal, including customer details, total, status, and created and modified dates.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
[- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
]Creates a new area (room) within a proposal. The area name must be unique within the proposal. The system automatically creates one default option in "Draft" status under the new area. The response includes the full updated proposal detail, including the new area and its default option.
Success
If an area with the same name already exists.
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal not found.
Proposal state prevents editing
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Creates a new option within an existing area. Each area supports a maximum of three options. Client description and internal installer notes are optional at creation time. The new option is created with "Draft" status. The response includes the full updated proposal detail.
Success
Each area supports a maximum of three options.
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal or area not found.
Proposal state prevents editing
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Updates the client-facing description of a specific option. The route includes both the proposal ID and option ID to verify that the option belongs to the specified proposal. The response includes the full updated proposal detail.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal or area option not found.
Proposal is in a state that does not allow editing.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Updates the internal installer notes of a specific option. Like the client description endpoint, the route includes both proposal and option IDs for ownership validation. The response includes the full updated proposal detail.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal or area option not found.
Proposal is in a state that does not allow editing.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Assigns an existing contact (person/client) to a proposal. The proposal and contact must belong to the same account. If the contact has a single primary location, that location is automatically assigned to the proposal as well. Assigning a contact may trigger tax recalculations based on the contact's location.
No Content
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal or contact not found.
{- "errorCode": "string",
- "stackTrace": "string",
- "contentType": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "cookies": [
- { }
], - "status": 0,
- "statusCode": "string",
- "statusDescription": "string",
- "response": { },
- "responseFilter": { },
- "requestContext": { },
- "paddingLength": 0,
- "resultScope": { },
- "options": {
- "property1": "string",
- "property2": "string"
}, - "responseStatus": {
- "errorCode": "string",
- "message": "string",
- "stackTrace": "string",
- "errors": [
- {
- "errorCode": "string",
- "fieldName": "string",
- "message": "string",
- "meta": {
- "property1": "string",
- "property2": "string"
}
}
], - "meta": {
- "property1": "string",
- "property2": "string"
}
}, - "targetSite": { },
- "message": "string",
- "data": { },
- "innerException": { },
- "helpLink": "string",
- "source": "string",
- "hResult": 0
}Assigns a location to a proposal that already has a contact assigned. The location must belong to the proposal's assigned contact and to the same account. Assigning a location triggers tax recalculations for the proposal. The response includes the full updated proposal detail.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
Proposal or location not found.
The proposal has no person assigned, so a location cannot be set.
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}Returns all AI Builder content items (text, audio, video uploads) attached to a proposal, including their processing status and metadata. Use this to check which content has been uploaded and whether transcription is complete before generating an outline.
Success
required | Array of objects (PublicAiProposalContentItemModel) List of AI Builder content items attached to the proposal, ordered by CreatedDate ascending. Empty if no content has been uploaded. |
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
{- "items": [
- {
- "id": 0,
- "name": "string",
- "summary": "string",
- "status": "string",
- "sourceType": "string",
- "createdDate": "2019-08-24T14:15:22Z",
- "userCreated": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}
}
]
}Uploads one or more files as AI source content for the specified proposal. At least one file must be included. When IsMultiChunkUpload is true, the upload is processed as a multi-chunk upload; otherwise uploaded files are processed as regular file uploads.
Success
Validation failure (missing content name, invalid content type, file too large).
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
Proposal not found.
Proposal is in a state that does not allow editing.
{- "id": 0,
- "name": "string",
- "summary": "string",
- "status": "Uploaded",
- "sourceType": "Text",
- "createdDate": "2019-08-24T14:15:22Z",
- "userCreated": {
- "id": 0,
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}
}Delete an AI-generated content item from a proposal
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
Proposal must be in draft status to edit.
{- "id": 0,
- "deleted": true
}Returns the latest requested AI outline for the specified proposal. The status is Completed when outline content is available and Generating while the outline is still being prepared. The Outline field is returned only when the status is Completed.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
Proposal or outline not found.
{- "proposalId": 0,
- "status": "Generating",
- "outline": "string"
}Trigger asynchronous AI proposal build from an approved outline.
Success
Bad Request: no completed AI outline exists for this proposal.
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
Proposal not found.
{- "proposalId": 0,
- "status": "string"
}Start asynchronous AI outline generation for a proposal.
Success
Bad Request: the specified proposal does not contain the transcribed media or project specification content required for AI outline generation.
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
Proposal not found.
{- "proposalId": 0,
- "status": "string"
}Returns a paged list of contacts for the current account. Supports search, contact type filtering, sorting, and pagination. Pagination defaults to PageNumber 1 and PageSize 10 when values are missing or less than or equal to 0.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
{- "people": [
- {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}
], - "peopleCount": 0
}Creates a contact in the current account. PartyType, ContactType, and FirstName are required. CompanyName is also required when PartyType is Company.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
{- "notes": "string",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "primaryLocation": {
- "contactFirstName": "string",
- "contactLastName": "string",
- "contactPhoneNumber": "string",
- "contactEmail": "string",
- "isPrimary": true,
- "isBilling": true,
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "billingLocation": {
- "contactFirstName": "string",
- "contactLastName": "string",
- "contactPhoneNumber": "string",
- "contactEmail": "string",
- "isPrimary": true,
- "isBilling": true,
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "proposalCount": 0,
- "paymentCount": 0,
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}Returns the contact details for the specified person. PrimaryLocation and BillingLocation are included when available. When IncludeCounts is true, the response also includes proposal and payment counts for the contact.
Success
Person not found.
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
{- "notes": "string",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "primaryLocation": {
- "contactFirstName": "string",
- "contactLastName": "string",
- "contactPhoneNumber": "string",
- "contactEmail": "string",
- "isPrimary": true,
- "isBilling": true,
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "billingLocation": {
- "contactFirstName": "string",
- "contactLastName": "string",
- "contactPhoneNumber": "string",
- "contactEmail": "string",
- "isPrimary": true,
- "isBilling": true,
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "proposalCount": 0,
- "paymentCount": 0,
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}Returns the contact's locations. Results are ordered with the primary location first, then the billing location, then the most recently modified locations. Pagination defaults to PageNumber 1 and PageSize 10. When PageNumber is less than or equal to 0, all matching locations are returned.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
You do not have permission for this API call.
{- "contactLocations": [
- {
- "contactFirstName": "string",
- "contactLastName": "string",
- "contactPhoneNumber": "string",
- "contactEmail": "string",
- "isPrimary": true,
- "isBilling": true,
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}
], - "locationCount": 0
}Adds a location to the specified contact. Street is required. When Country is provided, State is also required. Use IsPrimary to make the new location the primary location and IsBilling to make it the billing location.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
This person does not exists.
{- "contactFirstName": "string",
- "contactLastName": "string",
- "contactPhoneNumber": "string",
- "contactEmail": "string",
- "isPrimary": true,
- "isBilling": true,
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}**These endpoints require separate authorization**
The Catalog service provides access to all items in the Portal catalog, including information about their MSRP, cost, sell prices and suppliers.
Searches the catalog using the provided category, brand, supplier, industry, stock, favorite, price, and item type filters. CategoryId and CategoryIds are mutually exclusive, and ParentCategoryId and ParentCategoryIds are mutually exclusive. If SearchText is omitted it is treated as an empty string. ItemType defaults to Part.
Success
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
Internal error.
{- "items": [
- {
- "id": 0,
- "brand": "string",
- "model": "string",
- "shortDescription": "string",
- "primaryImageUrl": "string",
- "parentCategoryId": 0,
- "categoryId": 0,
- "categories": [
- "string"
], - "isFavorite": true,
- "isDiscontinued": true,
- "msrp": {
- "msrpUsd": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "defaultCost": {
- "supplierName": "string",
- "supplierSku": "string",
- "managePriceStatus": "None",
- "accountNumber": "string",
- "isInStock": true,
- "isPromo": true,
- "lastVerifiedDate": "2019-08-24T14:15:22Z",
- "unitOfMeasure": "string",
- "discountPercentage": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "sellPrice": {
- "type": "string",
- "costMultiplier": 0,
- "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "rank": 0
}
], - "favoriteItems": [
- {
- "id": 0,
- "brand": "string",
- "model": "string",
- "shortDescription": "string",
- "primaryImageUrl": "string",
- "parentCategoryId": 0,
- "categoryId": 0,
- "categories": [
- "string"
], - "isFavorite": true,
- "isDiscontinued": true,
- "msrp": {
- "msrpUsd": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "defaultCost": {
- "supplierName": "string",
- "supplierSku": "string",
- "managePriceStatus": "None",
- "accountNumber": "string",
- "isInStock": true,
- "isPromo": true,
- "lastVerifiedDate": "2019-08-24T14:15:22Z",
- "unitOfMeasure": "string",
- "discountPercentage": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "sellPrice": {
- "type": "string",
- "costMultiplier": 0,
- "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "rank": 0
}
], - "categoryFacets": [
- {
- "name": "string",
- "itemCount": 0
}
], - "brandFacets": [
- {
- "name": "string",
- "itemCount": 0
}
], - "supplierFacets": [
- {
- "name": "string",
- "itemCount": 0
}
], - "totalItemCount": 0,
- "processingTimeMS": 0,
- "favoriteItemCount": 0,
- "labors": [
- {
- "id": 0,
- "imageAssetId": 0,
- "brand": "string",
- "model": "string",
- "name": "string",
- "shortDescription": "string",
- "sellPrice": 0,
- "cost": 0,
- "sellPercentage": 0,
- "costPercentage": 0,
- "sellPercentageBasis": "string",
- "costPercentageBasis": "string",
- "isTaxExempt": true,
- "isRecurringService": true,
- "modifiedDate": "2019-08-24T14:15:22Z",
- "categoryId": 0,
- "imageUrl": "string",
- "deleted": true,
- "profit": {
- "profit": 0,
- "percentage": 0
}, - "currencyId": 0,
- "currency": {
- "id": 0,
- "code": "string",
- "symbol": "string",
- "format": "string"
}
}
], - "customItems": [
- {
- "modelNumber": "string",
- "id": 0,
- "imageAssetId": 0,
- "brand": "string",
- "model": "string",
- "name": "string",
- "shortDescription": "string",
- "sellPrice": 0,
- "cost": 0,
- "sellPercentage": 0,
- "costPercentage": 0,
- "sellPercentageBasis": "string",
- "costPercentageBasis": "string",
- "isTaxExempt": true,
- "isRecurringService": true,
- "modifiedDate": "2019-08-24T14:15:22Z",
- "categoryId": 0,
- "imageUrl": "string",
- "deleted": true,
- "profit": {
- "profit": 0,
- "percentage": 0
}, - "currencyId": 0,
- "currency": {
- "id": 0,
- "code": "string",
- "symbol": "string",
- "format": "string"
}
}
]
}Returns the catalog category hierarchy grouped by industry, including category image URLs when available.
A catalog response
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
Internal error.
[- {
- "id": 0,
- "name": "string",
- "categories": [
- {
- "id": 0,
- "name": "string",
- "imageUrl": "string",
- "subCategories": [
- { }
]
}
]
}
]Returns details for the requested catalog item. When ItemType is Labor or CustomItem, the item is returned from the current account's library; otherwise a standard catalog item is returned. ExtendedDetails adds extra information to standard catalog item responses.
Success
The requested item doesn't exist
Not Authorized to access this endpoint or your HMAC hash was incorrect.
This action requires an active subscription.
You do not have permission for this API call.
{- "description": "string",
- "productUrl": "string",
- "manufacturerProductUrl": "string",
- "additionalImageUrls": [
- "string"
], - "pdfResourceLinks": [
- {
- "name": "string",
- "url": "string"
}
], - "videoResourceLinks": [
- {
- "name": "string",
- "url": "string"
}
], - "specs": [
- {
- "name": "string",
- "value": "string"
}
], - "suppliers": [
- {
- "id": 0,
- "name": "string",
- "cost": {
- "isPromo": true,
- "lastVerifiedDate": "2019-08-24T14:15:22Z",
- "unitOfMeasure": "string",
- "discountPercentage": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "isDefault": true,
- "sku": "string",
- "isInStock": true,
- "isDiscontinued": true,
- "status": "string",
- "createdDate": "2019-08-24T14:15:22Z",
- "accountNumber": "string"
}
], - "id": 0,
- "brand": "string",
- "model": "string",
- "shortDescription": "string",
- "primaryImageUrl": "string",
- "parentCategoryId": 0,
- "categoryId": 0,
- "categories": [
- "string"
], - "isFavorite": true,
- "isDiscontinued": true,
- "msrp": {
- "msrpUsd": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "defaultCost": {
- "supplierName": "string",
- "supplierSku": "string",
- "managePriceStatus": "None",
- "accountNumber": "string",
- "isInStock": true,
- "isPromo": true,
- "lastVerifiedDate": "2019-08-24T14:15:22Z",
- "unitOfMeasure": "string",
- "discountPercentage": 0,
- "regularValue": 0,
- "isCustom": true,
- "futurePrice": {
- "value": 0,
- "effectiveDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "isInUse": true
}, - "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "sellPrice": {
- "type": "string",
- "costMultiplier": 0,
- "value": 0,
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "modifiedBy": "string",
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "rank": 0
}The Users service returns the users that belong to the authenticated dealer account.
Use these endpoints to discover the users who can be referenced by other public workflows.
Returns a list of all active users within the authenticated caller's account. The response includes basic, non-sensitive user details: user ID, first name, last name, email address, and the user's permission group. This is a read-only endpoint intended for integrations that need to look up user IDs before assigning them as salespersons on proposals or for syncing user data with external systems.
Success
Not Authorized. Ensure a valid session cookie or HMAC authentication headers are provided.
You do not have permission for this action.
No resource exists with the given ID.
{- "users": [
- {
- "firstName": "string",
- "lastName": "string"
}
], - "usersCount": 0
}Zapier triggers on the following events in Portal
Provides the sample response shape for the Zapier contact trigger. Use this trigger when you want Zapier to receive contact updates, including contact changes and related contact details.
Person Item.
Authentication failed. Verify the HMAC headers and credentials used for the request.
{- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}Provides the sample response shape for the Zapier payment trigger. Use this trigger when you want Zapier to receive payment updates, including payment status changes and related payment details.
Payment Item.
Authentication failed. Verify the HMAC headers and credentials used for the request.
{- "id": 0,
- "description": "string",
- "status": "string",
- "amount": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "modifiedDate": "2019-08-24T14:15:22Z",
- "dueDate": "2019-08-24T14:15:22Z",
- "initiatedPaymentDate": "2019-08-24T14:15:22Z",
- "paidDate": "2019-08-24T14:15:22Z",
- "clientFirstName": "string",
- "clientLastName": "string",
- "clientName": "string",
- "personId": 0,
- "proposalId": 0,
- "proposalNumber": 0,
- "number": 0,
- "paidVia": "string",
- "isEstExpired": true,
- "paymentProcessorType": "string",
- "proposalPaymentScheduleItemId": 0
}Provides the sample response shape for the Zapier proposal trigger. Use this trigger when you want Zapier to receive proposal updates, including proposal status changes and related proposal details.
Proposal List.
Authentication failed. Verify the HMAC headers and credentials used for the request.
{- "number": 0,
- "status": "string",
- "total": 0,
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "proposalPdf": "string",
- "proposalCsv": "string",
- "installerPdf": "string",
- "salesPerson": "string",
- "salesPersonEmail": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "id": 0,
- "name": "string"
}Provides the sample response shape for the Zapier order trigger. Use this trigger when you want Zapier to receive order updates, including order status changes and related order details.
Order Item
Authentication failed. Verify the HMAC headers and credentials used for the request.
{- "number": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "modifiedDate": "2019-08-24T14:15:22Z",
- "status": "string",
- "total": 0,
- "partCount": 0,
- "orderSuppliers": [
- {
- "id": 0,
- "supplierName": "string",
- "sum": 0,
- "partCount": 0,
- "status": "string"
}
], - "id": 0,
- "name": "string"
}Webhook subscriptions and delivery rules for Portal's public API.
Webhooks allow external systems to receive real-time notifications when specific events occur in Portal.
Developers can register webhook subscriptions by providing an HTTPS endpoint URL and selecting which events they want to receive. When a subscribed event occurs, Portal sends an HTTP POST request to the configured endpoint.
Each request contains a structured JSON payload describing the event.
Webhook deliveries are signed using a secret key to allow consumers to verify that the request was sent by Portal.
If a webhook delivery fails, Portal automatically retries the delivery several times. Current implementation schedule: 1 minute, 5 minutes, 30 minutes, 2 hours, 12 hours.
Webhook requests are signed so consumers can verify that the request was sent by Portal.
Each subscription has a secretKey, which is used to generate a signature for every webhook request.
Each webhook request includes the following header:
X-Webhook-Signature
Example:
X-Webhook-Signature: t=1710000000,v1=5f2b3e7a9d1c4f8e6b2a3c9d7f4e1a6b5c3d2f7e9a1b4c6d8e0f2a3b5c7d9e1
Where:
t - timestamp when the webhook was generated (Unix time)v1 - HMAC-SHA256 signatureThe signature is calculated using HMAC-SHA256 with the subscription secretKey.
The message being signed is:
timestamp + "." + requestBody
Example:
1710000000.{"id":10025,"number":4123,...}
Signature calculation:
signature = HMAC_SHA256(secretKey, timestamp + "." + requestBody)
Consumers should verify webhook requests using the following steps:
X-Webhook-Signature header.t and v1.t + "." + requestBody.HMAC_SHA256(secretKey, signedMessage).v1.Creates a new webhook subscription for the authenticated dealer. The response includes the signing secret key used to verify delivered webhook requests.
Success
Validation failed. Common causes: subscription not found or does not belong to this account, URL is not HTTPS or resolves to a private address, unrecognised event names, or no changes were provided.
HMAC signature validation failed or credentials are invalid. Verify X-MSS-SIGNATURE, X-MSS-CUSTOM-DATE, and X-MSS-API-USERKEY headers.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
{- "subscriptionId": 0,
- "url": "string",
- "description": "string",
- "enabled": true,
- "secretKey": "string",
- "events": [
- "string"
]
}Returns all active webhook subscriptions for the authenticated dealer account.
Success
HMAC signature validation failed or credentials are invalid. Verify X-MSS-SIGNATURE, X-MSS-CUSTOM-DATE, and X-MSS-API-USERKEY headers.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
[- {
- "subscriptionId": 0,
- "url": "string",
- "description": "string",
- "enabled": true,
- "secretKey": "string",
- "events": [
- "string"
]
}
]Partially updates an existing webhook subscription. Only supplied fields are changed; omitted (null) fields retain their current values. At least one field must be provided.
Success
Validation failed. Common causes: subscription not found or does not belong to this account, URL is not HTTPS or resolves to a private address, unrecognised event names, or no changes were provided.
HMAC signature validation failed or credentials are invalid. Verify X-MSS-SIGNATURE, X-MSS-CUSTOM-DATE, and X-MSS-API-USERKEY headers.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
{- "subscriptionId": 0,
- "url": "string",
- "description": "string",
- "enabled": true,
- "secretKey": "string",
- "events": [
- "string"
]
}Permanently deletes a webhook subscription and all of its event bindings. No further events will be delivered to the endpoint.
Success
No active webhook subscription with the given SubscriptionId exists for the authenticated account.
HMAC signature validation failed or credentials are invalid. Verify X-MSS-SIGNATURE, X-MSS-CUSTOM-DATE, and X-MSS-API-USERKEY headers.
The dealer's subscription is inactive or expired. An active subscription is required to use this endpoint.
You do not have permission for this action.
{- "success": true,
- "subscriptionId": 0
}Triggered when AI proposal build generation finishes successfully or fails.
{- "id": "string",
- "type": "string",
- "created": "2019-08-24T14:15:22Z",
- "data": {
- "status": "string",
- "proposal": {
- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- null
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}
}
}Triggered when AI proposal outline generation finishes successfully or fails.
Delivered payload
{- "id": "string",
- "type": "string",
- "created": "2019-08-24T14:15:22Z",
- "data": {
- "proposalId": 0,
- "status": "Generating",
- "outline": "string"
}
}Triggered when the status of a proposal changes.
Delivered payload
{- "id": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "clientLastDecisionDate": "2019-08-24T14:15:22Z",
- "lastCompletedDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z",
- "financialSummary": {
- "partsSubtotal": 0,
- "partsDiscountType": "Percentage",
- "partsDiscountPercentage": 0,
- "partsDiscount": 0,
- "partsDiscountTaxable": 0,
- "partsDiscountTaxExempt": 0,
- "partsTotal": 0,
- "laborTotal": 0,
- "feeTotal": 0,
- "proposalSubtotal": 0,
- "salesTax": {
- "taxStatus": "Undefined",
- "total": 0,
- "calculation": {
- "method": "ClientLocation",
- "applyTo": [
- "None"
], - "partsTax": 0,
- "partsTaxName": "string",
- "laborTax": 0,
- "laborTaxName": "string",
- "hasMultipleTaxSupport": true,
- "partsTax2": 0,
- "partsTax2Name": "string",
- "laborTax2": 0,
- "laborTax2Name": "string",
- "feeTax": 0,
- "feeTaxName": "string",
- "feeTax2": 0,
- "feeTax2Name": "string",
- "taxLocation": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "isTaxJarAvailable": true,
- "partsTotalTax": 0,
- "laborTotalTax": 0,
- "feeTotalTax": 0
}
}, - "proposalTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "changeOrders": [
- {
- "id": 0,
- "number": 0,
- "name": "string",
- "status": "Undefined",
- "total": {
- "changeOrderTotal": 0,
- "currency": {
- "code": "string",
- "symbol": "string"
}
}, - "customer": {
- "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "lastModifiedByUserDate": "2019-08-24T14:15:22Z"
}
], - "number": 0,
- "name": "string",
- "status": "Undefined",
- "lastSubmittedDate": "2019-08-24T14:15:22Z",
- "clientLastOpenedDate": "2019-08-24T14:15:22Z",
- "customer": {
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "id": 0,
- "partyType": "Undefined",
- "contactType": "Undefined",
- "firstName": "string",
- "lastName": "string",
- "companyName": "string",
- "contactEmail": "string",
- "contactEmailCC": "string",
- "contactPhone": "string"
}, - "dealer": {
- "companyName": "string",
- "location": {
- "id": 0,
- "street": "string",
- "suite": "string",
- "city": "string",
- "postalCode": "string",
- "state": "string",
- "stateAbbrev": "string",
- "country": "string",
- "phone": "string"
}, - "salesperson": {
- "id": 0,
- "email": "string",
- "firstName": "string",
- "lastName": "string"
}, - "webSiteUrl": "string",
- "companyPhone": "string",
- "companyLogoUrl": "string"
}, - "coverpageImageUrl": "string",
- "aboutUs": "string",
- "projectDescription": "string",
- "areas": [
- {
- "id": 0,
- "name": "string",
- "options": [
- {
- "id": 0,
- "status": "Draft",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "clientDescription": "string",
- "installerDescription": "string",
- "items": [
- {
- "id": 0,
- "parentId": 0,
- "itemType": "Part",
- "referencedItemId": 0,
- "createdDate": "2019-08-24T14:15:22Z",
- "lastModifiedDate": "2019-08-24T14:15:22Z",
- "brand": "string",
- "model": "string",
- "description": "string",
- "name": "string",
- "shortDescription": "string",
- "clientNote": "string",
- "imageUrl": "string",
- "msrp": 0,
- "sellPrice": 0,
- "cost": 0,
- "costUpdateDate": "2019-08-24T14:15:22Z",
- "supplier": "string",
- "quantity": 0,
- "total": {
- "amount": null,
- "currency": null,
- "isCombinedPrice": null
}, - "isTaxExempt": true,
- "isRecurringService": true,
- "linkedOrders": [
- null
]
}
], - "total": 0,
- "totalRecurringService": 0
}
]
}
], - "profit": {
- "total": 0,
- "percentage": 0,
- "partTotal": 0,
- "partPercentage": 0,
- "laborTotal": 0,
- "laborPercentage": 0,
- "isProfitIncludeCos": true
}, - "recurringServices": {
- "items": [
- {
- "name": "string",
- "sellPrice": 0,
- "quantity": 0,
- "totalSell": 0
}
], - "totalRecurringService": 0
}, - "paymentSchedule": {
- "customerDescription": "string",
- "payments": [
- {
- "calculation": "string",
- "amount": 0,
- "due": {
- "date": "2019-08-24T14:15:22Z",
- "milestone": "string"
}
}
]
}, - "paymentRequests": [
- {
- "id": 0,
- "status": "Undefined",
- "amount": 0,
- "dueDate": "2019-08-24T14:15:22Z",
- "description": "string",
- "paymentMethod": "string"
}
], - "projectTerms": "string",
- "lastModifiedUser": {
- "firstName": "string",
- "lastName": "string"
}
}