QuickBooks Change Order API

A change order represents a modification to the scope of work on an existing project estimate. It captures additions or deletions to the original contracted work, and rolls up into the project's total budget alongside the parent estimate. Change orders are available for US companies on QuickBooks Online Advanced with the Construction Pack or Intuit Enterprise Suite, with the Projects feature enabled.

Operations 2

POST /v3/company/{realmID}/changeorder Create a change order / Delete a change order / Full update a change order #
GET /v3/company/{realmID}/changeorder/{changeorderId} Read a change order #

Documentation

Specifications

Schemas & Data

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/quickbooks:quickbooks-changeorder-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

quickbooks-changeorder-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: QuickBooks Online Accounting Change Order API
  version: '2026-11-05'
  description: QuickBooks Online Accounting API (v3). Entities, reports, query, batch and change-data-capture operations for a QuickBooks Online company (realmId). Generated from the JSON Intuit's API Explorer renders; Intuit publishes no OpenAPI document.
  termsOfService: https://developer.intuit.com/app/developer/qbo/docs/legal-agreements/intuit-terms-of-service-for-intuit-developer-services
  contact:
    name: Intuit Developer Support
    url: https://help.developer.intuit.com/s/
  x-generated-from: documentation
  x-generator: convert-intuit-api-explorer.py (deterministic conversion of the provider's API Explorer JSON; no model)
  x-source:
  - https://static.developer.intuit.com/JSONObjects/EntityJsonObject_v1.json
  - https://static.developer.intuit.com/JSONObjects/CodesModelsJsonObjects_v2.json
  - https://static.developer.intuit.com/JSONObjects/TocJsonObject_v1.json
  x-generated: '2026-11-05'
servers:
- url: https://quickbooks.api.intuit.com
  description: Production
- url: https://sandbox-quickbooks.api.intuit.com
  description: Sandbox
security:
- oauth2:
  - com.intuit.quickbooks.accounting
tags:
- name: ChangeOrder
  description: A change order represents a modification to the scope of work on an existing project estimate. It captures additions or deletions to the original contracted work, and rolls up into the project's total budget alongside the parent estimate. Change orders are available for US companies on QuickBooks Online Advanced with the Construction Pack or Intuit Enterprise Suite, with the Projects feature enabled.
paths:
  /v3/company/{realmID}/changeorder:
    post:
      operationId: createChangeOrder
      summary: Create a change order / Delete a change order / Full update a change order
      tags:
      - ChangeOrder
      x-source: https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/changeorder
      x-intuit-operation: POST /v3/company/<realmID>/changeorder
      description: 'Change order creation is available only for US companies on QuickBooks Online Advanced with the Construction Pack Add-on or Intuit Enterprise Suite, with the Projects feature enabled.

        A change order must have ProjectRef populated with a valid, active project.

        A change order must have at least one line with DetailType: "SalesItemLineDetail".

        Every line must include a LinkedTxn array referencing the parent project estimate using TxnType: "Estimate". All lines must reference the same parent estimate.

        CustomerRef must match the customer on the parent project estimate.


        **Delete a change order** (POST /v3/company//changeorder?operation=delete): This operation deletes the Change Order object specified in the request body. Include a minimum of ChangeOrder.Id and ChangeOrder.SyncToken in the request body. This action is irreversible. Deleting a change order does not modify the parent project estimate; only the project''s cumulative total is recalculated.


        **Full update a change order** (POST /v3/company//changeorder): Use this operation to update any of the writable fields of an existing Change Order object. The request body must include all writable fields of the existing object as returned in a read response. Writable fields omitted from the request body are set to NULL. The ID of the object to update is specified in the request body.


        Note: When updating lines, include all existing lines you want to retain. Lines omitted from the request body will be deleted. Always re-include LinkedTxn on every line.'
      parameters:
      - name: realmID
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/changeorderrequest'
              - $ref: '#/components/schemas/changeorderresponse'
          application/json or application/xml:
            schema:
              $ref: '#/components/schemas/deleterequest'
        required: true
        description: The minimum elements to create a change order are listed here.
      responses:
        '200':
          description: The change order response body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/changeorderresponse'
        '400':
          $ref: '#/components/responses/Fault'
        '401':
          $ref: '#/components/responses/Fault'
        '429':
          $ref: '#/components/responses/Throttled'
      security:
      - oauth2:
        - com.intuit.quickbooks.accounting
      x-intuit-variants:
      - name: Delete a change order
        operationId: deleteChangeOrder
        x-source: https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/changeorder
        x-intuit-operation: POST /v3/company/<realmID>/changeorder?operation=delete
        description: This operation deletes the Change Order object specified in the request body. Include a minimum of ChangeOrder.Id and ChangeOrder.SyncToken in the request body. This action is irreversible. Deleting a change order does not modify the parent project estimate; only the project's cumulative total is recalculated.
        requestSchema:
          $ref: '#/components/schemas/deleterequest'
      - name: Full update a change order
        operationId: updateChangeOrder
        x-source: https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/changeorder
        x-intuit-operation: POST /v3/company/<realmID>/changeorder
        description: 'Use this operation to update any of the writable fields of an existing Change Order object. The request body must include all writable fields of the existing object as returned in a read response. Writable fields omitted from the request body are set to NULL. The ID of the object to update is specified in the request body.


          Note: When updating lines, include all existing lines you want to retain. Lines omitted from the request body will be deleted. Always re-include LinkedTxn on every line.'
        requestSchema:
          $ref: '#/components/schemas/changeorderresponse'
  /v3/company/{realmID}/changeorder/{changeorderId}:
    get:
      operationId: readChangeOrder
      summary: Read a change order
      tags:
      - ChangeOrder
      x-source: https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/changeorder
      x-intuit-operation: GET /v3/company/<realmID>/changeorder/<changeorderId>
      description: Retrieves the details of a change order that has been previously created.
      parameters:
      - name: realmID
        in: path
        required: true
        schema:
          type: string
      - name: changeorderId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The change order response body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/changeorderresponse'
        '400':
          $ref: '#/components/responses/Fault'
        '401':
          $ref: '#/components/responses/Fault'
        '429':
          $ref: '#/components/responses/Throttled'
      security:
      - oauth2:
        - com.intuit.quickbooks.accounting
components:
  schemas:
    linkedtxn:
      type: object
      title: linkedtxn
      properties:
        TxnLineId:
          type: string
          description: 'Required for Deposit and Bill entities. The line number of a specific line of the linked transaction. If supplied, the

            TxnId and

            TxnType attributes of the linked transaction must also be populated.'
          x-intuit-required: Conditionally required
        TxnId:
          type: string
          description: Transaction Id of the related transaction.
          x-intuit-required: Required
        TxnType:
          type: string
          description: Transaction type of the linked object.
          x-intuit-required: Required
      required:
      - TxnId
      - TxnType
    changeorderresponse:
      type: object
      title: changeorderresponse
      properties:
        TxnDate:
          type: string
          format: date
          description: The date entered by the user when this transaction occurred. For posting transactions, this is the posting date that affects the financial statements. If not supplied, the current date on the server is used. Sort order is ASC by default.
          x-intuit-required: Optional
          x-intuit-default: current server date
          x-intuit-filterable: true
          x-intuit-sortable: true
        PrintStatus:
          type: string
          description: 'Printing status of the change order. Valid values: NotSet, NeedToPrint, PrintComplete.'
          x-intuit-required: Optional
          x-intuit-default: <span class="literal">NotSet</span>
        TxnStatus:
          type: string
          description: 'Current status of the change order. Valid values: Pending (default — created but not yet reviewed), Accepted (customer approved; project contracted total increases accordingly), Closed (converted to an Invoice or manually closed), Rejected (customer declined; does not affect project total).'
          x-intuit-required: Optional
          x-intuit-default: Pending
        LinkedTxn:
          type: array
          items:
            $ref: '#/components/schemas/linkedtxn'
          description: One or more linked transaction references at the header level, reflecting the parent project estimate. Also appears on each line item. Use LinkedTxn.TxnId as the ID in a separate Estimate read request to retrieve details of the linked object. TxnType must always be Estimate.
          x-intuit-required: Required
        TotalAmt:
          type: number
          description: Total amount of the transaction including all line charges and taxes. Calculated by QuickBooks business logic from the sum of all line Amount values plus applicable tax. Do not include in create or update request bodies; any value supplied is overwritten.
        AcceptedDate:
          type: string
          format: date
          description: Date the change order was accepted. Populated when TxnStatus is set to Accepted.
          x-intuit-required: Optional
        ExpirationDate:
          type: string
          format: date
          description: Date by which the change order must be accepted before it expires.
          x-intuit-required: Optional
        ApplyTaxAfterDiscount:
          type: boolean
          description: If false or null, sales tax is calculated first and then any discount is applied. If true, the discount is subtracted first and then sales tax is calculated.
          x-intuit-required: Optional
          x-intuit-default: false
        DocNumber:
          type: string
          description: Reference number for the change order (for example, CO-001). If not provided, the value is null.
          x-intuit-required: Optional
          x-intuit-filterable: true
          x-intuit-sortable: true
        PrivateNote:
          type: string
          description: Organization-private note about the change order. This note does not appear on documents sent to the customer.
          x-intuit-required: Optional
        Line:
          type: array
          items:
            $ref: '#/components/schemas/line'
          description: 'Individual line items describing the work being added or removed. Supports SalesItemLineDetail and SubTotalLineDetail line types. Every line must include a LinkedTxn array referencing the parent project estimate with TxnType: "Estimate". All lines must reference the same parent estimate. The Line array uses full-replace behavior on update — lines omitted from an update request are deleted.'
          x-intuit-required: Required
        CustomerMemo:
          allOf:
          - $ref: '#/components/schemas/memoref'
          description: User-entered message to the customer; visible on the Change Order document sent to the customer.
          x-intuit-required: Optional
        ProjectRef:
          allOf:
          - $ref: '#/components/schemas/referencetype'
          description: Reference to the project this change order belongs to. Must reference an active project. Without a valid ProjectRef, the change order will not appear in the Projects dashboard.
          x-intuit-required: Required
          x-intuit-filterable: true
        CustomerRef:
          allOf:
          - $ref: '#/components/schemas/referencetype'
          description: Reference to the customer associated with this change order. Must match the customer on the parent project estimate. Use Customer.Id and Customer.DisplayName from the Customer object for CustomerRef.value and CustomerRef.name, respectively.
          x-intuit-required: Required
          x-intuit-filterable: true
        TxnTaxDetail:
          allOf:
          - $ref: '#/components/schemas/txntaxdetail'
          description: Tax details for the transaction. Captures sales taxes calculated based on tax codes referenced by the transaction lines.
          x-intuit-required: Optional
        SyncToken:
          type: string
          description: Version number of the object. It is used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented. Attempts to modify an object specifying an older SyncToken fail. Only the latest version of the object is maintained by QuickBooks Online.
          x-intuit-required: Required for update
        AcceptedBy:
          type: string
          description: Name of the customer or representative who accepted the change order. Populated when TxnStatus is set to Accepted.
          x-intuit-required: Optional
        TotalCostAmount:
          type: number
          description: Total cost amount of the transaction, calculated from the sum of all line CostAmount values. Calculated by QuickBooks business logic; any value supplied is overwritten.
        EmailStatus:
          type: string
          description: 'Email status of the change order. Valid values: NotSet, NeedToSend, EmailSent.'
          x-intuit-required: Optional
          x-intuit-default: <span class="literal">NotSet</span>
        MetaData:
          allOf:
          - $ref: '#/components/schemas/modificationmetadata'
          description: Descriptive information about the object. The MetaData values are set by Data Services and are read only for all applications.
          x-intuit-required: Optional
        BillEmail:
          allOf:
          - $ref: '#/components/schemas/emailaddress'
          description: Email address where the change order is sent. Required when EmailStatus is set to NeedToSend.
          x-intuit-required: Conditionally required
        Id:
          type: string
          description: Unique identifier for this object.
          x-intuit-required: Required for update
          x-intuit-filterable: true
      required:
      - CustomerRef
      - Line
      - LinkedTxn
      - ProjectRef
    deleterequest:
      type: object
      title: deleterequest
      properties:
        SyncToken:
          type: string
          description: Version number of the object. It is used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented. Attempts to modify an object specifying an older SyncToken fails. Only the latest version of the object is maintained by QuickBooks Online.
          x-intuit-required: Required
        id:
          type: string
          description: Unique identifier for this object.
          x-intuit-required: Required
          x-intuit-filterable: true
      required:
      - SyncToken
      - id
    txntaxdetail:
      type: object
      title: txntaxdetail
      properties:
        TxnTaxCodeRef:
          allOf:
          - $ref: '#/components/schemas/referencetype'
          description: 'Reference to the transaction tax code. Query the TaxCode name list resource to determine the appropriate TaxCode object for this reference. Use TaxCode.Id and TaxCode.Name from that object for TaxCodeRef.value and TaxCodeRef.name, respectively. If specified and sales tax is disabled (Preferences.TaxPrefs.UsingSalesTax is set to false), this element is ignored and not returned. For sales transactions, only: if automated sales tax is enabled (Preferences.TaxPrefs.PartnerTaxEnabled is set to true) the supplied transaction tax code is replaced by the automated sales tax engine recommendation.'
          x-intuit-required: Optional
        TotalTax:
          type: number
          description: Total tax calculated for the transaction, excluding any tax lines manually inserted into the transaction line list.
          x-intuit-required: Optional
        TaxLine:
          type: array
          items:
            $ref: '#/components/schemas/line'
          x-intuit-required: Optional
    memoref:
      type: object
      title: memoref
      properties:
        value:
          type: string
          description: User-entered message to the customer; this message is visible to the end user on their transactions.
          x-intuit-required: Required
      required:
      - value
    referencetype:
      type: object
      title: referencetype
      properties:
        name:
          type: string
          description: An identifying name for the object being referenced by value and is derived from the field that holds the common name of that object. This varies by context and specific type of object referenced. For example, references to a Customer object use Customer.DisplayName to populate this field. Optionally returned in responses, implementation dependent.
          x-intuit-required: Optional
        value:
          type: string
          description: The ID for the referenced object as found in the Id field of the object payload. The context is set by the type of reference and is specific to the QuickBooks company file.
          x-intuit-required: Required
      required:
      - value
    IntuitFault:
      type: object
      properties:
        Fault:
          type: object
          properties:
            type:
              type: string
              enum:
              - ValidationFault
              - SystemFault
              - AuthenticationFault
              - AuthorizationFault
            Error:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  element:
                    type: string
                  Message:
                    type: string
                  Detail:
                    type: string
        time:
          type: string
          format: date-time
    emailaddress:
      type: object
      title: emailaddress
      properties:
        Address:
          type: string
          description: An email address. The address format must follow the RFC 822 standard.
          x-intuit-required: Optional
    changeorderrequest:
      type: object
      title: changeorderrequest
      properties:
        DocNumber:
          type: string
          description: Reference number for the change order (for example, CO-001). If not provided, the value is null.
          x-intuit-required: Optional
          x-intuit-filterable: true
          x-intuit-sortable: true
        TxnStatus:
          type: string
          description: 'Current status of the change order. Valid values: Pending, Accepted, Closed, Rejected.'
          x-intuit-required: Optional
          x-intuit-default: Pending
        PrivateNote:
          type: string
          description: Organization-private note about the change order. This note does not appear on documents sent to the customer.
          x-intuit-required: Optional
        TxnDate:
          type: string
          format: date
          description: The date entered by the user when this transaction occurred. If not supplied, the current date on the server is used.
          x-intuit-required: Optional
          x-intuit-default: current server date
          x-intuit-filterable: true
          x-intuit-sortable: true
        BillEmail:
          allOf:
          - $ref: '#/components/schemas/emailaddress'
          description: Email address where the change order is sent. Required when EmailStatus is set to NeedToSend.
          x-intuit-required: Conditionally required
        CustomerMemo:
          allOf:
          - $ref: '#/components/schemas/memoref'
          description: User-entered message to the customer; visible on the Change Order document sent to the customer.
          x-intuit-required: Optional
        ProjectRef:
          allOf:
          - $ref: '#/components/schemas/referencetype'
          description: Reference to the project this change order belongs to. The project must be active. Without a valid ProjectRef, the change order will not appear in the Projects dashboard.
          x-intuit-required: Required
          x-intuit-filterable: true
        PrintStatus:
          type: string
          description: 'Printing status of the change order. Valid values: NotSet, NeedToPrint, PrintComplete.'
          x-intuit-required: Optional
          x-intuit-default: <span class="literal">NotSet</span>
        ExpirationDate:
          type: string
          format: date
          description: Date by which the change order must be accepted before it expires.
          x-intuit-required: Optional
        Line:
          type: object
          x-intuit-type: Change Order line object
          description: 'Individual line items describing the work being added or removed. Each line must include a LinkedTxn array referencing the parent project estimate with TxnType: "Estimate". All lines must reference the same parent estimate. Supports SalesItemLineDetail line type.'
          x-intuit-required: Required
        CustomerRef:
          allOf:
          - $ref: '#/components/schemas/referencetype'
          description: Reference to the customer associated with this change order. Must match the customer on the parent project estimate. Query the Customer name list resource to determine the appropriate Customer object for this reference. Use Customer.Id and Customer.DisplayName from that object for CustomerRef.value and CustomerRef.name, respectively.
          x-intuit-required: Required
          x-intuit-filterable: true
        EmailStatus:
          type: string
          description: 'Email status of the change order. Valid values: NotSet, NeedToSend, EmailSent.'
          x-intuit-required: Optional
          x-intuit-default: <span class="literal">NotSet</span>
      required:
      - CustomerRef
      - Line
      - ProjectRef
    modificationmetadata:
      type: object
      title: modificationmetadata
      properties:
        CreateTime:
          type: string
          format: date-time
          description: Time the entity was created in the source domain.
          x-intuit-filterable: true
          x-intuit-sortable: true
        LastUpdatedTime:
          type: string
          format: date-time
          description: Time the entity was last updated in the source domain.
          x-intuit-filterable: true
          x-intuit-sortable: true
    line:
      type: object
      title: line
      properties:
        Received:
          type: string
          description: Supported for Purchase Order only. The amount/quantity received of the line, which depends on the type of the line. It can represent the received amount or received quantity based on the line type detail. Applies to existing and new entities.
        LinkedTxn:
          type: array
          items: {}
          description: Transaction to which the current entity is related. For example, an invoice line may link to a sales order or estimate.
          x-intuit-required: Optional
        Description:
          type: string
          description: Free form text description of the line item that appears in the printed record.
          x-intuit-required: Optional
        ProjectRef:
          allOf:
          - $ref: '#/components/schemas/referencetype'
          description: Reference to the Project ID associated with this transaction.
          x-intuit-required: Conditionally required
        LineNum:
          type: number
          description: Specifies the position of the line in the collection of transaction lines. Positive integer
          x-intuit-required: Optional
        Amount:
          type: number
          description: The amount of the line item.
          x-intuit-required: Required
        Id:
          type: string
          description: 'The Id of the line item. Its use in requests is as folllows:

            If

            Idis greater than zero and exists for the company, the request is considered an update operation for a line item.


            If no

            Idis provided, the

            Idprovided is less than or equal to zero, or the

            Idprovided is greater than zero and does not exist for the company then the request is considered a create operation for a line item.


            Available in all objects that use lines and support the update operation.'
          x-intuit-required: Required for update
      required:
      - Amount
  responses:
    Fault:
      description: Error. The body carries a Fault element (type ValidationFault, SystemFault, AuthenticationFault or AuthorizationFault) with one or more Error entries (code, element, Message, Detail).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IntuitFault'
    Throttled:
      description: 'HTTP 429: the request was throttled. Wait 60 seconds before retrying.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IntuitFault'
  securitySchemes:
    oauth2:
      type: oauth2
      description: 'Intuit OAuth 2.0 (authorization code). Discovery: https://developer.api.intuit.com/.well-known/openid_configuration'
      flows:
        authorizationCode:
          authorizationUrl: https://appcenter.intuit.com/connect/oauth2
          tokenUrl: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
          refreshUrl: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
          scopes:
            com.intuit.quickbooks.accounting: Grants access to the QuickBooks Online Accounting API, which focuses on accounting data.
            com.intuit.quickbooks.payment: Grants access to the QuickBooks Payments API, which focuses on payments processing.
            openid: Grants access to OpenID Connect features.
            profile: User's given and family names info
            email: User's email address
            phone: User's phone number
            address: User's physical address
x-generated-from: documentation
x-provenance:
  method: generated
  generated: '2026-11-05'
  source: https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account
  note: Converted from the JSON the developer.intuit.com API Explorer loads (static.developer.intuit.com/JSONObjects). Intuit publishes no OpenAPI document; this is a faithful machine transformation of its own reference data, graded as generated.