<!-- Source: https://docs.vinsi.ai/api-docs/crm-deal-update -->
# Update Deal

Partially update a CRM deal. Only fields present in the body are changed. Moving a deal into a won stage requires an amount (recurringAmount for recurring deals), otherwise 400 with the missing field. Changing dealStage runs deal_stage_changed CRM workflows. Returns the updated deal.

```http
PUT https://dashboard.vinsi.ai/api/crm/deals/{dealId}
```

## Authentication

Send your API key in the `x-api-key` header. Create keys in the VINSI dashboard under Settings → API Keys.

## Headers

| Name | Type | Required |
|---|---|---|
| Content-Type | string | yes (application/json) |
| x-api-key | string | yes |

## Path parameters

| Name | Example |
|---|---|
| dealId | 77 |

## Example request body

```json
{
  "dealStage": "Closed Won",
  "amount": 12000,
  "closeDate": "2026-09-16"
}
```

## Example request

```bash
curl -X PUT 'https://dashboard.vinsi.ai/api/crm/deals/77' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"dealStage":"Closed Won","amount":12000,"closeDate":"2026-09-16"}'
```

## Example response

```json
{
  "id": 77,
  "organizationId": "cmexampleorg00000000000001",
  "dealName": "Acme Dental - Annual Plan",
  "pipeline": "Sales Pipeline",
  "dealStage": "Closed Won",
  "amount": 12000,
  "closeDate": "2026-09-16T00:00:00.000Z",
  "dealOwnerId": "cmexampleuser0000000000001",
  "dealType": "New Business",
  "priority": "High",
  "contactId": 1042,
  "companyId": 318,
  "createdAt": "2026-09-05T16:00:00.000Z",
  "updatedAt": "2026-09-16T16:40:00.000Z",
  "type": "one-time",
  "billingFrequency": null,
  "recurringAmount": null
}
```

