Skip to main content
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.
createdDate
string
ISO 8601 timestamp of when the change order was created.
lastModifiedDate
string
ISO 8601 timestamp of the most recent modification. Also returned as the Last-Modified response header.
lastModifiedByUserDate
string
ISO 8601 timestamp of the last modification made by a user.
financialSummary
object
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., Calculated, Exempt, Undefined).
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.

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,
  "createdDate": "2026-04-01T10:00:00Z",
  "lastModifiedDate": "2026-04-05T14:30:00Z",
  "lastModifiedByUserDate": "2026-04-05T14:30:00Z",
  "financialSummary": {
    "partsSubtotal": 800.00,
    "laborTotal": 350.00,
    "feeTotal": 100.00,
    "changeOrderSubtotal": 1250.00,
    "salesTax": {
      "taxStatus": "Calculated",
      "total": 103.13
    }
  },
  "areas": [
    {
      "id": 55,
      "name": "Living Room",
      "options": [
        {
          "id": 201,
          "status": "Approved",
          "clientDescription": "Standard Installation Package",
          "lineItems": []
        }
      ]
    }
  ],
  "customer": {
    "id": 101,
    "partyType": "Person",
    "contactType": "Client",
    "firstName": "Jane",
    "lastName": "Smith",
    "contactEmail": "jane@example.com",
    "contactPhone": "555-867-5309"
  }
}