Beta APIs

[beta] Update a maintenance estimate

Update eligible quote content or convert the active selected expectedCost recommendation to vendorQuote with the same estimate ID. Type conversion can include pricing changes but must be separate from approval, cancellation and award; reverse conversion is not allowed. Otherwise approve or deny through Samsara approval and UTS, or separately award an approved quote through the native work-order flow. Award assigns the vendor and preserves the exact financial baseline; applying quote lines to work-order service tasks is a separate dashboard action. Selecting a different quote while an active award exists is rejected; withdraw an eligible awarded quote before awarding its replacement. Approval and award require their respective authority and must be separate updates. Approval, cancellation or award cannot be combined with content or external ID changes. Cancel an unapproved or pending estimate and close any open approval ticket. Cancellation retains history. For an active externally selected recommendation or unapproved quote, this existing cancellation path also releases that selection, clears its vendor assignment and returns an open work order to vendor selection. Cancelling an unselected recommendation leaves other selections unchanged, and native quote cancellation preserves vendor assignment. A current finished vendorQuote that is approved, denied or awarded can instead be withdrawn while retaining its approval decision and award history and retiring only its exact completed active award. This decided-quote withdrawal does not change the work order, vendor assignment, selection attempt, service tasks, actual costs or invoices. It is not restricted by whether repair work has started. Cancellation requires approval authority and, for a known or current award, separate award authority. Processing or superseded quotes and incomplete awards cannot be withdrawn; retry an award in progress after reconciliation. Repeating a cancellation is safe. Omitted fields remain unchanged.

<b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

To use this endpoint, select Write Work Orders under the Work Orders category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>

Submit Feedback: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

patch/maintenance/estimates

Request

  • Base URL
    https://api.samsara.com
  • Auth
    HTTP bearer

Query parameters

includeExternalIdsboolean

Include estimate external identifiers. Defaults to false.

idstring required

Estimate UUID or external ID.

Request body

approvalStatus'approved' | 'denied' | 'cancelled'

Approve or deny the current quote through Samsara approval and UTS. Cancel an unapproved or pending estimate and close any open approval ticket. For an active externally selected recommendation or unapproved quote, this existing cancellation path also releases that selection, clears its vendor assignment and returns an open work order to vendor selection. Unselected recommendations leave other selections unchanged, and native quote cancellation preserves vendor assignment. A current finished vendorQuote that is approved, denied or awarded can instead be withdrawn while retaining its approval decision and award history and retiring only its exact completed active award. This decided-quote withdrawal does not change the work order, vendor assignment, selection attempt, service tasks, actual costs or invoices. It is not restricted by whether repair work has started. Cancellation requires approval authority and, for a known or current award, separate award authority. Processing or superseded quotes and incomplete awards cannot be withdrawn; retry an award in progress after reconciliation. Repeating a cancellation is safe. Omit to preserve the current status. Send approval or cancellation separately from content changes, estimateType and isAwarded. Valid values: approved, denied, cancelled

estimateType'expectedCost' | 'vendorQuote'

Omit to preserve the type. Repeating the current type is allowed. Only the active selected expectedCost recommendation can become a vendorQuote, preserving its estimate ID. The reverse transition is not allowed. Type conversion can include pricing changes, but must be separate from approval, cancellation and award. Valid values: expectedCost, vendorQuote

externalIdsobject

Estimate external identifiers. Responses include these only when includeExternalIds=true; default omitted.

isAwardedboolean

Only true is writable: award an eligible approved quote, assign its vendor to the work order and preserve its financial baseline. Applying quote lines to work-order service tasks is a separate dashboard action. A different quote cannot replace an active award through this API; withdraw an eligible awarded quote before awarding its replacement. Send award separately from content and external ID changes. Defaults to unchanged when omitted; requires separate award authority.

notesstring

Notes, at most 4000 Unicode characters. PATCH null clears.

quotedAtTimestring date-time

Actual quote timestamp. Omit if the source only has a date; do not invent a time or offset. PATCH null clears.

Example request

{
  "lineItems": [
    {
      "amount": {
        "amount": "640.20",
        "currency": "usd"
      },
      "description": "Replace turbocharger",
      "id": "8ea6ff70-1e60-4ed9-9c68-a00d72cb720e"
    }
  ],
  "tax": {
    "amount": "64.02",
    "currency": "usd"
  }
}

Response

OK response.

Example response

{
  "data": {
    "approvalSource": "none",
    "approvalStatus": "unapproved",
    "attachments": [
      {
        "createdAtTime": "2026-10-07T15:00:00Z",
        "id": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
        "name": "repair-quote.pdf",
        "processingStatus": "finished",
        "updatedAtTime": "2026-10-07T15:00:00Z",
        "url": "https://example.com/file",
        "urlExpiresAt": "2026-10-07T15:00:00Z"
      }
    ],
    "createdAtTime": "2026-10-07T15:00:00Z",
    "estimateType": "vendorQuote",
    "externalIds": {
      "repairSystem": "quote-123"
    },
    "externalRequest": {
      "actionUrl": "https://example.com/requests/AI-563-1",
      "externalRequestId": "AI-563-1",
      "externalSystem": "Auto Integrate",
      "message": "Review quote in Auto Integrate"
    },
    "id": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
    "lineItems": [
      {
        "amount": {
          "amount": "640.2",
          "currency": "usd"
        },
        "costType": "labor",
        "description": "Replace turbocharger",
        "id": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
        "quantity": 2,
        "serviceTaskId": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
        "unitRate": {
          "amount": "95.005",
          "currency": "usd"
        }
      }
    ],
    "notes": "Contact shop before starting work.",
    "quotedAtTime": "2026-10-07T15:00:00Z",
    "subtotal": {
      "amount": "640.2",
      "currency": "usd"
    },
    "supersededByEstimateId": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
    "supersedesEstimateId": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
    "tax": {
      "amount": "640.2",
      "currency": "usd"
    },
    "total": {
      "amount": "640.2",
      "currency": "usd"
    },
    "updatedAtTime": "2026-10-07T15:00:00Z",
    "vendorId": "a81e26e6-50cd-4ae2-85b9-132c493c0871",
    "version": 1,
    "workOrderId": "464"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.