19 KiB
GHL Links API
⚠️ Mixed Versions: Most Links endpoints use
2021-07-28, butGET /links/searchusesVersion: 2021-04-15.
Endpoints: 6
Base URL: https://rest.gohighlevel.com/v1
Version Header(s): 2021-04-15, 2021-07-28
Endpoints
- GET /links/ — Get Links
- POST /links/ — Create Link
- GET /links/id/{linkId} — Get Link by ID
- GET /links/search — Search Trigger Links
- DELETE /links/{linkId} — Delete Link
- PUT /links/{linkId} — Update Link
GET /links/
Summary: Get Links
Get Links
Version Header: 2021-07-28
Operation ID: get-links
Tags: Trigger Links
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/links/?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)
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/links/?locationId=ve9EPM428h8vShlRW1KT', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET links",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/links/",
"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:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith 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 | - links (array of LinkSchema) |
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-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /links/
Summary: Create Link
Create Link
Version Header: 2021-07-28
Operation ID: create-link
Tags: Trigger Links
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/links/' \
-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)
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/links/', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST links",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/links/",
"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:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
- locationId (string) (required) (e.g.
ve9EPM428h8vShlRW1KT) - name (string) (required) (e.g.
first tag) - redirectTo (string) (required) (e.g.
https://www.google.com/)
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - link (LinkSchema) |
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-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /links/id/{linkId}
Summary: Get Link by ID
Get a single link by its ID
Version Header: 2021-07-28
Operation ID: get-link-by-id
Tags: Trigger Links
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/links/id/VALUE?locationId=ABCHkzuJQ8ZMd4Te84GK' \
-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)
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/links/id/VALUE?locationId=ABCHkzuJQ8ZMd4Te84GK', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/links/id/VALUE",
"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": "ABCHkzuJQ8ZMd4Te84GK"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
Authorization |
Header | string |
✅ | Access Token [example: Bearer 9c48df2694a849b6089f9d0d3513efe] |
locationId |
Query | string |
✅ | Location Id [example: ABCHkzuJQ8ZMd4Te84GK] |
linkId |
Path | string |
✅ | Link Id |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - link (LinkSchema) |
400 |
Bad Request | (ref: #/components/schemas/BadRequestDTO) |
401 |
Unauthorized | (ref: #/components/schemas/UnauthorizedDTO) |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /links/search
Summary: Search Trigger Links
Get list of links by searching
Version Header: 2021-04-15
Operation ID: search-trigger-links
Tags: Trigger Links Search
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/links/search?locationId=ABCHkzuJQ8ZMd4Te84GK&query=Search string&skip=1&limit=10' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/links/search?locationId=ABCHkzuJQ8ZMd4Te84GK&query=Search string&skip=1&limit=10', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET search",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/links/search",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"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": "ABCHkzuJQ8ZMd4Te84GK"
},
{
"name": "query",
"value": "Search string"
},
{
"name": "skip",
"value": 1
},
{
"name": "limit",
"value": 10
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
Authorization |
Header | string |
✅ | Access Token [example: Bearer 9c48df2694a849b6089f9d0d3513efe] |
locationId |
Query | string |
✅ | Location Id [example: ABCHkzuJQ8ZMd4Te84GK] |
query |
Query | string |
— | Search query as a string [example: Search string] |
skip |
Query | number |
— | Numbers of query results to skip [example: 1] |
limit |
Query | number |
— | Limit on number of search results [example: 10] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - links (array of LinkSchema) |
400 |
Bad Request | (ref: #/components/schemas/BadRequestDTO) |
401 |
Unauthorized | (ref: #/components/schemas/UnauthorizedDTO) |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /links/{linkId}
Summary: Delete Link
Delete Link
Version Header: 2021-07-28
Operation ID: delete-link
Tags: Trigger Links
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/links/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)
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/links/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/links/VALUE",
"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:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
linkId |
Path | string |
✅ | Link Id |
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
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-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /links/{linkId}
Summary: Update Link
Update Link
Version Header: 2021-07-28
Operation ID: update-link
Tags: Trigger Links
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/links/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' \
-d '{}' # See request body schema below
Python (http.client)
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/links/VALUE', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/links/VALUE",
"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:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
linkId |
Path | string |
✅ | Link Id |
Request Body Schema
- name (string) (required) (e.g.
first tag) - redirectTo (string) (required) (e.g.
https://www.google.com/)
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - link (LinkSchema) |
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-AgentHTTP header. Requests without it may be rejected with a 403 error.
Documentation generated from GHL OpenAPI specifications. Verify against official docs for latest changes.