Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.portal.io/llms.txt

Use this file to discover all available pages before exploring further.

Use this endpoint to retrieve the full detail of a specific change order. The response includes the complete financial summary (parts, labor, fees, subtotal, and sales tax), all areas with their options and line items, and customer contact information. The HTTP response also sets the Last-Modified header from the change order’s lastModifiedDate, which you can use for conditional requests.

Request

GET /public/proposals/{ProposalId}/changeorders/{ChangeOrderId}

Headers

Accept
string
required
Must be application/json.
X-MSS-API-APPID
string
required
Your API Application Key.
X-MSS-API-USERKEY
string
required
Your User API Key.
X-MSS-CUSTOM-DATE
string
required
Current UTC timestamp in RFC 7231 format.
X-MSS-SIGNATURE
string
required
HMAC-SHA256 signature, Base64-encoded.

Path Parameters

ProposalId
integer
required
The unique ID of the proposal the change order belongs to.
ChangeOrderId
integer
required
The unique ID of the change order to retrieve.

Response

200 Success

Returns the full change order detail. The Last-Modified response header is set to the value of lastModifiedDate.
id
integer
required
Unique numeric identifier of the change order.
number
integer
required
Change order number unique within the dealer account.
name
string
required
Display name of the change order.
status
string
required
Current change order status. One of Undefined, Draft, Submitted, ViewedByClient, Accepted, Declined, Delayed, Completed, EmailFailed, Expired.
createdDate
string
required
ISO 8601 timestamp of when the change order was created.
lastModifiedDate
string
required
ISO 8601 timestamp of the most recent modification. Also returned as the Last-Modified response header.
lastModifiedByUserDate
string
required
ISO 8601 timestamp when the change order was last modified by a user action.
lastSubmittedDate
string
ISO 8601 timestamp when the change order was last submitted to the customer. Null if never submitted.
clientLastOpenedDate
string
ISO 8601 timestamp when the customer last opened the change order viewer link. Null if never opened.
clientLastDecisionDate
string
ISO 8601 timestamp when the customer last accepted or declined the change order. Null if no decision recorded.
lastCompletedDate
string
ISO 8601 timestamp when the change order was completed. Null if not yet completed.
financialSummary
object
required
Breakdown of the change order’s financials.
financialSummary.partsSubtotal
number
Subtotal for all parts line items.
financialSummary.laborTotal
number
Total labor charges.
financialSummary.feeTotal
number
Total fees.
financialSummary.changeOrderSubtotal
number
Subtotal before tax (parts + labor + fees).
financialSummary.salesTax
object
Sales tax details, including tax status and calculation breakdown.
financialSummary.salesTax.taxStatus
string
Tax calculation status (e.g., Ok, NoState, OutOfCountry).
financialSummary.salesTax.total
number
Total sales tax amount.
areas
array
Areas within the change order, each containing options and line items.
customer
object
Customer contact information associated with the change order.
customer.id
integer
Unique identifier of the customer contact.
customer.firstName
string
Customer’s first name.
customer.lastName
string
Customer’s last name.
customer.contactEmail
string
Primary email address of the customer.
customer.contactPhone
string
Customer’s phone number.
dealer
object
required
Dealer account details for the account that owns this change order.
coverpageImageUrl
string
Absolute URL of the cover image. Null when no cover image is set.
aboutUs
string
About us text from the company profile.
projectDescription
string
Client-facing description of the project.
profit
object
Profit summary for the change order.
recurringServices
object
Recurring service plan details.
paymentSchedule
object
Payment schedule configuration.
paymentRequests
array
Payment requests issued for this change order.
projectTerms
string
Terms and conditions for the project.
lastModifiedUser
object
required
Details of the user who last modified the change order.

Error Codes

CodeMeaning
401Not authorized. Invalid or missing HMAC authentication headers.
403You do not have permission for this action.

Example

curl -i -X GET \
  'https://api.portal.io/public/proposals/123/changeorders/42' \
  -H 'Accept: application/json' \
  -H 'X-MSS-API-APPID: YOUR_APP_ID' \
  -H 'X-MSS-API-USERKEY: YOUR_USER_KEY' \
  -H 'X-MSS-CUSTOM-DATE: Mon, 06 Apr 2026 00:22:19 GMT' \
  -H 'X-MSS-SIGNATURE: BASE64_SIGNATURE'
{
  "id": 42,
  "number": 1,
  "name": "Smith Residence AV - Change Order 1",
  "status": "Draft",
  "createdDate": "2026-04-01T10:00:00Z",
  "lastModifiedDate": "2026-04-05T14:30:00Z",
  "lastModifiedByUserDate": "2026-04-05T14:30:00Z",
  "lastSubmittedDate": null,
  "clientLastOpenedDate": null,
  "clientLastDecisionDate": null,
  "lastCompletedDate": null,
  "financialSummary": {
    "partsSubtotal": 800.00,
    "laborTotal": 350.00,
    "feeTotal": 100.00,
    "changeOrderSubtotal": 1250.00,
    "salesTax": {
      "taxStatus": "Ok",
      "total": 103.13
    }
  },
  "areas": [
    {
      "id": 55,
      "name": "Living Room",
      "options": [
        {
          "id": 201,
          "status": "Draft",
          "clientDescription": "Standard Installation Package",
          "items": []
        }
      ]
    }
  ],
  "customer": {
    "id": 101,
    "firstName": "Jane",
    "lastName": "Smith",
    "contactEmail": "jane@example.com",
    "contactPhone": "555-867-5309"
  },
  "dealer": {
    "id": 5,
    "name": "AV Solutions Inc."
  },
  "coverpageImageUrl": null,
  "aboutUs": null,
  "projectDescription": null,
  "profit": null,
  "recurringServices": null,
  "paymentSchedule": null,
  "paymentRequests": [],
  "projectTerms": null,
  "lastModifiedUser": {
    "id": 12,
    "firstName": "Alex",
    "lastName": "Johnson"
  }
}