--- title: Job.New description: Triggered when a new job matching your saved search criteria is discovered. [Learn more about webhooks](https://theirstack.com/en/docs/webhooks). url: https://theirstack.com/en/docs/webhooks/event-type/webhook_job_new --- ## Webhook event: POST job-new — Job.New Triggered when a new job matching your saved search criteria is discovered. \[Learn more about webhooks\](https://theirstack.com/en/docs/webhooks). ### Request body | Field | Type | Required | Description | | --- | --- | --- | --- | | `id` | integer | Yes | Unique identifier for this webhook event | | `payload` | JobWithMatchingPhrasesResponse-Input or CompanyWithTechnologiesAndJobs-Input or JobClosedPayload | Yes | Event data containing the job or company information that triggered the webhook. If the type is 'job.new', the payload will be a JobWithMatchingPhrasesResponse object. If the type is 'company.new', the payload will be a CompanyWithTechnologiesAndJobs object. | | `type` | enum(job.new, company.new, job.closed) | Yes | Event type indicating what triggered the webhook: 'job.new' for new jobs, 'company.new' for new companies, or 'job.closed' for closed jobs | #### `payload` | Field | Type | Required | Description | | --- | --- | --- | --- | | `avg_annual_salary_usd` | number | No | This property calculates the average annual salary for a job in USD, based on the available minimum and maximum annual salary values (both already converted to USD): If both min\_annual\_salary\_usd and max\_annual\_salary\_usd are missing or zero, it returns None. If only the minimum is missing, it returns the maximum value. If only the maximum is missing, it returns the minimum value. If both are present, it returns the average of the two, rounded to two decimal places. This ensures the property always provides the best possible estimate of the average salary, even if only one bound is available. | | `cities` | array | No | Cities of the job | | `closed_at` | string | No | Datetime (UTC) at which TheirStack detected the job posting was closed by the source. \`null\` means the job is still considered open (or we don't know yet). | | `company` | string | Yes | Company name. This field is deprecated, please don't use it | | `company_domain` | string | No | Company website domain | | `company_object` | CompanyWithTechnologySlugs | Yes | Company object | | `continents` | array | No | Continents of the job | | `countries` | array | No | Countries of the job | | `country` | string | No | Country name of the job | | `country_code` | string | No | Two-letter country code (ISO 3166-1 alpha-2) representing the job's location. If the job has multiple locations, the first one is returned. | | `country_codes` | array | No | Two-letter country codes (ISO 3166-1 alpha-2) representing the job's locations. | | `created_at` | string | No | created\_at of the job | | `date_posted` | string | Yes | Date when the job was posted | | `date_reposted` | string | No | Date when the job was reposted | | `description` | string | No | Job description in markdown format | | `discovered_at` | string | Yes | Date when the job was discovered by TheirStack | | `easy_apply` | boolean | No | Indicates whether the job application can be submitted directly through the job board (easy\_apply=True) or requires redirecting to the company's website (easy\_apply=False). | | `employment_statuses` | array | No | Employment statuses of the job | | `final_url` | string | No | Is the URL of the job in the career page of the company. | | `has_blurred_data` | boolean | No | Whether the returned object has company identifiable data blurred or not Default: false | | `hiring_team` | array | No | Hiring team who posted the job | | `hybrid` | boolean | No | If the job is hybrid. A hybrid position is a job that combines remote and in-office work. | | `id` | integer | Yes | ID of the job | | `job_title` | string | Yes | Job title | | `keyword_slugs` | array | No | Slugs of all keywords (technologies and buying intent topics) found in the job title, description, or URL. | | `latitude` | number | No | The latitude of the job. | | `location` | string | No | This is the city of the job. | | `locations` | array | No | All possible locations of the job with coordinates, city, state, state\_code, country\_code, etc. | | `long_location` | string | No | It's a combination of the city, the state and the postal code of the job. | | `longitude` | number | No | The longitude of the job. | | `manager_roles` | array | No | Roles of the person or people found in the job description to be the managers of the hired person. Can be useful to infer who's the decision maker for the technologies mentioned in the job post. | | `matching_phrases` | array | No | Phrases from the job description that match the pattern passed | | `matching_words` | array | No | Words from the job description that match the pattern passed | | `max_annual_salary` | integer | No | The maximum annual salary of the job in the local currency. | | `max_annual_salary_usd` | number | No | The maximum annual salary of the job in USD. | | `min_annual_salary` | integer | No | The minimum annual salary of the job in the local currency. | | `min_annual_salary_usd` | number | No | The minimum annual salary of the job in USD. | | `neg_posted_at_timestamp` | integer | No | neg\_posted\_at\_timestamp of the job | | `normalized_title` | string | No | | | `postal_code` | string | No | The postal code of the job. | | `remote` | boolean | No | If the job is remote. | | `reposted` | boolean | No | Indicates whether the employer has republished this job posting. | | `salary_currency` | string | No | The currency of the salary of the job. | | `salary_string` | string | No | The salary of the job in the local currency. If a similar field is present in the job source, this property will contain the same content. If no similar field is present, the content will be have the following format: - per year. For the currencies where the symbol precedes the digits, the format will be - per year. In these latter two cases, both the min and max annual salary are expressed in either k (for thousands) or M (for millions). | | `seniority` | enum(c\_level, staff, senior, junior, mid\_level) | No | Seniority level of the job | | `short_location` | string | No | It's a combination of the city and the state of the job. | | `source_url` | string | Yes | Is the url TheirStack used to get the job data. | | `state_code` | string | No | The state code of the job. | | `technology_slugs` | array | No | Slugs of the technologies found in the job title, description, or URL. This is a subset of keyword\_slugs filtered to only technology-type keywords. | | `url` | string | Yes | URL of the job post | | `url_hashed` | integer | No | url\_hashed of the job | ##### `company_object` | Field | Type | Required | Description | | --- | --- | --- | --- | | `alexa_ranking` | integer | No | Alexa ranking | | `annual_revenue_usd` | number | No | Annual revenue of the company in USD | | `annual_revenue_usd_readable` | string | No | Annual revenue of the company in USD, formated as an easily readable string | | `apollo_id` | string | No | ID of the company in Apollo | | `city` | string | No | City of the company's HQ | | `company_keywords` | array | No | Company keywords, related to what the company does. Deprecated: use company\_tags instead. | | `company_tags` | array | No | Company keywords, related to what the company does | | `country` | string | No | Country of the company's HQ | | `country_code` | string | No | ISO2 country code. E.g. "US" | | `domain` | string | No | Company domain | | `employee_count` | integer | No | Number of employees of the company | | `employee_count_range` | string | No | Number range of employees at the company | | `founded_year` | integer | No | Year the company was founded | | `funding_stage` | enum(angel, convertible\_note, debt\_financing, equity\_crowdfunding, other, private\_equity, seed, series\_a, series\_b, series\_c, series\_d, series\_e, series\_f, series\_g, series\_h, venture\_round\_not\_specified, series\_i, series\_j, undisclosed, series\_unknown, pre\_seed, post\_ipo\_secondary, post\_ipo\_equity, post\_ipo\_debt, non\_equity\_assistance, late\_vc, initial\_coin\_offering, growth\_equity\_vc, grant, early\_vc, corporate\_round, secondary\_market, product\_crowdfunding) | No | Latest funding stage of the company | | `has_blurred_data` | boolean | No | Whether the returned object has company identifiable data blurred or not Default: false | | `id` | string | Yes | Company ID | | `industry` | string | No | Industry of the company | | `industry_id` | integer | No | Code of the industry. One of LinkedIn's Industry Codes V2 from https://learn.microsoft.com/en-us/linkedin/shared/references/reference-tables/industry-codes-v2 | | `investors` | array | No | List of investors in this company | | `is_recruiting_agency` | boolean | No | Is a recruiting agency | | `keyword_slugs` | array | No | Slugs of all keywords (technologies and buying intent topics) found in this company's jobs | | `last_funding_round_amount_readable` | string | No | Amount of the last funding round of the company, formated as an easily readable string | | `last_funding_round_date` | string | No | Date of the last funding round of the company | | `linkedin_id` | string | No | ID of the company in LinkedIn | | `linkedin_url` | string | No | | | `logo` | string | No | Stable CDN-hosted company logo URL suitable for display in applications | | `long_description` | string | No | Short description of the company | | `name` | string | Yes | Company name | | `num_buying_intent_topics` | integer | No | Number of distinct buying intent topic keywords found in this company's jobs Default: 0 | | `num_jobs` | integer | No | Number of jobs from this company in our database Default: 0 | | `num_jobs_found` | integer | No | When filtering companies by jobs, number of jobs found for this company | | `num_jobs_last_30_days` | integer | No | Number of jobs from this company in our database posted in the last 30 days Default: 0 | | `num_keywords` | integer | No | Number of distinct keywords (technologies + buying intent topics) found in this company's jobs Default: 0 | | `num_technologies` | integer | No | Number of technologies mentioned in the jobs of this company Default: 0 | | `possible_domains` | array | No | List of possible domains for the company | | `postal_code` | string | No | Postal code of the company's HQ | | `publicly_traded_exchange` | string | No | | | `publicly_traded_symbol` | string | No | | | `seo_description` | string | No | SEO description of the company, extracted from their website | | `technology_names` | array | No | Names of the technologies found to be used by the company | | `technology_slugs` | array | No | Slugs of the technologies found in this company's jobs. This is a subset of keyword\_slugs filtered to only technology-type keywords. | | `total_funding_usd` | integer | No | Funding of the company in USD | | `url` | string | No | Company domain. Same as the "domain" field. Will be deprecated in the future. | | `url_source` | string | No | Source of the company URL | | `yc_batch` | string | No | If the company went through YC, this is its batch | ##### `hiring_team` | Field | Type | Required | Description | | --- | --- | --- | --- | | `first_name` | string | No | First name of the person | | `full_name` | string | No | Full name of the person | | `image_url` | string | No | Image URL of the person | | `linkedin_url` | string | No | LinkedIn URL of the person | | `role` | string | No | Role of the person | | `thumbnail_url` | string | No | Thumbnail URL of the person | ##### `locations` | Field | Type | Required | Description | | --- | --- | --- | --- | | `address` | null | No | Address of the location (Deprecated): This field has been removed. Use the location fields (name, admin1\_name, country\_code, etc.) to construct addresses as needed | | `admin1_code` | string | No | State code of the location (Deprecated): Use 'admin1\_code' instead | | `admin1_name` | string | No | State of the location (Deprecated): Use 'admin1\_name' instead | | `admin2_code` | string | No | The second level administrative division code of the location | | `admin2_name` | string | No | The second level administrative division name of the location (e.g., county or district) | | `city` | string | No | The city of the location (Deprecated): Use 'name' field when 'type' is 'city' | | `continent` | string | No | Continent code of the location | | `country_code` | string | No | ISO 3166-1 alpha-2 country code of the location | | `feature_code` | string | No | GeoNames feature code (e.g., 'PPL' for populated place, 'ADM1' for first-order administrative division, 'PCLI' for country). Check all the possible feature codes in the GeoNames documentation | | `id` | integer | No | The unique identifier for the location, is based on the geonameid field from the geonames database | | `latitude` | number | No | Geographic latitude coordinate for precise mapping | | `longitude` | number | No | Geographic longitude coordinate for precise mapping | | `name` | string | No | The name of the location. If it's a city, it will be the city name; if it's a country, it will be the country name; if it's a region, it will be the region name, etc | | `postal_code` | null | No | Postal code of the location (Deprecated): This field has been removed and is no longer available | | `type` | enum(city, region, country, continent) | No | The type of the location | ### Responses #### 200 — Successful Response #### 422 — Validation Error | Field | Type | Required | Description | | --- | --- | --- | --- | | `detail` | array | No | | ##### `detail` | Field | Type | Required | Description | | --- | --- | --- | --- | | `loc` | array | Yes | | | `msg` | string | Yes | | | `type` | string | Yes | |