---
title: "Create Contract Milestone"
method: POST
path: "/rr/api/v1/contracts/{contract_id}/milestones"
tags: ["Revenue Recognition"]
---

# Create Contract Milestone

`POST /rr/api/v1/contracts/{contract_id}/milestones`

Create a new milestone for a contract. This will automatically create an associated revenue transaction.

## Path parameters

- `contract_id` integer, required

## Request body

- ContractMilestone
  - `id` integer, required
  - `customer` integer, required
  - `contract` integer, required
  - `product` integer, nullable
  - `product_bundle` string, required
  - `contract_product_bundle` ContractProductBundleRead, required — Read-only serializer for ContractProductBundle in milestone responses.
    - `id` integer, required
    - `source_bundle` integer, nullable — Original ProductBundle template this was created from
    - `source_bundle_name` string, nullable, required
    - `total_amount` number, double, required — Total amount to be allocated across products
    - `currency` string
    - `lines` ContractProductBundleLineRead[], required
      - `id` integer, required
      - `product` integer, required
      - `product_name` string, required
      - `amount` number, double, required — Dollar amount allocated to this product
      - `percentage` string, required
      - `original_percentage` number, double, nullable — Original percentage from source ProductBundle for auditing
  - `product_name` string, required
  - `product_bundle_name` string, required
  - `milestone_name` string, required
  - `milestone_date` string, date, required
  - `amount` number, double, required
  - `quantity` number, double
  - `rate` number, double
  - `description` string, nullable
  - `department` integer, nullable
  - `department_name` string, required
  - `tags` object[], required
  - `revenue_transaction_id` integer, required
  - `created_at` string, date-time, required
  - `last_modified_at` string, required
  - `is_deleted` boolean, required
  - `deleted_at` string, date-time, nullable, required

## Response `201`

- ContractMilestone
  - `id` integer, required
  - `customer` integer, required
  - `contract` integer, required
  - `product` integer, nullable
  - `product_bundle` string, required
  - `contract_product_bundle` ContractProductBundleRead, required — Read-only serializer for ContractProductBundle in milestone responses.
    - `id` integer, required
    - `source_bundle` integer, nullable — Original ProductBundle template this was created from
    - `source_bundle_name` string, nullable, required
    - `total_amount` number, double, required — Total amount to be allocated across products
    - `currency` string
    - `lines` ContractProductBundleLineRead[], required
      - `id` integer, required
      - `product` integer, required
      - `product_name` string, required
      - `amount` number, double, required — Dollar amount allocated to this product
      - `percentage` string, required
      - `original_percentage` number, double, nullable — Original percentage from source ProductBundle for auditing
  - `product_name` string, required
  - `product_bundle_name` string, required
  - `milestone_name` string, required
  - `milestone_date` string, date, required
  - `amount` number, double, required
  - `quantity` number, double
  - `rate` number, double
  - `description` string, nullable
  - `department` integer, nullable
  - `department_name` string, required
  - `tags` object[], required
  - `revenue_transaction_id` integer, required
  - `created_at` string, date-time, required
  - `last_modified_at` string, required
  - `is_deleted` boolean, required
  - `deleted_at` string, date-time, nullable, required

---

[API](https://skmtc.net/campfire/apis/campfire-developer-apis.md) · [All operations](https://skmtc.net/campfire/apis/campfire-developer-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/campfire/campfire-developer-apis/versions/6945ebc3180e/schema)
