# POST /opportunities/:id/products

**Resource:** [Opportunities](./opportunities.md)  
**Scopes:** `opportunities:write`  
**Write operation:** yes

Add a product to an opportunity. product_id is required. Optionally set payment_status (requires invoices:write scope). Valid payment_status values: unpaid (default), deposit_invoiced, invoiced, paid. Legacy alias: POST /deals/:id/products.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `id` | path | uuid | yes | Opportunity ID |
| `product_id` | body | uuid | yes | Product ID to add |
| `quantity` | body | number | no | Quantity (default: 1) |
| `unit_price` | body | number | no | Override price |
| `discount_percent` | body | number | no | Discount % |
| `deposit_percent` | body | number | no | Deposit % |
| `payment_status` | body | string | no | Payment lifecycle stage. Requires invoices:write scope. Values: unpaid (default), deposit_invoiced, invoiced, paid. |

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`