Create monitor
Create a recurring monitor that runs on a schedule and stores matching events for later review.
POST
/
api
/
v1
/
monitors
Create monitor
curl --request POST \
--url https://developer.thehog.ai/api/v1/monitors \
--header 'Content-Type: application/json' \
--header 'X-Access-Key: <api-key>' \
--header 'X-Secret-Key: <api-key>' \
--data '
{
"name": "Competitor mentions",
"config": {
"query": "hiring engineers",
"max_results": 20
},
"cadence_minutes": 60,
"max_results": 10,
"force_fresh": false,
"cache_ttl_days": 14,
"post_url": "<string>"
}
'const options = {
method: 'POST',
headers: {
'X-Access-Key': '<api-key>',
'X-Secret-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Competitor mentions',
config: {query: 'hiring engineers', max_results: 20},
cadence_minutes: 60,
max_results: 10,
force_fresh: false,
cache_ttl_days: 14,
post_url: '<string>'
})
};
fetch('https://developer.thehog.ai/api/v1/monitors', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://developer.thehog.ai/api/v1/monitors"
payload = {
"name": "Competitor mentions",
"config": {
"query": "hiring engineers",
"max_results": 20
},
"cadence_minutes": 60,
"max_results": 10,
"force_fresh": False,
"cache_ttl_days": 14,
"post_url": "<string>"
}
headers = {
"X-Access-Key": "<api-key>",
"X-Secret-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"name": "<string>",
"type": "linkedin_keyword",
"status": "active",
"config": {},
"cadence_minutes": 123,
"last_run_at": "<string>",
"next_run_at": "<string>",
"consecutive_failures": 123,
"created_at": "<string>",
"updated_at": "<string>"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b",
"errors": [
{
"property": "body.query",
"message": "query must be a string",
"constraints": {
"isString": "query must be a string"
}
}
]
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication is required.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Resource not found.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}POST /api/v1/monitors
Create a recurring monitor to track keywords, profiles, or posts.Create a monitor that runs on a schedule to track keywords, profiles, or posts across LinkedIn, X, Reddit, TikTok, Instagram, and the web.
Example
curl -X POST https://developer.thehog.ai/api/v1/monitors \
-H "X-Access-Key: ak_xxxxxxxxxxxxxxxx" \
-H "X-Secret-Key: sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"name": "Competitor mentions", "type": "reddit_keyword", "config": {"query": "acme"}, "cadence_minutes": 60, "max_results": 10}'
Authorizations
The public API key from the Credentials page.
The API secret shown when the credential is created.
Body
application/json
Human-readable name
Example:
"Competitor mentions"
Monitor type
Available options:
linkedin_keyword, linkedin_profile, linkedin_company, linkedin_post, instagram_profile, instagram_post, x_profile, x_keyword, reddit_keyword, reddit_subreddit, tiktok_keyword, tiktok_hashtag, web_search, site_search Type-specific configuration (query, filters, etc.)
Example:
{ "query": "hiring engineers", "max_results": 20 }
Cadence in minutes (minimum 60 for scraper-based types: LinkedIn, Instagram, X, Reddit, TikTok; minimum 15 for web)
Max results per run (1-100)
Force fresh scrape bypassing cache
Cache TTL in days for profile/company monitors (1-90)
LinkedIn post URL (required for linkedin_post type)
Response
Monitor created.
Available options:
linkedin_keyword, linkedin_profile, linkedin_company, linkedin_post, instagram_profile, instagram_post, x_profile, x_keyword, reddit_keyword, reddit_subreddit, tiktok_keyword, tiktok_hashtag, web_search, site_search Available options:
active, paused, disabled ⌘I
Create monitor
curl --request POST \
--url https://developer.thehog.ai/api/v1/monitors \
--header 'Content-Type: application/json' \
--header 'X-Access-Key: <api-key>' \
--header 'X-Secret-Key: <api-key>' \
--data '
{
"name": "Competitor mentions",
"config": {
"query": "hiring engineers",
"max_results": 20
},
"cadence_minutes": 60,
"max_results": 10,
"force_fresh": false,
"cache_ttl_days": 14,
"post_url": "<string>"
}
'const options = {
method: 'POST',
headers: {
'X-Access-Key': '<api-key>',
'X-Secret-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Competitor mentions',
config: {query: 'hiring engineers', max_results: 20},
cadence_minutes: 60,
max_results: 10,
force_fresh: false,
cache_ttl_days: 14,
post_url: '<string>'
})
};
fetch('https://developer.thehog.ai/api/v1/monitors', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://developer.thehog.ai/api/v1/monitors"
payload = {
"name": "Competitor mentions",
"config": {
"query": "hiring engineers",
"max_results": 20
},
"cadence_minutes": 60,
"max_results": 10,
"force_fresh": False,
"cache_ttl_days": 14,
"post_url": "<string>"
}
headers = {
"X-Access-Key": "<api-key>",
"X-Secret-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"name": "<string>",
"type": "linkedin_keyword",
"status": "active",
"config": {},
"cadence_minutes": 123,
"last_run_at": "<string>",
"next_run_at": "<string>",
"consecutive_failures": 123,
"created_at": "<string>",
"updated_at": "<string>"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b",
"errors": [
{
"property": "body.query",
"message": "query must be a string",
"constraints": {
"isString": "query must be a string"
}
}
]
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication is required.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Resource not found.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}