# POST /api/proposals > Proposals - Add New Proposal - **Endpoint:** `POST /api/proposals` - **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 | | --- | --- | --- | --- | | `client_id` | number | yes | Mandatory Client ID | | `proposal_date` | string | yes | Mandatory Proposal date (Y-m-d) | | `valid_until` | string | yes | Mandatory Valid until date (Y-m-d) | | `status` | string | no | Optional Status (draft, sent, accepted, declined) default: draft | | `note` | string | no | Optional Proposal note | | `content` | string | no | Optional Proposal content | | `project_id` | number | no | Optional Project ID | | `tax_id` | number | no | Optional Tax ID | | `tax_id2` | number | no | Optional Second tax ID | | `discount_amount` | number | no | Optional Discount amount | | `discount_amount_type` | string | no | Optional Discount type (percentage, fixed_amount) | | `created_by` | number | no | Optional RISE user ID. Default: 1. Use for proper attribution. | | `items` | Object[] | no | Optional proposal lines, in the same shape GET /api/proposals/:id/items returns. Omit the key to keep the previous behaviour of creating a header with no lines. An empty array is rejected with a 400. | | `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 POST "https://yoursite.com/index.php/api/proposals" \ -H "authtoken: YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": "...", "proposal_date": "...", "valid_until": "...", "items.title": "...", "items.quantity": "...", "items.rate": "..." }' ``` ## Responses ### Success - Success-Response: ```json HTTP/1.1 200 OK { "status": true, "message": "Proposal add successful." } ``` --- Part of the [REST API for RISE CRM](https://risecrm.themesic.com/apiguide/) documentation. Full page: https://risecrm.themesic.com/apiguide/proposals/create-proposal/