{"openapi":"3.1.0","info":{"title":"HazelBase","description":"The HazelBase API provides comprehensive data intelligence capabilities including people search, company research, and real-time social media monitoring.\n\n## Core Features\n\n**People Intelligence**: Search and enrich contact information including emails, phone numbers, LinkedIn profiles, employment history, and social media accounts.\n\n**Company Intelligence**: Research businesses with detailed information about revenue, employee count, technology stack, funding, and contact details.\n\n**Social Media Monitoring**: Track keyword mentions across platforms like Reddit with advanced URL filtering, real-time notifications via webhooks and email, and comprehensive match data.\n\n## Getting Started\n\n1. **Get API Key**: Use in query string ('?api_key=KEY') or auth header ('Authorization: Bearer KEY')\n2. **Rate Limits**: Vary by plan - see documentation for details\n3. **Response Format**: All endpoints return JSON with consistent structure\n\n## Useful Links\n\n- [Complete API Documentation](https://www.hazelbase.com/docs)\n- [OpenAPI Specification](https://api.hazelbase.com/rest/openapi.json)\n- [Dashboard](https://www.hazelbase.com/dashboard)\n- [Support](mailto:hello@hazelbase.com)","version":"2.2.7","termsOfService":"https://www.hazelbase.com/terms","contact":{"email":"hello@hazelbase.com"}},"externalDocs":{"description":"Find out more about the HazelBase API","url":"https://www.hazelbase.com/docs"},"servers":[{"url":"https://api.hazelbase.com/rest"}],"tags":[{"name":"people","description":"Search and enrich people data including contact information, employment history, and social profiles. The type and depth of data returned depends on your subscription plan - higher tier plans provide access to more comprehensive contact information and enriched profile data."},{"name":"companies","description":"Research companies with detailed business intelligence including metrics, technology stack, and contact details"},{"name":"organization","description":"Manage organization profile information including name, overview, and URL"},{"name":"keyword_monitors","description":"Create and manage keyword monitors for real-time social media tracking with advanced filtering options The monitor will scan content and generate matches based on the configured filtering rules.\n\n## Rate Limiting and Plan Restrictions\n\nThe number of keyword matches that a monitor will return is rate limited according to your subscription plan. Higher tier plans allow for more matches to be returned and stored. Contact support for details about your specific plan limits.\n\n## How Keyword Matching Works\n\n### Basic Matching\n- Keywords are matched case-insensitively by default\n- Use `isWholeWordOnly: false` to match only complete words (prevents matching 'test' in 'testing')\n- Matches are found in post titles, content, and comments across Reddit and X (Twitter)\n\n### URL Filtering Logic\n\n**URL Include Filtering (`urlsIncluding`)**:\n- If the array is empty or not provided, all URLs are included by default\n- If URLs are specified, matches will ONLY be counted if the source URL contains at least one of the specified patterns\n- URL patterns are substring matches (e.g., 'reddit.com/r/technology' matches any post in that subreddit, 'x.com' matches all X posts)\n\n**URL Exclude Filtering (`urlsExcluding`)**:\n- Applied after include filtering\n- If any exclude patterns are specified, matches will be IGNORED if the source URL contains any of these patterns\n- Useful for filtering out irrelevant subreddits or X accounts\n\n### Text Content Filtering Logic\n\n**Text Include Filtering (`textsIncluding`)**:\n- If the array is empty or not provided, no text content filtering is applied\n- If text patterns are specified, matches will ONLY be counted if the text content contains at least one of the specified patterns\n- Text patterns are case-insensitive substring matches\n- Applied after keyword matching and URL filtering\n\n**Text Exclude Filtering (`textsExcluding`)**:\n- Applied after include filtering\n- If any exclude patterns are specified, matches will be IGNORED if the text content contains any of these patterns\n- Useful for filtering out matches containing specific words or phrases you want to avoid\n\n### Author Username Filtering Logic\n\n**Author Username Include Filtering (`authorUsernamesIncluding`)**:\n- If the array is empty or not provided, no author username filtering is applied\n- If author usernames are specified, matches will ONLY be counted if the content author's username matches at least one of the specified usernames\n- Username patterns are case-insensitive exact matches\n- Applied after keyword matching, URL filtering, and text content filtering\n- Useful for tracking mentions by specific users or accounts\n\n**Author Username Exclude Filtering (`authorUsernamesExcluding`)**:\n- Applied after include filtering\n- If any author usernames are specified, matches will be IGNORED if the content author's username matches any of these usernames\n- Username patterns are case-insensitive exact matches\n- Useful for filtering out matches from bots, spam accounts, or specific users you want to ignore\n\n### Examples\n\n**Monitor only technology discussions:**\n```json\n{\n  \"keyword\": \"AI\",\n  \"urlsIncluding\": [\"reddit.com/r/technology\", \"reddit.com/r/artificial\", \"x.com\"],\n  \"urlsExcluding\": []\n}\n```\n\n**Monitor all of Reddit and X except specific areas:**\n```json\n{\n  \"keyword\": \"product launch\",\n  \"urlsIncluding\": [\"reddit.com\", \"x.com\"],\n  \"urlsExcluding\": [\"reddit.com/r/funny\", \"reddit.com/r/test\"]\n}\n```\n\n**Monitor mentions but exclude spam:**\n```json\n{\n  \"keyword\": \"your product\",\n  \"textsExcluding\": [\"spam\", \"scam\", \"bot\"]\n}\n```\n\n**Monitor only positive discussions:**\n```json\n{\n  \"keyword\": \"your brand\",\n  \"textsIncluding\": [\"love\", \"great\", \"awesome\", \"recommend\"]\n}\n```\n\n**Monitor only X (Twitter) mentions:**\n```json\n{\n  \"keyword\": \"company name\",\n  \"urlsIncluding\": [\"x.com\"],\n  \"urlsExcluding\": []\n}\n```\n\n**Monitor everywhere but exclude Reddit funny subreddit:**\n```json\n{\n  \"keyword\": \"company name\",\n  \"urlsIncluding\": [],\n  \"urlsExcluding\": [\"reddit.com/r/funny\"]\n}\n```\n\n**Monitor only mentions by specific users:**\n```json\n{\n  \"keyword\": \"your product\",\n  \"authorUsernamesIncluding\": [\"influencer1\", \"techreview_account\", \"industry_expert\"]\n}\n```\n\n**Monitor mentions but exclude known spam accounts:**\n```json\n{\n  \"keyword\": \"your brand\",\n  \"authorUsernamesExcluding\": [\"spam_bot\", \"known_troll\", \"competitor_sockpuppet\"]\n}\n```\n\n**Combine filters for targeted monitoring:**\n```json\n{\n  \"keyword\": \"your product\",\n  \"urlsIncluding\": [\"reddit.com\", \"x.com\"],\n  \"textsIncluding\": [\"recommend\", \"looking for\"],\n  \"authorUsernamesExcluding\": [\"bot_account1\", \"bot_account2\"]\n}\n```"},{"name":"keyword_matches","description":"Retrieve keyword matches found by your monitors across social media platforms.\n\n## Rate Limiting and Plan Restrictions\n\nThe number of keyword matches returned is limited according to your subscription plan. Higher tier plans allow for more matches to be stored and accessed through the API.\n\n## Automatic Archiving and Deletion\n\nKeyword matches are automatically managed through a lifecycle process:\n\n- Matches are automatically marked as archived after a certain amount of time based on your organization's plan\n- Archived matches are automatically deleted after they have been archived for a certain amount of time (default: 30 days)\n- This helps manage storage and keeps your match data relevant"},{"name":"subreddit_monitors","description":"Create and manage subreddit monitors for tracking new content in specific subreddits.\n\n## Rate Limiting and Plan Restrictions\n\nThe number of subreddit monitors you can create is limited by your subscription plan. Contact support for details about your specific plan limits.\n\n## How Subreddit Monitoring Works\n\n- Each monitor tracks a single subreddit by name (e.g., `technology`)\n- Subreddit names are case-insensitive\n- Monitors can be paused by setting `isActive` to false\n- New matches are emitted for posts and comments found in the monitored subreddit"},{"name":"subreddit_matches","description":"Retrieve subreddit matches found by your monitors.\n\n## Rate Limiting and Plan Restrictions\n\nThe number of subreddit matches returned is limited according to your subscription plan. Higher tier plans allow for more matches to be stored and accessed through the API.\n\n## Automatic Archiving and Deletion\n\nSubreddit matches are automatically managed through a lifecycle process:\n\n- Matches are automatically marked as archived after a certain amount of time based on your organization's plan\n- Archived matches are automatically deleted after they have been archived for a certain amount of time (default: 30 days)\n- This helps manage storage and keeps your match data relevant"}],"paths":{"/v2/person/search":{"get":{"operationId":"searchPeople","tags":["people"],"summary":"Search people","responses":{"200":{"description":"The request was successful, and the server has returned the requested resource in the response body.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IndividualV1"}}},"required":["data"],"title":"SearchPeopleOk"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"query","name":"email","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"phone","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"linkedinUrl","required":false,"style":"form","description":"The full URL to the LinkedIn profile","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"firstName","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"lastName","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"limit","required":false,"style":"form","description":"","explode":true,"schema":{"type":"integer"},"allowReserved":false},{"in":"query","name":"realtimeEmploymentsUpdate","required":false,"style":"form","description":"When set to true, performs a real time work history update from LinkedIn of the top result. Currently limited to one request per second. Contact support to enable this parameter.","explode":true,"schema":{"type":"boolean"},"allowReserved":false}]}},"/v2/company/search":{"get":{"operationId":"searchCompany","tags":["companies"],"summary":"Search companies","responses":{"200":{"description":"The request was successful, and the server has returned the requested resource in the response body.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecordOrganization"}}},"required":["data"],"title":"SearchCompanyOk"}}}},"401":{"description":"Authentication is required to access the requested resource. The client must include the appropriate credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"title":"SearchCompanyUnauthorized"}}}},"403":{"description":"The server understood the request, but refuses to authorize it. Ensure the client has appropriate permissions.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"title":"SearchCompanyForbidden"}}}}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"query","name":"limit","required":false,"style":"form","description":"","explode":true,"schema":{"type":"integer"},"allowReserved":false},{"in":"query","name":"offset","required":false,"style":"form","description":"","explode":true,"schema":{"type":"integer"},"allowReserved":false},{"in":"query","name":"name","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"description","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"revenueRange","required":false,"style":"form","description":"Revenue in millions of USD","explode":true,"schema":{"type":"string","enum":["0","1-10","10-50","50-200","200-500","500-1000","1000-5000","5000-10000","10000+"]}},{"in":"query","name":"employeeRange","required":false,"style":"form","description":"Number of employees","explode":true,"schema":{"type":"string","enum":["0","1-10","10-50","50-200","200-500","500-1000","1000-5000","5000-10000","10000+"]}},{"in":"query","name":"domain","required":false,"style":"form","description":"","explode":true,"schema":{"type":"string"},"allowReserved":false}]}},"/v2/company/analyze":{"post":{"operationId":"analyzeCompany","tags":["companies"],"summary":"Analyze company from URL","description":"Generate a comprehensive business analysis of a company based on their website content. This includes summary, products/services, target customers, value proposition, competitors, and industry insights.","requestBody":{"required":true,"description":"URL to analyze","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","description":"The website URL to analyze","examples":["https://example.com","https://company.io"]}},"required":["url"]}}}},"responses":{"200":{"description":"Analysis completed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyAnalysis"}}}},"400":{"$ref":"#/components/responses/ErrorV2"},"401":{"$ref":"#/components/responses/ErrorV2"},"403":{"$ref":"#/components/responses/ErrorV2"},"429":{"description":"Rate limit exceeded. The organization has exceeded their AI analysis quota.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]}},"/v2/keyword_monitors":{"get":{"operationId":"getKeywordMonitors","tags":["keyword_monitors"],"summary":"Get keyword monitors","responses":{"200":{"description":"The request was successful, and the server has returned the requested resource in the response body.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/KeywordMonitorV1"}}},"required":["data"],"title":"GetKeywordMonitorsOk"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]},"post":{"operationId":"createKeywordMonitor","tags":["keyword_monitors"],"summary":"Create a keyword monitor","description":"Creates a new keyword monitor to track mentions of specific keywords across social media platforms.","requestBody":{"required":true,"description":"Keyword monitor configuration","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"keyword":{"type":"string","description":"The keyword to monitor","minLength":1,"maxLength":1000},"isActive":{"type":"boolean","description":"Whether the monitor is active"},"isWholeWordOnly":{"type":"boolean","description":"Whether to match whole words only"},"urlsIncluding":{"type":"array","items":{"type":"string"},"description":"URLs to include in monitoring. If any URLs are specified, keyword matches will only be counted if they occur on pages that match at least one of these URL patterns. URL patterns can be partial matches (e.g., 'reddit.com/r/technology' will match all posts in that subreddit, 'x.com' will match all X posts). If this array is empty, all URLs are included by default.","examples":[["reddit.com/r/technology","reddit.com/r/programming"],["news.ycombinator.com"],["reddit.com"],["x.com"],["reddit.com","x.com"]]},"urlsExcluding":{"type":"array","items":{"type":"string"},"description":"URLs to exclude from monitoring. If any URLs are specified, keyword matches will be ignored if they occur on pages that match any of these URL patterns. This filtering is applied after URL inclusion filtering. URL patterns can be partial matches (e.g., 'reddit.com/r/funny' will exclude all posts in that subreddit).","examples":[["reddit.com/r/funny","reddit.com/r/test"]]},"textsIncluding":{"type":"array","items":{"type":"string"},"description":"Text patterns to include in monitoring. If any text patterns are specified, keyword matches will only be counted if the text content contains at least one of these patterns. Text patterns are case-insensitive substring matches. This filtering is applied after keyword matching and URL filtering.","examples":[["love","great","awesome"],["recommend","highly recommend"],["interested","looking for"]]},"textsExcluding":{"type":"array","items":{"type":"string"},"description":"Text patterns to exclude from monitoring. If any text patterns are specified, keyword matches will be ignored if the text content contains any of these patterns. This filtering is applied after text inclusion filtering. Useful for filtering out spam or unwanted content.","examples":[["spam","scam","bot"],["fake","phishing"],["not interested","unsubscribe"]]},"authorUsernamesIncluding":{"type":"array","items":{"type":"string"},"description":"Author usernames to include in monitoring. If any usernames are specified, keyword matches will only be counted if the content author's username matches at least one of these usernames. Username patterns are case-insensitive exact matches. This filtering is applied after keyword matching, URL filtering, and text content filtering. Useful for tracking mentions by specific users or accounts.","examples":[["influencer1","techreview_account","industry_expert"],["verified_user","brand_partner"],["tech_journalist","product_reviewer"]]},"authorUsernamesExcluding":{"type":"array","items":{"type":"string"},"description":"Author usernames to exclude from monitoring. If any usernames are specified, keyword matches will be ignored if the content author's username matches any of these usernames. This filtering is applied after author username inclusion filtering. Useful for filtering out matches from bots, spam accounts, or specific users you want to ignore.","examples":[["spam_bot","known_troll","competitor_sockpuppet"],["bot_account1","bot_account2"],["automod","deleted"]]},"webhookUrl":{"type":"string","format":"uri","description":"Optional webhook URL to POST to when keyword matches are found"},"notificationEmailAddress":{"type":"string","format":"email","description":"Optional email address to send notifications when keyword matches are found"}},"required":["keyword"]}}}},"responses":{"201":{"description":"The keyword monitor was successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordMonitorV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]}},"/v2/keyword_monitors/{id}":{"get":{"operationId":"getKeywordMonitor","tags":["keyword_monitors"],"summary":"Get a keyword monitor","responses":{"200":{"description":"The request was successful, and the server has returned the requested resource in the response body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordMonitorV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The keyword monitor ID"}]},"patch":{"operationId":"updateKeywordMonitor","tags":["keyword_monitors"],"summary":"Partially update a keyword monitor","description":"Updates specific fields of an existing keyword monitor. Only the fields provided in the request body will be modified. See the create endpoint documentation for detailed information about URL filtering logic and keyword matching behavior.","requestBody":{"required":true,"description":"Fields to update. Only provided fields will be modified.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"keyword":{"type":"string","description":"The keyword to monitor"},"isActive":{"type":"boolean","description":"Whether the monitor is active"},"isWholeWordOnly":{"type":"boolean","description":"Whether to match whole words only"},"urlsIncluding":{"type":"array","items":{"type":"string"},"description":"URLs to include in monitoring. If any URLs are specified, keyword matches will only be counted if they occur on pages that match at least one of these URL patterns. URL patterns can be partial matches (e.g., 'reddit.com/r/technology' will match all posts in that subreddit, 'x.com' will match all X posts). If this array is empty, all URLs are included by default.","examples":[["reddit.com/r/technology","reddit.com/r/programming"],["news.ycombinator.com"],["reddit.com"],["x.com"],["reddit.com","x.com"]]},"urlsExcluding":{"type":"array","items":{"type":"string"},"description":"URLs to exclude from monitoring. If any URLs are specified, keyword matches will be ignored if they occur on pages that match any of these URL patterns. This filtering is applied after URL inclusion filtering. URL patterns can be partial matches (e.g., 'reddit.com/r/funny' will exclude all posts in that subreddit).","examples":[["reddit.com/r/funny","reddit.com/r/test"],["reddit.com/user/"],["example.com/admin"]]},"textsIncluding":{"type":"array","items":{"type":"string"},"description":"Text patterns to include in monitoring. If any text patterns are specified, keyword matches will only be counted if the text content contains at least one of these patterns. Text patterns are case-insensitive substring matches. This filtering is applied after keyword matching and URL filtering.","examples":[["love","great","awesome"],["recommend","highly recommend"],["interested","looking for"]]},"textsExcluding":{"type":"array","items":{"type":"string"},"description":"Text patterns to exclude from monitoring. If any text patterns are specified, keyword matches will be ignored if the text content contains any of these patterns. This filtering is applied after text inclusion filtering. Useful for filtering out spam or unwanted content.","examples":[["spam","scam","bot"],["fake","phishing"],["not interested","unsubscribe"]]},"authorUsernamesIncluding":{"type":"array","items":{"type":"string"},"description":"Author usernames to include in monitoring. If any usernames are specified, keyword matches will only be counted if the content author's username matches at least one of these usernames. Username patterns are case-insensitive exact matches. This filtering is applied after keyword matching, URL filtering, and text content filtering. Useful for tracking mentions by specific users or accounts.","examples":[["influencer1","techreview_account","industry_expert"],["verified_user","brand_partner"],["tech_journalist","product_reviewer"]]},"authorUsernamesExcluding":{"type":"array","items":{"type":"string"},"description":"Author usernames to exclude from monitoring. If any usernames are specified, keyword matches will be ignored if the content author's username matches any of these usernames. This filtering is applied after author username inclusion filtering. Useful for filtering out matches from bots, spam accounts, or specific users you want to ignore.","examples":[["spam_bot","known_troll","competitor_sockpuppet"],["bot_account1","bot_account2"],["automod","deleted"]]},"webhookUrl":{"type":"string","format":"uri","description":"Optional webhook URL to POST to when keyword matches are found"},"notificationEmailAddress":{"type":"string","format":"email","description":"Optional email address to send notifications when keyword matches are found"}}}}}},"responses":{"200":{"description":"The keyword monitor was successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordMonitorV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The keyword monitor ID"}]},"delete":{"operationId":"deleteKeywordMonitor","tags":["keyword_monitors"],"summary":"Delete a keyword monitor","responses":{"204":{"description":"The keyword monitor was successfully deleted."},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The keyword monitor ID"}]}},"/v2/keyword_monitors/{id}/matches":{"get":{"operationId":"getKeywordMonitorMatches","tags":["keyword_monitors"],"summary":"Get keyword matches for a monitor","description":"Retrieve all keyword matches found by a specific keyword monitor","responses":{"200":{"description":"Successfully retrieved keyword matches","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/KeywordMatchV1"}}},"required":["data"],"title":"GetKeywordMonitorMatchesOk"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The keyword monitor ID"},{"in":"query","name":"limit","required":false,"style":"form","description":"Maximum number of matches to return","explode":true,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"allowReserved":false},{"in":"query","name":"starting_after","required":false,"style":"form","description":"Cursor for pagination - return matches after this match ID","explode":true,"schema":{"type":"string"},"allowReserved":false}]}},"/v2/keyword_matches":{"get":{"operationId":"getKeywordMatches","tags":["keyword_matches"],"summary":"Get all keyword matches","description":"Retrieve all keyword matches found across all keyword monitors for the authenticated organization","responses":{"200":{"description":"Successfully retrieved keyword matches","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/KeywordMatchV1"}}},"required":["data"],"title":"GetKeywordMatchesOk"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"query","name":"limit","required":false,"style":"form","description":"Maximum number of matches to return","explode":true,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"allowReserved":false},{"in":"query","name":"starting_after","required":false,"style":"form","description":"Cursor for pagination - return matches after this match ID","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"starting_before","required":false,"style":"form","description":"Cursor for pagination - return matches before this match ID","explode":true,"schema":{"type":"string"},"allowReserved":false}]}},"/v2/keyword_matches/{id}":{"get":{"operationId":"getKeywordMatch","tags":["keyword_matches"],"summary":"Get a keyword match","description":"Retrieve a specific keyword match by its ID","responses":{"200":{"description":"Successfully retrieved the keyword match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordMatchV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"},"404":{"description":"The keyword match with the specified ID was not found.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"title":"KeywordMatchNotFound"}}}}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The keyword match ID"}]},"patch":{"operationId":"updateKeywordMatch","tags":["keyword_matches"],"summary":"Update a keyword match","description":"Update specific fields of a keyword match. Currently supports updating the archived status of a match.","requestBody":{"required":true,"description":"Fields to update. Only provided fields will be modified.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"isArchived":{"type":"boolean","description":"Whether the keyword match should be archived. Archived matches are typically hidden from regular queries and may be subject to automatic deletion after a certain period."},"score":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"Optional relevance or quality score for the keyword match"},"analysis":{"type":["string","null"],"description":"Optional analysis or notes about the keyword match"}}}}}},"responses":{"200":{"description":"The keyword match was successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordMatchV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"},"404":{"description":"The keyword match with the specified ID was not found.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"title":"KeywordMatchNotFound"}}}}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The keyword match ID"}]}},"/v2/subreddit_monitors":{"get":{"operationId":"getSubredditMonitors","tags":["subreddit_monitors"],"summary":"Get subreddit monitors","responses":{"200":{"description":"The request was successful, and the server has returned the requested resource in the response body.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubredditMonitorV1"}}},"required":["data"],"title":"GetSubredditMonitorsOk"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]},"post":{"operationId":"createSubredditMonitor","tags":["subreddit_monitors"],"summary":"Create a subreddit monitor","description":"Creates a new subreddit monitor to track new content in a specific subreddit.","requestBody":{"required":true,"description":"Subreddit monitor configuration","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"subreddit":{"type":"string","description":"The subreddit to monitor (without the r/ prefix)","minLength":3,"maxLength":21,"pattern":"^[A-Za-z0-9_]+$"},"isActive":{"type":"boolean","description":"Whether the monitor is active"},"webhookUrl":{"type":"string","format":"uri","description":"Optional webhook URL to POST to when subreddit matches are found"},"notificationEmailAddress":{"type":"string","format":"email","description":"Optional email address to send notifications when subreddit matches are found"}},"required":["subreddit"]}}}},"responses":{"201":{"description":"The subreddit monitor was successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubredditMonitorV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]}},"/v2/subreddit_monitors/{id}":{"get":{"operationId":"getSubredditMonitor","tags":["subreddit_monitors"],"summary":"Get a subreddit monitor","responses":{"200":{"description":"The request was successful, and the server has returned the requested resource in the response body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubredditMonitorV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The subreddit monitor ID"}]},"patch":{"operationId":"updateSubredditMonitor","tags":["subreddit_monitors"],"summary":"Partially update a subreddit monitor","description":"Updates specific fields of an existing subreddit monitor. Only the fields provided in the request body will be modified.","requestBody":{"required":true,"description":"Fields to update. Only provided fields will be modified.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"subreddit":{"type":"string","description":"The subreddit to monitor (without the r/ prefix)","minLength":3,"maxLength":21,"pattern":"^[A-Za-z0-9_]+$"},"isActive":{"type":"boolean","description":"Whether the monitor is active"},"webhookUrl":{"type":"string","format":"uri","description":"Optional webhook URL to POST to when subreddit matches are found"},"notificationEmailAddress":{"type":"string","format":"email","description":"Optional email address to send notifications when subreddit matches are found"}}}}}},"responses":{"200":{"description":"The subreddit monitor was successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubredditMonitorV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The subreddit monitor ID"}]},"delete":{"operationId":"deleteSubredditMonitor","tags":["subreddit_monitors"],"summary":"Delete a subreddit monitor","responses":{"204":{"description":"The subreddit monitor was successfully deleted."},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The subreddit monitor ID"}]}},"/v2/subreddit_monitors/{id}/matches":{"get":{"operationId":"getSubredditMonitorMatches","tags":["subreddit_monitors"],"summary":"Get subreddit matches for a monitor","description":"Retrieve all subreddit matches found by a specific subreddit monitor","responses":{"200":{"description":"Successfully retrieved subreddit matches","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubredditMatchV1"}}},"required":["data"],"title":"GetSubredditMonitorMatchesOk"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The subreddit monitor ID"},{"in":"query","name":"limit","required":false,"style":"form","description":"Maximum number of matches to return","explode":true,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"allowReserved":false},{"in":"query","name":"starting_after","required":false,"style":"form","description":"Cursor for pagination - return matches after this match ID","explode":true,"schema":{"type":"string"},"allowReserved":false}]}},"/v2/subreddit_matches":{"get":{"operationId":"getSubredditMatches","tags":["subreddit_matches"],"summary":"Get all subreddit matches","description":"Retrieve all subreddit matches found across all subreddit monitors for the authenticated organization","responses":{"200":{"description":"Successfully retrieved subreddit matches","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubredditMatchV1"}}},"required":["data"],"title":"GetSubredditMatchesOk"}}}},"400":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"query","name":"limit","required":false,"style":"form","description":"Maximum number of matches to return","explode":true,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"allowReserved":false},{"in":"query","name":"starting_after","required":false,"style":"form","description":"Cursor for pagination - return matches after this match ID","explode":true,"schema":{"type":"string"},"allowReserved":false},{"in":"query","name":"starting_before","required":false,"style":"form","description":"Cursor for pagination - return matches before this match ID","explode":true,"schema":{"type":"string"},"allowReserved":false}]}},"/v2/subreddit_matches/{id}":{"get":{"operationId":"getSubredditMatch","tags":["subreddit_matches"],"summary":"Get a subreddit match","description":"Retrieve a specific subreddit match by its ID","responses":{"200":{"description":"Successfully retrieved the subreddit match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubredditMatchV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"},"404":{"description":"The subreddit match with the specified ID was not found.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"title":"SubredditMatchNotFound"}}}}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The subreddit match ID"}]},"patch":{"operationId":"updateSubredditMatch","tags":["subreddit_matches"],"summary":"Update a subreddit match","description":"Update specific fields of a subreddit match. Currently supports updating the archived status of a match.","requestBody":{"required":true,"description":"Fields to update. Only provided fields will be modified.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"isArchived":{"type":"boolean","description":"Whether the subreddit match should be archived. Archived matches are typically hidden from regular queries and may be subject to automatic deletion after a certain period."}}}}}},"responses":{"200":{"description":"The subreddit match was successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubredditMatchV1"}}}},"400":{"$ref":"#/components/responses/ErrorV2"},"404":{"description":"The subreddit match with the specified ID was not found.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"title":"SubredditMatchNotFound"}}}}},"security":[{"ApiKey":[]},{"BearerCustom":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The subreddit match ID"}]}},"/v2/organization":{"get":{"operationId":"getOrganization","tags":["organization"],"summary":"Get organization profile","description":"Retrieve the authenticated organization's profile information","responses":{"200":{"description":"Successfully retrieved organization profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationProfile"}}}},"401":{"$ref":"#/components/responses/ErrorV2"},"403":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]},"patch":{"operationId":"updateOrganization","tags":["organization"],"summary":"Update organization profile","description":"Update the authenticated organization's profile information. Only provided fields will be modified.","requestBody":{"required":true,"description":"Organization profile fields to update","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Organization name","minLength":1,"maxLength":200},"internalOverview":{"type":"string","description":"Organization overview in markdown format","maxLength":10000},"url":{"type":"string","format":"uri","description":"Organization website URL"},"keywordMatchScoringInstructions":{"type":"string","description":"Optional instructions for scoring keyword matches within this organization"}}}}}},"responses":{"200":{"description":"Organization profile successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationProfile"}}}},"400":{"$ref":"#/components/responses/ErrorV2"},"401":{"$ref":"#/components/responses/ErrorV2"},"403":{"$ref":"#/components/responses/ErrorV2"}},"security":[{"ApiKey":[]},{"BearerCustom":[]}]}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"query","name":"api_key","description":"Key Auth: Requests contain a valid `api_key` in the query string."},"BearerCustom":{"type":"http","scheme":"Bearer","bearerFormat":"Custom token","description":"Authorization: Authenticated requests contain a valid 'Authorization's header."}},"schemas":{"IndividualV1":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/IndividualName"},"gender":{"type":"string"},"addresses":{"type":"array","items":{"$ref":"#/components/schemas/Address"}},"phoneAccounts":{"type":"array","items":{"$ref":"#/components/schemas/PhoneAccount"}},"emailAddresses":{"type":"array","items":{"type":"string"}},"emailAddressesPersonal":{"type":"array","items":{"type":"string"}},"emailAddressesProfessional":{"type":"array","items":{"type":"string"}},"employments":{"type":"array","items":{"$ref":"#/components/schemas/IndividualEmployment"}},"profiles":{"type":"array","items":{"$ref":"#/components/schemas/SocialProfile"}},"metadata":{"type":"object","properties":{"about":{"type":"string"},"linkedinConnectionsCount":{"type":"integer"},"linkedinSkills":{"type":"array","items":{"type":"string"}},"profilePictureUrl":{"type":"string"}},"required":[]}},"required":[],"description":"A single person"},"IndividualName":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"full":{"type":"string"}},"required":[]},"Address":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"}},"required":[]},"PhoneAccount":{"type":"object","properties":{"uri":{"type":"string"},"name":{"type":"string"},"carrier":{"type":"string"},"type":{"type":"string"}},"required":["uri"]},"SocialProfile":{"type":"object","properties":{"network":{"type":"string"},"url":{"type":"string"}},"required":[]},"IndividualEmployment":{"type":"object","properties":{"title":{"type":"string"},"seniority":{"type":"string"},"organization":{"$ref":"#/components/schemas/RecordOrganization"}},"required":[]},"KeywordMonitorV1":{"type":"object","properties":{"id":{"type":"string"},"keyword":{"type":"string"},"isActive":{"type":"boolean"},"isWholeWordOnly":{"type":"boolean"},"isRateLimited":{"type":"boolean","description":"Whether this keyword monitor is rate limited and will temporarily drop further matches. The monitor is subject to match quotas based on your subscription plan."},"urlsIncluding":{"type":"array","items":{"type":"string"},"description":"URL patterns to include in monitoring. If specified, only matches from URLs containing these patterns will be counted."},"urlsExcluding":{"type":"array","items":{"type":"string"},"description":"URL patterns to exclude from monitoring. Matches from URLs containing these patterns will be ignored."},"textsIncluding":{"type":"array","items":{"type":"string"},"description":"Text patterns to include in monitoring. If specified, only matches with text content containing at least one of these patterns will be counted."},"textsExcluding":{"type":"array","items":{"type":"string"},"description":"Text patterns to exclude from monitoring. Matches with text content containing these patterns will be ignored."},"authorUsernamesIncluding":{"type":"array","items":{"type":"string"},"description":"Author usernames to include in monitoring. If specified, only matches from content authored by these usernames will be counted. Username patterns are case-insensitive exact matches."},"authorUsernamesExcluding":{"type":"array","items":{"type":"string"},"description":"Author usernames to exclude from monitoring. Matches from content authored by these usernames will be ignored. Username patterns are case-insensitive exact matches."},"webhookUrl":{"type":"string","format":"uri","description":"Optional webhook URL to POST to when keyword matches are found"},"notificationEmailAddress":{"type":"string","format":"email","description":"Optional email address to send notifications when keyword matches are found"}},"required":["id","keyword","isActive","isWholeWordOnly","isRateLimited"]},"KeywordMatchV1":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the keyword match"},"keyword":{"type":"string","description":"The keyword that was matched"},"keywordMonitorId":{"type":"string","description":"ID of the keyword monitor that generated this match"},"platform":{"type":"string","description":"Platform where the match was found (e.g., reddit, x)"},"textContent":{"type":"string","description":"The text content containing the keyword match"},"url":{"type":"string","description":"URL of the source where the match was found"},"createdAt":{"type":"string","format":"date-time","description":"When the match was found"},"isArchived":{"type":"boolean","description":"Whether the keyword match has been archived. Matches are automatically archived after a certain amount of time and then deleted after being archived for a configured period (default: 30 days)."},"score":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"Optional relevance or quality score for the keyword match"},"analysis":{"type":["string","null"],"description":"Optional analysis or notes about the keyword match"},"authorUsername":{"type":["string","null"],"description":"Username of the author who created the content containing the keyword match (not available for matches before December 2025)"},"parentTextContents":{"type":["array","null"],"items":{"type":"string"},"description":"**EXPERIMENTAL**: Text contents of any parent posts in the conversation thread. For example, if the matched content is a reply to a comment, this array contains the original comment(s) being replied to. May contain multiple items representing a conversation thread. This field is experimental and may change in future versions.","x-experimental":true}},"required":["id","keyword","keywordMonitorId","platform","textContent","url","createdAt","isArchived"]},"SubredditMonitorV1":{"type":"object","properties":{"id":{"type":"string"},"subreddit":{"type":"string","description":"The monitored subreddit name"},"isActive":{"type":"boolean"},"webhookUrl":{"type":"string","format":"uri","description":"Optional webhook URL to POST to when subreddit matches are found"},"notificationEmailAddress":{"type":"string","format":"email","description":"Optional email address to send notifications when subreddit matches are found"}},"required":["id","subreddit","isActive"]},"SubredditMatchV1":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the subreddit match"},"subreddit":{"type":"string","description":"The subreddit where the match was found"},"subredditMonitorId":{"type":"string","description":"ID of the subreddit monitor that generated this match"},"title":{"type":"string","description":"Title of the post"},"textContent":{"type":"string","description":"Text content of the post or comment"},"url":{"type":"string","description":"URL of the source where the match was found"},"authorUsername":{"type":["string","null"],"description":"Username of the author who created the content"},"createdAt":{"type":"string","format":"date-time","description":"When the match was found"},"isArchived":{"type":"boolean","description":"Whether the subreddit match has been archived. Matches are automatically archived after a certain amount of time and then deleted after being archived for a configured period (default: 30 days)."},"score":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"Optional relevance or quality score for the subreddit match"},"analysis":{"type":["string","null"],"description":"Optional analysis or notes about the subreddit match"}},"required":["id","subreddit","subredditMonitorId","title","textContent","url","createdAt","isArchived"]},"RecordOrganization":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"domainSet":{"type":"array","items":{"type":"string"}},"description":{"type":"string"},"foundedYear":{"type":"integer"},"address":{"$ref":"#/components/schemas/Address"},"phoneAccounts":{"type":"array","items":{"$ref":"#/components/schemas/PhoneAccount"}},"emailAddresses":{"type":"array","items":{"type":"string"}},"metrics":{"$ref":"#/components/schemas/OrganizationMetrics"},"category":{"$ref":"#/components/schemas/OrganizationCategory"},"profiles":{"type":"array","items":{"$ref":"#/components/schemas/SocialProfile"}},"tags":{"type":"array","items":{"type":"string"}},"techStack":{"type":"array","items":{"type":"string"}}},"required":[]},"OrganizationMetrics":{"type":"object","properties":{"employeeRange":{"type":"string"},"revenueRange":{"type":"string"},"funding":{"type":"number"}},"required":[]},"OrganizationCategory":{"type":"object","properties":{"sic":{"type":"string"},"naics":{"type":"string"}},"required":[]},"OrganizationProfile":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID"},"name":{"type":"string","description":"Organization name"},"internalOverview":{"type":"string","description":"Organization overview in markdown format"},"url":{"type":"string","format":"uri","description":"Organization website URL"},"keywordMatchScoringInstructions":{"type":"string","description":"Optional instructions for scoring keyword matches within this organization"}},"required":["id"]},"CompanyAnalysis":{"type":"object","properties":{"summary":{"type":"string","description":"A concise overview of what the organization does"},"products":{"type":"array","items":{"type":"string"},"description":"List of specific products they offer"},"services":{"type":"array","items":{"type":"string"},"description":"List of specific services they offer"},"targetCustomer":{"type":"string","description":"Description of their ideal customer or market segment"},"valueProposition":{"type":"string","description":"What unique value they provide and why customers should choose them"},"competitors":{"type":"array","items":{"type":"string"},"description":"List of competitors or similar companies in their space"},"industry":{"type":"string","description":"The primary industry or sector they operate in"},"keyDifferentiators":{"type":"array","items":{"type":"string"},"description":"What sets them apart from competitors"}}}},"responses":{"Error":{"description":"Request failed due to an error. The response body contains details about the error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}},"required":["errors"]}}}},"ErrorV2":{"description":"Request failed due to an error. The response body contains details about the error.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}}}}