# PUT /api/proposals/{id} > Proposals - Update a Proposal - **Endpoint:** `PUT /api/proposals/{id}` - **Group:** Proposals - **Since:** v1.0.0 - **Defined in:** `RestApi/Controllers/ProposalsController.php` ## Headers | Field | Type | Description | | --- | --- | --- | | `authtoken` | String | Authentication token, generated from admin area | ## Parameters | Field | Type | Required | Description | | --- | --- | --- | --- | | `id` | Number | yes | Proposal unique ID | | `proposal_date` | string | no | Optional Proposal date to update | | `valid_until` | string | no | Optional Valid until date to update | | `status` | string | no | Optional Status to update | | `note` | string | no | Optional Note to update | | `content` | string | no | Optional Content to update | | `discount_amount` | number | no | Optional Discount amount to update | | `items` | Object[] | no | Optional replacement proposal lines, in the same shape GET /api/proposals/:id/items returns. When present the existing lines are replaced; when absent the lines are left untouched. An empty array is rejected with a 400 instead of clearing the proposal. | | `items.title` | String | yes | Mandatory line title. A description is accepted instead. | | `items.description` | String | no | Optional line description | | `items.quantity` | Number | yes | Mandatory quantity, numeric | | `items.rate` | Number | yes | Mandatory unit rate, numeric | | `items.unit_type` | String | no | Optional unit type, maximum 20 characters | | `items.sort` | Number | no | Optional display order. Defaults to the array position. | | `items.item_id` | Number | no | Optional items library ID | ## Request example ```bash curl -X PUT "https://yoursite.com/index.php/api/proposals/123" \ -H "authtoken: YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "items.title": "...", "items.quantity": "...", "items.rate": "..." }' ``` ## Responses ### Success - Success-Response: ```json HTTP/1.1 200 OK { "status": 200, "messages": {"success": "Proposal Update Successful."} } ``` --- Part of the [REST API for RISE CRM](https://risecrm.themesic.com/apiguide/) documentation. Full page: https://risecrm.themesic.com/apiguide/proposals/update-proposal/