---
title: "Permanently cancels a pending milestone"
method: PUT
path: "/contracts/{contract_id}/milestones/{milestone_ref}/cancellation"
tags: ["Contracts"]
---

# Permanently cancels a pending milestone

`PUT /contracts/{contract_id}/milestones/{milestone_ref}/cancellation`

## Request

- Base URL: `https://api.rillet.com`
- URL: `https://api.rillet.com/contracts/{contract_id}/milestones/{milestone_ref}/cancellation`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/rillet/apis/rillet-accounting-api/docs/contracts/:contract_id/milestones/:milestone_ref/cancellation/put.ts> (a function with typed inputs; its response is checked against the schema)

Permanently forfeits a pending milestone allocation on a FULL contract without redistributing it or automatically issuing a refund. A nonzero allocation creates a linked credit memo; zero allocations do not. Retrying the saved effective_date is a no-op, while a different date conflicts. Completed milestones must be reversed before cancellation.

## Path parameters

- `contract_id` string, uuid, required
- `milestone_ref` string, required

## Request body

- CancelMilestoneRequest
  - `effective_date` string, date, required: Cancellation business date within the contract term and allowed accounting period.

## Response `200`

The permanently cancelled milestone.

- ContractMilestone
  - `id` string, uuid, required: Stable server-generated identifier for this contract milestone.
  - `key` string, required: Stable integration key copied from the product template or explicit contract plan.
  - `name` string, required
  - `sequence` integer, required
  - `percentage` string, nullable: Present only in PERCENTAGE mode. "30" means 30 percent.
  - `allocated_amount` RoundedMonetaryAmount: A monetary amount that must be rounded to the currency's default decimal places (e.g., 2 decimal places for USD).
    - `amount` string, required: Monetary amount in decimal format, using a period (.) as the decimal separator. Must be rounded to the currency's default decimal places (e.g. '1.01' in USD represents 1 dollar and 1 cent).
    - `currency` string, required: Currency code following ISO-4217
  - `amount` RoundedMonetaryAmount: A monetary amount that must be rounded to the currency's default decimal places (e.g., 2 decimal places for USD).
    - `amount` string, required: Monetary amount in decimal format, using a period (.) as the decimal separator. Must be rounded to the currency's default decimal places (e.g. '1.01' in USD represents 1 dollar and 1 cent).
    - `currency` string, required: Currency code following ISO-4217
  - `expected_date` string, date, nullable
  - `status` 'OPEN' | 'DUE_THIS_PERIOD' | 'OVERDUE' | 'COMPLETED' | 'CANCELLED', required
  - `completed_date` string, date, nullable
  - `memo` string, nullable
  - `external_references` ExternalReference[], required
    - `type` string, required
    - `id` string, required
    - `url` string, uri
  - `cancellation` ContractMilestoneCancellation
    - `effective_date` string, date, required
    - `credit_memo_id` string, uuid, nullable: Linked credit memo for a nonzero allocation; null when the cancelled allocation is zero.

## Other responses

- `default`: Error

## Changes

- **2026-11-03** `c393d0102005`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rillet/apis/rillet-accounting-api/changes/contracts/:contract_id/milestones/:milestone_ref/cancellation/put.md)

---

[API](https://skmtc.dev/rillet/apis/rillet-accounting-api.md) - [All operations](https://skmtc.dev/rillet/apis/rillet-accounting-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rillet/apis/rillet-accounting-api/revisions/c393d0102005?raw)
