# GHL Opportunities API

> ⚠️ **Search Quirk:** The `POST /opportunities/search` endpoint sometimes has issues filtering by `contactId` directly. Use the newer search endpoint or work around with custom filters.

**Endpoints:** 12
**Base URL:** `https://rest.gohighlevel.com/v1`

**Version Header(s):** `2021-07-28`

---

## Endpoints

- [POST /opportunities/](#post--opportunities-) — Create Opportunity
- [GET /opportunities/lost-reason](#get--opportunities-lost-reason) — Get lost reason
- [GET /opportunities/pipelines](#get--opportunities-pipelines) — Get Pipelines
- [GET /opportunities/search](#get--opportunities-search) — Search Opportunity
- [POST /opportunities/search](#post--opportunities-search) — Search Opportunities
- [POST /opportunities/upsert](#post--opportunities-upsert) — Upsert Opportunity
- [DELETE /opportunities/{id}](#delete--opportunities-id) — Delete Opportunity
- [GET /opportunities/{id}](#get--opportunities-id) — Get Opportunity
- [PUT /opportunities/{id}](#put--opportunities-id) — Update Opportunity
- [DELETE /opportunities/{id}/followers](#delete--opportunities-id-followers) — Remove Followers
- [POST /opportunities/{id}/followers](#post--opportunities-id-followers) — Add Followers
- [PUT /opportunities/{id}/status](#put--opportunities-id-status) — Update Opportunity Status

---

## POST /opportunities/

**Summary:** Create Opportunity

Create Opportunity

**Version Header:** `2021-07-28`

**Operation ID:** `create-opportunity`

**Tags:** Opportunities

### cURL

```bash
curl -X POST 'https://rest.gohighlevel.com/v1/opportunities/' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0' \
  -d '{}'  # See request body schema below
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

payload = json.dumps({})
conn.request('POST', '/v1/opportunities/', body=payload, headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - POST opportunities",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "POST",
    "url": "https://rest.gohighlevel.com/v1/opportunities/",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": true,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Body Schema

  - **pipelineId** (string) (required) (e.g. `VDm7RPYC2GLUvdpKmBfC`): pipeline Id
  - **locationId** (string) (required) (e.g. `ve9EPM428h8vShlRW1KT`)
  - **name** (string) (required) (e.g. `First Opps`)
  - **pipelineStageId** (string) (e.g. `7915dedc-8f18-44d5-8bc3-77c04e994a10`)
  - **status** (string) (required)
  - **contactId** (string) (required) (e.g. `mTkSCb1UBjb5tk4OvB69`)
  - **monetaryValue** (number) (e.g. `220`)
  - **assignedTo** (string) (e.g. `082goXVW3lIExEQPOnd3`)
  - **customFields** (array): Add custom fields to opportunities.

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `201` | Successful response |   - **opportunity** (SearchOpportunitiesResponseSchema) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## GET /opportunities/lost-reason

**Summary:** Get lost reason

Get lost reason

**Version Header:** `2021-07-28`

**Operation ID:** `get-lost-reason`

**Tags:** Lost reason

### cURL

```bash
curl -X GET 'https://rest.gohighlevel.com/v1/opportunities/lost-reason?locationId=ve9EPM428h8vShlRW1KT&name=lost reason&deleted=VALUE&query=dentist&skip=1&limit=10&getCount=field' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0'
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

conn.request('GET', '/v1/opportunities/lost-reason?locationId=ve9EPM428h8vShlRW1KT&name=lost reason&deleted=VALUE&query=dentist&skip=1&limit=10&getCount=field', headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - GET lost-reason",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "GET",
    "url": "https://rest.gohighlevel.com/v1/opportunities/lost-reason",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": false,
    "bodyParameters": {
      "parameters": []
    },
    "options": {},
    "sendQuery": true,
    "queryParameters": {
      "parameters": [
        {
          "name": "locationId",
          "value": "ve9EPM428h8vShlRW1KT"
        },
        {
          "name": "name",
          "value": "lost reason"
        },
        {
          "name": "deleted",
          "value": "VALUE"
        },
        {
          "name": "query",
          "value": "dentist"
        },
        {
          "name": "skip",
          "value": 1
        },
        {
          "name": "limit",
          "value": 10
        },
        {
          "name": "getCount",
          "value": "field"
        }
      ]
    }
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `locationId` | Query | `string` | ✅ |  [example: `ve9EPM428h8vShlRW1KT`] |
| `name` | Query | `string` | — | lost reason name [example: `lost reason`] |
| `deleted` | Query | `boolean` | — | deleted |
| `query` | Query | `string` | — | search query [example: `dentist`] |
| `skip` | Query | `number` | — | skip [example: `1`] |
| `limit` | Query | `number` | — | limit [example: `10`] |
| `getCount` | Query | `boolean` | — | get count [example: `field`] |

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **lostReasons** (array of LostReasonResponseSchema)<br>  - **total** (number) (e.g. `100`) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## GET /opportunities/pipelines

**Summary:** Get Pipelines

Get Pipelines

**Version Header:** `2021-07-28`

**Operation ID:** `get-pipelines`

**Tags:** Pipelines

### cURL

```bash
curl -X GET 'https://rest.gohighlevel.com/v1/opportunities/pipelines?locationId=ve9EPM428h8vShlRW1KT' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0'
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

conn.request('GET', '/v1/opportunities/pipelines?locationId=ve9EPM428h8vShlRW1KT', headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - GET pipelines",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "GET",
    "url": "https://rest.gohighlevel.com/v1/opportunities/pipelines",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": false,
    "bodyParameters": {
      "parameters": []
    },
    "options": {},
    "sendQuery": true,
    "queryParameters": {
      "parameters": [
        {
          "name": "locationId",
          "value": "ve9EPM428h8vShlRW1KT"
        }
      ]
    }
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `locationId` | Query | `string` | ✅ |  [example: `ve9EPM428h8vShlRW1KT`] |

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **pipelines** (array of PipelinesResponseSchema) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## GET /opportunities/search

**Summary:** Search Opportunity

Search Opportunity

**Version Header:** `2021-07-28`

**Operation ID:** `search-opportunity`

**Tags:** Search

### cURL

```bash
curl -X GET 'https://rest.gohighlevel.com/v1/opportunities/search?q=john@deo.com&location_id=i2SpAtBVHSVea1sL6oah&pipeline_id=bCkKGpDsyPP4peuKowkG&pipeline_stage_id=7915dedc-8f18-44d5-8bc3-77c04e994a10&contact_id=WFwVrSSjZ2CNHbZThQX2&status=open&assigned_to=082goXVW3lIExEQPOnd3&campaignId=Y2I9XM7aO1hncuSOlc9L&id=123akv4LFn6C9frZoy3e&order=added_asc&endDate=mm-dd-yyyy&startAfter=1628008053263&startAfterId=UIaE1WjAwWKdlyD7osQI&date=mm-dd-yyyy&country=US&page=VALUE&limit=VALUE&getTasks=VALUE&getNotes=VALUE&getCalendarEvents=VALUE' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0'
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

conn.request('GET', '/v1/opportunities/search?q=john@deo.com&location_id=i2SpAtBVHSVea1sL6oah&pipeline_id=bCkKGpDsyPP4peuKowkG&pipeline_stage_id=7915dedc-8f18-44d5-8bc3-77c04e994a10&contact_id=WFwVrSSjZ2CNHbZThQX2&status=VALUE&assigned_to=082goXVW3lIExEQPOnd3&campaignId=Y2I9XM7aO1hncuSOlc9L&id=123akv4LFn6C9frZoy3e&order=added_asc&endDate=mm-dd-yyyy&startAfter=1628008053263&startAfterId=UIaE1WjAwWKdlyD7osQI&date=mm-dd-yyyy&country=US&page=VALUE&limit=VALUE&getTasks=VALUE&getNotes=VALUE&getCalendarEvents=VALUE', headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - GET search",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "GET",
    "url": "https://rest.gohighlevel.com/v1/opportunities/search",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": false,
    "bodyParameters": {
      "parameters": []
    },
    "options": {},
    "sendQuery": true,
    "queryParameters": {
      "parameters": [
        {
          "name": "q",
          "value": "john@deo.com"
        },
        {
          "name": "location_id",
          "value": "i2SpAtBVHSVea1sL6oah"
        },
        {
          "name": "pipeline_id",
          "value": "bCkKGpDsyPP4peuKowkG"
        },
        {
          "name": "pipeline_stage_id",
          "value": "7915dedc-8f18-44d5-8bc3-77c04e994a10"
        },
        {
          "name": "contact_id",
          "value": "WFwVrSSjZ2CNHbZThQX2"
        },
        {
          "name": "status",
          "value": "VALUE"
        },
        {
          "name": "assigned_to",
          "value": "082goXVW3lIExEQPOnd3"
        },
        {
          "name": "campaignId",
          "value": "Y2I9XM7aO1hncuSOlc9L"
        },
        {
          "name": "id",
          "value": "123akv4LFn6C9frZoy3e"
        },
        {
          "name": "order",
          "value": "added_asc"
        },
        {
          "name": "endDate",
          "value": "mm-dd-yyyy"
        },
        {
          "name": "startAfter",
          "value": "1628008053263"
        },
        {
          "name": "startAfterId",
          "value": "UIaE1WjAwWKdlyD7osQI"
        },
        {
          "name": "date",
          "value": "mm-dd-yyyy"
        },
        {
          "name": "country",
          "value": "US"
        },
        {
          "name": "page",
          "value": "VALUE"
        },
        {
          "name": "limit",
          "value": "VALUE"
        },
        {
          "name": "getTasks",
          "value": "VALUE"
        },
        {
          "name": "getNotes",
          "value": "VALUE"
        },
        {
          "name": "getCalendarEvents",
          "value": "VALUE"
        }
      ]
    }
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `q` | Query | `string` | — |  [example: `john@deo.com`] |
| `location_id` | Query | `string` | ✅ | Location Id [example: `i2SpAtBVHSVea1sL6oah`] |
| `pipeline_id` | Query | `string` | — | Pipeline Id [example: `bCkKGpDsyPP4peuKowkG`] |
| `pipeline_stage_id` | Query | `string` | — | stage Id [example: `7915dedc-8f18-44d5-8bc3-77c04e994a10`] |
| `contact_id` | Query | `string` | — | Contact Id [example: `WFwVrSSjZ2CNHbZThQX2`] |
| `status` | Query | `string` | — |  (values: open, won, lost, abandoned, all) |
| `assigned_to` | Query | `string` | — |  [example: `082goXVW3lIExEQPOnd3`] |
| `campaignId` | Query | `string` | — | Campaign Id [example: `Y2I9XM7aO1hncuSOlc9L`] |
| `id` | Query | `string` | — | Opportunity Id [example: `123akv4LFn6C9frZoy3e`] |
| `order` | Query | `string` | — |  [example: `added_asc`] |
| `endDate` | Query | `string` | — | End date [example: `mm-dd-yyyy`] |
| `startAfter` | Query | `string` | — | Start After [example: `1628008053263`] |
| `startAfterId` | Query | `string` | — | Start After Id [example: `UIaE1WjAwWKdlyD7osQI`] |
| `date` | Query | `string` | — | Start date [example: `mm-dd-yyyy`] |
| `country` | Query | `string` | — |  [example: `US`] |
| `page` | Query | `number` | — |  |
| `limit` | Query | `number` | — | Limit Per Page records count. will allow maximum up to 100 and default will be 20 |
| `getTasks` | Query | `boolean` | — | get Tasks in contact |
| `getNotes` | Query | `boolean` | — | get Notes in contact |
| `getCalendarEvents` | Query | `boolean` | — | get Calender event in contact |

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **opportunities** (array of SearchOpportunitiesResponseSchema)<br>  - **meta** (SearchMetaResponseSchema)<br>  - **aggregations** (object) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## POST /opportunities/search

**Summary:** Search Opportunities

Search Opportunities based on combinations of advanced filters. Documentation Link - https://doc.clickup.com/8631005/d/h/87cpx-424216/7bf11bc9b94f80f

**Version Header:** `2021-07-28`

📖 [Official Documentation](https://doc.clickup.com/8631005/d/h/87cpx-424216/7bf11bc9b94f80f)

**Operation ID:** `search-opportunities-advanced`

**Tags:** Search

### cURL

```bash
curl -X POST 'https://rest.gohighlevel.com/v1/opportunities/search' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0' \
  -d '{}'  # See request body schema below
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

payload = json.dumps({})
conn.request('POST', '/v1/opportunities/search', body=payload, headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - POST search",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "POST",
    "url": "https://rest.gohighlevel.com/v1/opportunities/search",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": true,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Body Schema

  - **locationId** (string) (required) (e.g. `i2SpAtBVHSVea1sL6oah`): Location Id
  - **query** (string) (required)
  - **limit** (number) (required)
  - **page** (number) (required)
  - **searchAfter** (array) (required)
  - **additionalDetails** (AdditionalDetailsDTO) (required)

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **opportunities** (array of SearchOpportunitiesResponseSchema)<br>  - **total** (number) (required) (e.g. `100`)<br>  - **aggregations** (object) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

> ⚠️ **Known Quirk:** The `contactId` filter may not work directly in the POST search body for some locations. As a workaround, fetch all opportunities and filter client-side, or use the GET variant.

> 📌 **POST for Search:** Search endpoints use POST instead of GET because the search filters are complex JSON objects that can't be easily encoded in query parameters.

---

## POST /opportunities/upsert

**Summary:** Upsert Opportunity

Upsert Opportunity

**Version Header:** `2021-07-28`

**Operation ID:** `Upsert-opportunity`

**Tags:** Opportunities

### cURL

```bash
curl -X POST 'https://rest.gohighlevel.com/v1/opportunities/upsert' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0' \
  -d '{}'  # See request body schema below
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

payload = json.dumps({})
conn.request('POST', '/v1/opportunities/upsert', body=payload, headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - POST upsert",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "POST",
    "url": "https://rest.gohighlevel.com/v1/opportunities/upsert",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": true,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Body Schema

  - **id** (string) (e.g. `yWQobCRIhRguQtD2llvk`): opportunityId
  - **pipelineId** (string) (required) (e.g. `bCkKGpDsyPP4peuKowkG`): pipeline Id
  - **locationId** (string) (required) (e.g. `CLu7BaljjqrEjBGKTNNe`): locationId
  - **followers** (array) (required) (e.g. `LiKJ2vnRg5ETM8Z19K7`): contactId
  - **isRemoveAllFollowers** (boolean) (required) (e.g. `True`): isRemoveAllFollowers
  - **followersActionType** (string) (required) (e.g. `add`): followers action type
  - **name** (string) (e.g. `opportunity name`): name
  - **status** (string)
  - **pipelineStageId** (string) (e.g. `7915dedc-8f18-44d5-8bc3-77c04e994a10`)
  - **monetaryValue** (object) (e.g. `220`)
  - **assignedTo** (string) (e.g. `082goXVW3lIExEQPOnd3`)
  - **lostReasonId** (string) (e.g. `CLu7BaljjqrEjBGKTNNe`): lost reason Id

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **opportunity** (object) (required): Updated / New Opportunity<br>  - **new** (boolean) (required) (e.g. `True`) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## DELETE /opportunities/{id}

**Summary:** Delete Opportunity

Delete Opportunity

**Version Header:** `2021-07-28`

**Operation ID:** `delete-opportunity`

**Tags:** Opportunities

### cURL

```bash
curl -X DELETE 'https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0'
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

conn.request('DELETE', '/v1/opportunities/yWQobCRIhRguQtD2llvk', headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - DELETE yWQobCRIhRguQtD2llvk",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "DELETE",
    "url": "https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": false,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `id` | Path | `string` | ✅ | Opportunity Id [example: `yWQobCRIhRguQtD2llvk`] |

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **succeded** (boolean) (e.g. `True`) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## GET /opportunities/{id}

**Summary:** Get Opportunity

Get Opportunity

**Version Header:** `2021-07-28`

**Operation ID:** `get-opportunity`

**Tags:** Opportunities

### cURL

```bash
curl -X GET 'https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0'
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

conn.request('GET', '/v1/opportunities/yWQobCRIhRguQtD2llvk', headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - GET yWQobCRIhRguQtD2llvk",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "GET",
    "url": "https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": false,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `id` | Path | `string` | ✅ | Opportunity Id [example: `yWQobCRIhRguQtD2llvk`] |

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **opportunity** (SearchOpportunitiesResponseSchema) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## PUT /opportunities/{id}

**Summary:** Update Opportunity

Update Opportunity

**Version Header:** `2021-07-28`

**Operation ID:** `update-opportunity`

**Tags:** Opportunities

### cURL

```bash
curl -X PUT 'https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0' \
  -d '{}'  # See request body schema below
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

payload = json.dumps({})
conn.request('PUT', '/v1/opportunities/yWQobCRIhRguQtD2llvk', body=payload, headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - PUT yWQobCRIhRguQtD2llvk",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "PUT",
    "url": "https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": true,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `id` | Path | `string` | ✅ | Opportunity Id [example: `yWQobCRIhRguQtD2llvk`] |

### Request Body Schema

  - **pipelineId** (string) (e.g. `bCkKGpDsyPP4peuKowkG`): pipeline Id
  - **name** (string) (e.g. `First Opps`)
  - **pipelineStageId** (string) (e.g. `7915dedc-8f18-44d5-8bc3-77c04e994a10`)
  - **status** (string)
  - **monetaryValue** (number) (e.g. `220`)
  - **assignedTo** (string) (e.g. `082goXVW3lIExEQPOnd3`)
  - **customFields** (array): Update custom fields to opportunities.

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **opportunity** (SearchOpportunitiesResponseSchema) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## DELETE /opportunities/{id}/followers

**Summary:** Remove Followers

Allows removal of one or all followers from an opportunity.

**Version Header:** `2021-07-28`

**Operation ID:** `remove-followers-opportunity`

**Tags:** Followers

### cURL

```bash
curl -X DELETE 'https://rest.gohighlevel.com/v1/opportunities/sx6wyHhbFdRXh302Lunr/followers?isRemoveAllFollowers=VALUE' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0'
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

conn.request('DELETE', '/v1/opportunities/sx6wyHhbFdRXh302Lunr/followers?isRemoveAllFollowers=VALUE', headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - DELETE followers",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "DELETE",
    "url": "https://rest.gohighlevel.com/v1/opportunities/sx6wyHhbFdRXh302Lunr/followers",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": false,
    "bodyParameters": {
      "parameters": []
    },
    "options": {},
    "sendQuery": true,
    "queryParameters": {
      "parameters": [
        {
          "name": "isRemoveAllFollowers",
          "value": "VALUE"
        }
      ]
    }
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `id` | Path | `string` | ✅ | Opportunity Id [example: `sx6wyHhbFdRXh302Lunr`] |
| `isRemoveAllFollowers` | Query | `boolean` | — |  |

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Followers successfully removed. |   - **followers** (array) (e.g. `['sx6wyHhbFdRXh302Lunr', 'sx6wyHhbFdRXh302LLss']`)<br>  - **followersRemoved** (array) (e.g. `['Mx6wyHhbFdRXh302Luer'... |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## POST /opportunities/{id}/followers

**Summary:** Add Followers

Add Followers

**Version Header:** `2021-07-28`

**Operation ID:** `add-followers-opportunity`

**Tags:** Followers

### cURL

```bash
curl -X POST 'https://rest.gohighlevel.com/v1/opportunities/sx6wyHhbFdRXh302Lunr/followers' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0' \
  -d '{}'  # See request body schema below
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

payload = json.dumps({})
conn.request('POST', '/v1/opportunities/sx6wyHhbFdRXh302Lunr/followers', body=payload, headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - POST followers",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "POST",
    "url": "https://rest.gohighlevel.com/v1/opportunities/sx6wyHhbFdRXh302Lunr/followers",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": true,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `id` | Path | `string` | ✅ | Opportunity Id [example: `sx6wyHhbFdRXh302Lunr`] |

### Request Body Schema

  - **followers** (array) (required) (e.g. `['sx6wyHhbFdRXh302Lunr', 'sx6wyHhbFdRXh302Lunr']`)

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `201` | Successful response |   - **followers** (array) (e.g. `['sx6wyHhbFdRXh302Lunr', 'sx6wyHhbFdRXh302LLss']`)<br>  - **followersAdded** (array) (e.g. `['Mx6wyHhbFdRXh302Luer', ... |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---

## PUT /opportunities/{id}/status

**Summary:** Update Opportunity Status

Update Opportunity Status

**Version Header:** `2021-07-28`

**Operation ID:** `update-opportunity-status`

**Tags:** Opportunities

### cURL

```bash
curl -X PUT 'https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk/status' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Version: 2021-07-28' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'User-Agent: YourApp/1.0' \
  -d '{}'  # See request body schema below
```

### Python (http.client)

```python
import http.client
import json

conn = http.client.HTTPSConnection('rest.gohighlevel.com')

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Version': '2021-07-28',
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'User-Agent': 'YourApp/1.0',
}

payload = json.dumps({})
conn.request('PUT', '/v1/opportunities/yWQobCRIhRguQtD2llvk/status', body=payload, headers=headers)

response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
```

### n8n HTTP Node

```json
{
  "name": "GHL - PUT status",
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "PUT",
    "url": "https://rest.gohighlevel.com/v1/opportunities/yWQobCRIhRguQtD2llvk/status",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "sendHeaders": true,
    "headerParameters": {
      "parameters": [
        {
          "name": "Authorization",
          "value": "Bearer YOUR_API_TOKEN"
        },
        {
          "name": "Version",
          "value": "2021-07-28"
        },
        {
          "name": "Content-Type",
          "value": "application/json"
        },
        {
          "name": "Accept",
          "value": "application/json"
        },
        {
          "name": "User-Agent",
          "value": "YourApp/1.0"
        }
      ]
    },
    "sendBody": true,
    "bodyParameters": {
      "parameters": []
    },
    "options": {}
  }
}
```

**To use in n8n:**
1. Add an HTTP Request node
2. Switch to JSON mode (Parameters → use RAW JSON)
3. Paste the JSON above
4. Update `YOUR_API_TOKEN` with your actual GHL API key

### Request Parameters

| Name | Location | Type | Required | Description |
|------|----------|------|----------|-------------|
| `id` | Path | `string` | ✅ | Opportunity Id [example: `yWQobCRIhRguQtD2llvk`] |

### Request Body Schema

  - **status** (string) (required)
  - **lostReasonId** (string) (e.g. `CLu7BaljjqrEjBGKTNNe`): lost reason Id

### Response Codes

| Code | Description | Schema |
|------|-------------|--------|
| `200` | Successful response |   - **succeded** (boolean) (e.g. `True`) |
| `400` | Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
| `401` | Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
| `422` | Unprocessable Entity | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |

### ⚠️ Special Notes & Quirks

> ⚠️ **User-Agent Required:** All GHL API requests require a `User-Agent` HTTP header. Requests without it may be rejected with a 403 error.

---


*Documentation generated from GHL OpenAPI specifications. Verify against official docs for latest changes.*