---
title: "Create Change Order"
method: POST
path: "/public/v2/contracts/{contract_id}/change-orders/"
tags: ["Contracts"]
---

# Create Change Order

`POST /public/v2/contracts/{contract_id}/change-orders/`

Create a change order on a contract. Incomplete payloads are saved as drafts. Complete payloads are validated and applied.

## Path parameters

- `contract_id` integer, required

## Headers

- `Idempotency-Key` string

## Request body

- PublicContractChangeOrderSchemaCreateIn
  - `effective_date` string, date, nullable
  - `memo` string
  - `apply_cumulative_catchup` boolean
  - `obligation_modifications` ObligationModificationIn[]
    - `obligation_id` integer, nullable
    - `quantity` union
      - number
      - string
    - `rate` union
      - number
      - string
    - `item_id` integer, nullable
    - `memo` string, nullable
    - `discount_type` string, nullable
    - `discount_value` union
      - number
      - string
    - `standalone_selling_price` union
      - number
      - string
    - `obligation_conditions` object, nullable
    - `cancel` boolean
  - `obligation_additions` PerformanceObligationIn[]
    - `id` integer, nullable
    - `item_id` integer, nullable
    - `quantity` union
      - number
      - string
    - `rate` union
      - number
      - string
    - `position` integer
    - `memo` string
    - `standalone_selling_price` union
      - number
      - string
    - `term_id` integer, nullable
    - `billing_group` integer
    - `recognition_strategy` 'straight_line' | 'straight_line_start_end_even' | 'daily_prorata' | 'milestone' | 'usage_tiered' | 'usage' | 'immediate' | 'deposit_release'
    - `obligation_conditions` object
    - `classifications` RecordClassificationsSchemaOut[]
      - `id` integer, required
      - `name` string, required
      - `line_id` integer, required
      - `line_name` string, required
      - `parent_classification_id` integer, nullable
      - `parent_classification_line_id` integer, nullable
    - `billing_start_date` string, date, nullable
    - `billing_end_date` string, date, nullable
    - `billing_frequency` 'one_time' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually'
    - `billing_interval` integer, nullable
    - `sync_billing_with_recognition` boolean
    - `skip_invoice_generation` boolean
    - `recognition_start_date` string, date, nullable
    - `recognition_end_date` string, date, nullable
    - `recognition_frequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually'
    - `recognition_interval` integer, nullable
    - `discount_type` 'PERCENTAGE' | 'FIXED'
    - `discount_value` union
      - number
      - string
    - `selected_vat_rate_id` integer, nullable
    - `selected_gst_tax_rate_id` integer, nullable
    - `is_auto_renewable` boolean

## Response `201`

Created

- ContractChangeOrderSchemaOut
  - `id` integer, required
  - `number` integer, required
  - `company_id` integer, required
  - `company_name` string, required
  - `contract_id` integer, required
  - `contract_name` string, required
  - `effective_date` string, date, nullable, required
  - `memo` string, nullable, required
  - `apply_cumulative_catchup` boolean, required
  - `catchup_amount` string, nullable
  - `transaction_id` integer, nullable, required
  - `record_status` 'draft' | 'posted' | 'archived', required
  - `is_incomplete` boolean, required
  - `obligation_modifications` object[], required
  - `obligation_additions` PerformanceObligationIn[], required
    - `id` integer, nullable
    - `item_id` integer, nullable
    - `quantity` union
      - number
      - string
    - `rate` union
      - number
      - string
    - `position` integer
    - `memo` string
    - `standalone_selling_price` union
      - number
      - string
    - `term_id` integer, nullable
    - `billing_group` integer
    - `recognition_strategy` 'straight_line' | 'straight_line_start_end_even' | 'daily_prorata' | 'milestone' | 'usage_tiered' | 'usage' | 'immediate' | 'deposit_release'
    - `obligation_conditions` object
    - `classifications` RecordClassificationsSchemaOut[]
      - `id` integer, required
      - `name` string, required
      - `line_id` integer, required
      - `line_name` string, required
      - `parent_classification_id` integer, nullable
      - `parent_classification_line_id` integer, nullable
    - `billing_start_date` string, date, nullable
    - `billing_end_date` string, date, nullable
    - `billing_frequency` 'one_time' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually'
    - `billing_interval` integer, nullable
    - `sync_billing_with_recognition` boolean
    - `skip_invoice_generation` boolean
    - `recognition_start_date` string, date, nullable
    - `recognition_end_date` string, date, nullable
    - `recognition_frequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually'
    - `recognition_interval` integer, nullable
    - `discount_type` 'PERCENTAGE' | 'FIXED'
    - `discount_value` union
      - number
      - string
    - `selected_vat_rate_id` integer, nullable
    - `selected_gst_tax_rate_id` integer, nullable
    - `is_auto_renewable` boolean
  - `change_summary` ObligationChangeSummary[]
    - `predecessor` PerformanceObligationOut — Output schema for performance obligation (contract line item).
      - `id` integer, nullable
      - `item_id` integer, nullable
      - `item_type` string, nullable
      - `item_name` string, nullable
      - `hsn_sac_code` string, nullable
      - `quantity` string, nullable
      - `rate` string, nullable
      - `position` integer, required
      - `memo` string, required
      - `standalone_selling_price` string, nullable
      - `term_id` integer, nullable
      - `billing_group` integer
      - `recognition_strategy` 'straight_line' | 'straight_line_start_end_even' | 'daily_prorata' | 'milestone' | 'usage_tiered' | 'usage' | 'immediate' | 'deposit_release'
      - `obligation_conditions` object
      - `classifications` RecordClassificationsSchemaOut[]
        - `id` integer, required
        - `name` string, required
        - `line_id` integer, required
        - `line_name` string, required
        - `parent_classification_id` integer, nullable
        - `parent_classification_line_id` integer, nullable
      - `billing_start_date` string, date, required
      - `billing_end_date` string, date, nullable
      - `billing_frequency` 'one_time' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually', required
      - `billing_interval` integer, required
      - `sync_billing_with_recognition` boolean
      - `skip_invoice_generation` boolean
      - `recognition_start_date` string, date, required
      - `recognition_end_date` string, date, nullable
      - `recognition_frequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually', required
      - `recognition_interval` integer, required
      - `discount_type` 'PERCENTAGE' | 'FIXED'
      - `discount_value` string, nullable
      - `allocated_amount` string, nullable
      - `selected_vat_rate_id` integer, nullable
      - `selected_gst_tax_rate_id` integer, nullable
      - `is_auto_renewable` boolean
      - `auto_renewal_date` string, date, nullable
      - `renewed_from_id` integer, nullable
      - `changed_from_id` integer, nullable
      - `change_lineage_root_id` integer, nullable
      - `is_incomplete` boolean, required
      - `amount` string, required
      - `discount_amount` string, required
      - `net_amount` string, required
      - `qualifies_for_mrr` boolean, required — Whether this obligation should be included in MRR/ARR calculations.
    - `successor` PerformanceObligationOut — Output schema for performance obligation (contract line item).
      - `id` integer, nullable
      - `item_id` integer, nullable
      - `item_type` string, nullable
      - `item_name` string, nullable
      - `hsn_sac_code` string, nullable
      - `quantity` string, nullable
      - `rate` string, nullable
      - `position` integer, required
      - `memo` string, required
      - `standalone_selling_price` string, nullable
      - `term_id` integer, nullable
      - `billing_group` integer
      - `recognition_strategy` 'straight_line' | 'straight_line_start_end_even' | 'daily_prorata' | 'milestone' | 'usage_tiered' | 'usage' | 'immediate' | 'deposit_release'
      - `obligation_conditions` object
      - `classifications` RecordClassificationsSchemaOut[]
        - `id` integer, required
        - `name` string, required
        - `line_id` integer, required
        - `line_name` string, required
        - `parent_classification_id` integer, nullable
        - `parent_classification_line_id` integer, nullable
      - `billing_start_date` string, date, required
      - `billing_end_date` string, date, nullable
      - `billing_frequency` 'one_time' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually', required
      - `billing_interval` integer, required
      - `sync_billing_with_recognition` boolean
      - `skip_invoice_generation` boolean
      - `recognition_start_date` string, date, required
      - `recognition_end_date` string, date, nullable
      - `recognition_frequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semi_annually' | 'annually', required
      - `recognition_interval` integer, required
      - `discount_type` 'PERCENTAGE' | 'FIXED'
      - `discount_value` string, nullable
      - `allocated_amount` string, nullable
      - `selected_vat_rate_id` integer, nullable
      - `selected_gst_tax_rate_id` integer, nullable
      - `is_auto_renewable` boolean
      - `auto_renewal_date` string, date, nullable
      - `renewed_from_id` integer, nullable
      - `changed_from_id` integer, nullable
      - `change_lineage_root_id` integer, nullable
      - `is_incomplete` boolean, required
      - `amount` string, required
      - `discount_amount` string, required
      - `net_amount` string, required
      - `qualifies_for_mrr` boolean, required — Whether this obligation should be included in MRR/ARR calculations.
    - `type` 'MODIFICATION' | 'CANCELLATION' | 'ADDITION', required
    - `changes` object

## Other responses

- `404` — Not Found
- `422` — Unprocessable Content
- `500` — Internal Server Error

---

[API](https://skmtc.net/dualentry/apis/dualentry-public-api.md) · [All operations](https://skmtc.net/dualentry/apis/dualentry-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/dualentry/dualentry-public-api/revisions/f338ec8b3f52/schema)
