From 447177e6a8125ffd2773ae12d97c528436b07786 Mon Sep 17 00:00:00 2001 From: Renato Byrro Date: Thu, 30 Oct 2025 12:02:59 -0300 Subject: [PATCH] Exa.ai Starter MCP Server (#660) --- docker/toolkits.txt | 1 + toolkits/exa_api/.pre-commit-config.yaml | 18 + toolkits/exa_api/.ruff.toml | 44 + toolkits/exa_api/LICENSE | 21 + toolkits/exa_api/Makefile | 54 + toolkits/exa_api/arcade_exa_api/__init__.py | 0 toolkits/exa_api/arcade_exa_api/moar/Exa.json | 5550 ++ .../exa_api/arcade_exa_api/moar/openapi.json | 60595 ++++++++++++++++ .../exa_api/arcade_exa_api/tools/__init__.py | 1954 + .../tools/request_body_schemas.py | 16 + .../CancelEnrichmentProcess.json | 137 + .../wrapper_tools/CancelRunningSearch.json | 137 + .../wrapper_tools/CancelWebsetOperations.json | 104 + .../wrapper_tools/CreateDataImport.json | 104 + .../CreateMonitorForWebsets.json | 104 + .../wrapper_tools/CreateResearchRequest.json | 104 + .../CreateWebhookForNotifications.json | 104 + .../wrapper_tools/CreateWebset.json | 104 + .../wrapper_tools/CreateWebsetEnrichment.json | 137 + .../wrapper_tools/CreateWebsetSearch.json | 137 + .../wrapper_tools/DeleteEnrichment.json | 137 + .../wrapper_tools/DeleteImport.json | 104 + .../wrapper_tools/DeleteMonitor.json | 104 + .../wrapper_tools/DeleteWebset.json | 104 + .../wrapper_tools/DeleteWebsetItem.json | 137 + .../wrapper_tools/FindSimilarLinks.json | 104 + .../wrapper_tools/GenerateAnswerSummary.json | 170 + .../wrapper_tools/GetContentDetails.json | 104 + .../wrapper_tools/GetEnrichmentDetails.json | 137 + .../wrapper_tools/GetEventById.json | 104 + .../wrapper_tools/GetResearchById.json | 170 + .../wrapper_tools/GetSearchById.json | 137 + .../wrapper_tools/GetSpecificImport.json | 104 + .../wrapper_tools/GetSpecificMonitor.json | 104 + .../wrapper_tools/GetSpecificMonitorRun.json | 137 + .../wrapper_tools/GetWebhookInfo.json | 104 + .../wrapper_tools/GetWebhooksList.json | 137 + .../wrapper_tools/GetWebsetDetails.json | 137 + .../wrapper_tools/GetWebsetItem.json | 137 + .../wrapper_tools/ListImports.json | 137 + .../wrapper_tools/ListMonitorRuns.json | 104 + .../wrapper_tools/ListResearchRequests.json | 137 + .../wrapper_tools/ListSystemEvents.json | 236 + .../wrapper_tools/ListWebhookAttempts.json | 276 + .../wrapper_tools/ListWebsetItems.json | 203 + .../wrapper_tools/ListWebsets.json | 137 + .../wrapper_tools/ListWebsiteMonitors.json | 170 + .../wrapper_tools/PerformExaSearch.json | 104 + .../PreviewSearchDecomposition.json | 104 + .../wrapper_tools/RemoveWebhook.json | 104 + .../UpdateImportsConfiguration.json | 137 + .../UpdateMonitorConfiguration.json | 137 + .../wrapper_tools/UpdateWebhookSettings.json | 137 + .../wrapper_tools/UpdateWebset.json | 137 + .../wrapper_tools/UpdateWebsetEnrichment.json | 170 + toolkits/exa_api/pyproject.toml | 61 + toolkits/exa_api/tests/__init__.py | 0 57 files changed, 74288 insertions(+) create mode 100644 toolkits/exa_api/.pre-commit-config.yaml create mode 100644 toolkits/exa_api/.ruff.toml create mode 100644 toolkits/exa_api/LICENSE create mode 100644 toolkits/exa_api/Makefile create mode 100644 toolkits/exa_api/arcade_exa_api/__init__.py create mode 100644 toolkits/exa_api/arcade_exa_api/moar/Exa.json create mode 100644 toolkits/exa_api/arcade_exa_api/moar/openapi.json create mode 100644 toolkits/exa_api/arcade_exa_api/tools/__init__.py create mode 100644 toolkits/exa_api/arcade_exa_api/tools/request_body_schemas.py create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelEnrichmentProcess.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelRunningSearch.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelWebsetOperations.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateDataImport.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateMonitorForWebsets.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateResearchRequest.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebhookForNotifications.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebset.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetEnrichment.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetSearch.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteEnrichment.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteImport.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteMonitor.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebset.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebsetItem.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/FindSimilarLinks.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GenerateAnswerSummary.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetContentDetails.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEnrichmentDetails.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEventById.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetResearchById.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSearchById.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificImport.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitor.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitorRun.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhookInfo.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhooksList.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetDetails.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetItem.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListImports.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListMonitorRuns.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListResearchRequests.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListSystemEvents.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebhookAttempts.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsetItems.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsets.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsiteMonitors.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/PerformExaSearch.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/PreviewSearchDecomposition.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/RemoveWebhook.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateImportsConfiguration.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateMonitorConfiguration.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebhookSettings.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebset.json create mode 100644 toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebsetEnrichment.json create mode 100644 toolkits/exa_api/pyproject.toml create mode 100644 toolkits/exa_api/tests/__init__.py diff --git a/docker/toolkits.txt b/docker/toolkits.txt index 8eb7d9d4..369016c6 100644 --- a/docker/toolkits.txt +++ b/docker/toolkits.txt @@ -6,6 +6,7 @@ arcade-calendly-api arcade-clickup-api arcade-cursor-agents-api arcade-datadog-api +arcade-exa-api arcade-figma-api arcade-freshservice-api arcade-linkedin diff --git a/toolkits/exa_api/.pre-commit-config.yaml b/toolkits/exa_api/.pre-commit-config.yaml new file mode 100644 index 00000000..71808129 --- /dev/null +++ b/toolkits/exa_api/.pre-commit-config.yaml @@ -0,0 +1,18 @@ +files: ^.*/exa_api/.* +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: "v4.4.0" + hooks: + - id: check-case-conflict + - id: check-merge-conflict + - id: check-toml + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.6.7 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format diff --git a/toolkits/exa_api/.ruff.toml b/toolkits/exa_api/.ruff.toml new file mode 100644 index 00000000..9519fe6c --- /dev/null +++ b/toolkits/exa_api/.ruff.toml @@ -0,0 +1,44 @@ +target-version = "py310" +line-length = 100 +fix = true + +[lint] +select = [ + # flake8-2020 + "YTT", + # flake8-bandit + "S", + # flake8-bugbear + "B", + # flake8-builtins + "A", + # flake8-comprehensions + "C4", + # flake8-debugger + "T10", + # flake8-simplify + "SIM", + # isort + "I", + # mccabe + "C90", + # pycodestyle + "E", "W", + # pyflakes + "F", + # pygrep-hooks + "PGH", + # pyupgrade + "UP", + # ruff + "RUF", + # tryceratops + "TRY", +] + +[lint.per-file-ignores] +"**/tests/*" = ["S101"] + +[format] +preview = true +skip-magic-trailing-comma = false diff --git a/toolkits/exa_api/LICENSE b/toolkits/exa_api/LICENSE new file mode 100644 index 00000000..dfbb8b76 --- /dev/null +++ b/toolkits/exa_api/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025, Arcade AI + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/toolkits/exa_api/Makefile b/toolkits/exa_api/Makefile new file mode 100644 index 00000000..86da492a --- /dev/null +++ b/toolkits/exa_api/Makefile @@ -0,0 +1,54 @@ +.PHONY: help + +help: + @echo "🛠️ github Commands:\n" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +.PHONY: install +install: ## Install the uv environment and install all packages with dependencies + @echo "🚀 Creating virtual environment and installing all packages using uv" + @uv sync --active --all-extras --no-sources + @if [ -f .pre-commit-config.yaml ]; then uv run --no-sources pre-commit install; fi + @echo "✅ All packages and dependencies installed via uv" + +.PHONY: install-local +install-local: ## Install the uv environment and install all packages with dependencies with local Arcade sources + @echo "🚀 Creating virtual environment and installing all packages using uv" + @uv sync --active --all-extras + @if [ -f .pre-commit-config.yaml ]; then uv run pre-commit install; fi + @echo "✅ All packages and dependencies installed via uv" +.PHONY: build +build: clean-build ## Build wheel file using poetry + @echo "🚀 Creating wheel file" + uv build + +.PHONY: clean-build +clean-build: ## clean build artifacts + @echo "🗑️ Cleaning dist directory" + rm -rf dist + +.PHONY: test +test: ## Test the code with pytest + @echo "🚀 Testing code: Running pytest" + @uv run --no-sources pytest -W ignore -v --cov --cov-config=pyproject.toml --cov-report=xml + +.PHONY: coverage +coverage: ## Generate coverage report + @echo "coverage report" + @uv run --no-sources coverage report + @echo "Generating coverage report" + @uv run --no-sources coverage html + +.PHONY: bump-version +bump-version: ## Bump the version in the pyproject.toml file by a patch version + @echo "🚀 Bumping version in pyproject.toml" + uv version --no-sources --bump patch + +.PHONY: check +check: ## Run code quality tools. + @if [ -f .pre-commit-config.yaml ]; then\ + echo "🚀 Linting code: Running pre-commit";\ + uv run --no-sources pre-commit run -a;\ + fi + @echo "🚀 Static type checking: Running mypy" + @uv run --no-sources mypy --config-file=pyproject.toml diff --git a/toolkits/exa_api/arcade_exa_api/__init__.py b/toolkits/exa_api/arcade_exa_api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/toolkits/exa_api/arcade_exa_api/moar/Exa.json b/toolkits/exa_api/arcade_exa_api/moar/Exa.json new file mode 100644 index 00000000..dfb31d44 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/moar/Exa.json @@ -0,0 +1,5550 @@ +{ + "name": "Exa", + "spec_source": "openapi_spec", + "token_for_http_testing": "", + "package_name": "exa_api", + "package_dir_path": "/Users/rb/arcade/arcade-ai/toolkits/exa_api/arcade_exa_api", + "project_dir_path": "/Users/rb/arcade/arcade-ai/toolkits/exa_api", + "arcade_new_cmd_executed": true, + "api_endpoint_selection_customized": false, + "api_endpoint_for_http_testing": "", + "authorization_type": "api_key", + "auth_provider_id": "", + "where_to_provide_token": "header", + "token_key_name": "Authorization", + "token_value": "Bearer {authorization}", + "secrets": [ + { + "arcade_key_name": "EXA_API_KEY", + "service_key_name": "Authorization", + "where_to_provide": "header", + "formatted_value": "Bearer {authorization}" + } + ], + "global_base_url": "https://api.exa.ai", + "global_headers": {}, + "edit_operations": [], + "uuid": "019ba33c-a79b-4337-8d58-a523771d0f3f", + "api_endpoints": [ + { + "name": "search", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "perform_exa_search", + "description": { + "tagline": "Conduct a search using Exa and retrieve relevant results.", + "detailed": "This tool performs a search using the Exa prompt-engineered query system. It retrieves a list of relevant search results based on the query, with an optional feature to include content details." + }, + "return_annotation": "A list of relevant search results from Exa.", + "arguments": [ + { + "name": "search_query", + "alternative_names": [ + "query_input", + "exa_search_terms" + ], + "description": "The search query as a JSON object containing parameters for the Exa search. This object can include the main search term and any other required parameters for performing the search.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/search", + "tags": [], + "summary": "Search", + "description": "Perform a search with a Exa prompt-engineered query and retrieve a list of relevant results. Optionally get contents.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "object", + "properties": {}, + "allOf": [ + { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The query string for the search.", + "example": "Latest developments in LLM capabilities" + }, + "type": { + "type": "string", + "description": "The type of search. Neural uses an embeddings-based model, keyword is google-like SERP, and auto (default) intelligently combines the two. Fast uses streamlined versions of the neural and keyword models.", + "enum": [ + "keyword", + "neural", + "fast", + "auto" + ], + "example": "auto" + }, + "category": { + "type": "string", + "description": "A data category to focus on.", + "enum": [ + "company", + "research paper", + "news", + "pdf", + "github", + "tweet", + "personal site", + "linkedin profile", + "financial report" + ], + "example": "research paper" + }, + "userLocation": { + "type": "string", + "description": "The two-letter ISO country code of the user, e.g. US.", + "example": "US" + } + }, + "required": [ + "query" + ] + }, + { + "type": "object", + "properties": { + "numResults": { + "type": "integer", + "description": "Number of results to return (up to thousands of results available for custom plans)", + "example": 10, + "minimum": 1, + "maximum": 100 + }, + "includeDomains": { + "type": "array", + "description": "List of domains to include in the search. If specified, results will only come from these domains.", + "items": { + "type": "string" + } + }, + "excludeDomains": { + "type": "array", + "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains.", + "items": { + "type": "string" + } + }, + "startCrawlDate": { + "type": "string", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-01-01" + }, + "endCrawlDate": { + "type": "string", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-12-31" + }, + "startPublishedDate": { + "type": "string", + "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-01-01" + }, + "endPublishedDate": { + "type": "string", + "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-12-31" + }, + "includeText": { + "type": "array", + "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", + "items": { + "type": "string" + } + }, + "excludeText": { + "type": "array", + "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", + "items": { + "type": "string" + } + }, + "context": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + }, + "contents": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "description": "The number of sentences to return for each snippet.", + "example": 1, + "minimum": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "description": "The number of snippets to return for each result.", + "example": 1, + "minimum": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "properties": {} + } + } + }, + "livecrawl": { + "type": "string", + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "type": "object", + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "properties": {}, + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + } + } + } + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"example\": \"Latest developments in LLM capabilities\",\n \"description\": \"The query string for the search.\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"keyword\",\n \"neural\",\n \"fast\",\n \"auto\"\n ],\n \"description\": \"The type of search. Neural uses an embeddings-based model, keyword is google-like SERP, and auto (default) intelligently combines the two. Fast uses streamlined versions of the neural and keyword models.\",\n \"example\": \"auto\",\n \"default\": \"auto\"\n },\n \"category\": {\n \"type\": \"string\",\n \"enum\": [\n \"company\",\n \"research paper\",\n \"news\",\n \"pdf\",\n \"github\",\n \"tweet\",\n \"personal site\",\n \"linkedin profile\",\n \"financial report\"\n ],\n \"description\": \"A data category to focus on.\",\n \"example\": \"research paper\"\n },\n \"userLocation\": {\n \"type\": \"string\",\n \"description\": \"The two-letter ISO country code of the user, e.g. US.\",\n \"example\": \"US\"\n }\n },\n \"required\": [\n \"query\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"numResults\": {\n \"type\": \"integer\",\n \"maximum\": 100,\n \"default\": 10,\n \"minimum\": 1,\n \"description\": \"Number of results to return (up to thousands of results available for custom plans)\",\n \"example\": 10\n },\n \"includeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to include in the search. If specified, results will only come from these domains.\",\n \"example\": [\n \"arxiv.org\",\n \"paperswithcode.com\"\n ]\n },\n \"excludeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to exclude from search results. If specified, no results will be returned from these domains.\"\n },\n \"startCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"startPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date after this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date before this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"includeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.\",\n \"example\": [\n \"large language model\"\n ]\n },\n \"excludeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.\",\n \"example\": [\n \"course\"\n ]\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n },\n \"contents\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"title\": \"Simple text retrieval\",\n \"description\": \"If true, returns full page text with default settings. If false, disables text return.\"\n },\n {\n \"type\": \"object\",\n \"title\": \"Advanced text options\",\n \"description\": \"Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit for the full page text. Useful for controlling response size and API costs.\",\n \"example\": 1000\n },\n \"includeHtmlTags\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Include HTML tags in the response, which can help LLMs understand text structure and formatting.\",\n \"example\": false\n }\n }\n }\n ]\n },\n \"highlights\": {\n \"type\": \"object\",\n \"description\": \"Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.\",\n \"properties\": {\n \"numSentences\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of sentences to return for each snippet.\",\n \"example\": 1\n },\n \"highlightsPerUrl\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of snippets to return for each result.\",\n \"example\": 1\n },\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query to direct the LLM's selection of highlights.\",\n \"example\": \"Key advancements\"\n }\n }\n },\n \"summary\": {\n \"type\": \"object\",\n \"description\": \"Summary of the webpage\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query for the LLM-generated summary.\",\n \"example\": \"Main developments\"\n },\n \"schema\": {\n \"type\": \"object\",\n \"description\": \"JSON schema for structured output from summary. \\nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\\n\",\n \"example\": {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Title\",\n \"type\": \"object\",\n \"properties\": {\n \"Property 1\": {\n \"type\": \"string\",\n \"description\": \"Description\"\n },\n \"Property 2\": {\n \"type\": \"string\",\n \"enum\": [\n \"option 1\",\n \"option 2\",\n \"option 3\"\n ],\n \"description\": \"Description\"\n }\n },\n \"required\": [\n \"Property 1\"\n ]\n }\n }\n }\n },\n \"livecrawl\": {\n \"type\": \"string\",\n \"enum\": [\n \"never\",\n \"fallback\",\n \"always\",\n \"preferred\"\n ],\n \"description\": \"Options for livecrawling pages.\\n'never': Disable livecrawling (default for neural search).\\n'fallback': Livecrawl when cache is empty (default for keyword search).\\n'always': Always livecrawl.\\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\\n\",\n \"example\": \"always\"\n },\n \"livecrawlTimeout\": {\n \"type\": \"integer\",\n \"default\": 10000,\n \"description\": \"The timeout for livecrawling in milliseconds.\",\n \"example\": 1000\n },\n \"subpages\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"The number of subpages to crawl. The actual number crawled may be limited by system constraints.\",\n \"example\": 1\n },\n \"subpageTarget\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ],\n \"description\": \"Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.\",\n \"example\": \"sources\"\n },\n \"extras\": {\n \"type\": \"object\",\n \"description\": \"Extra parameters to pass.\",\n \"properties\": {\n \"links\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of URLs to return from each webpage.\",\n \"example\": 1\n },\n \"imageLinks\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of images to return for each result.\",\n \"example\": 1\n }\n }\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": true, + "validate_request_body_schema": true, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "findSimilar", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "find_similar_links", + "description": { + "tagline": "Find similar links to a given link.", + "detailed": "This tool finds links similar to the provided link and can optionally retrieve their contents. It should be called when a user needs to discover related web pages or resources." + }, + "return_annotation": "List of similar links based on the provided input.", + "arguments": [ + { + "name": "input_link_details", + "alternative_names": [ + "link_input_data", + "link_search_parameters" + ], + "description": "JSON object containing the link to find similarities for. May include optional flags for retrieving content.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/findSimilar", + "tags": [], + "summary": "Find similar links", + "description": "Find similar links to the link provided. Optionally get contents.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "object", + "properties": {}, + "allOf": [ + { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The url for which you would like to find similar links.", + "example": "https://arxiv.org/abs/2307.06435" + } + }, + "required": [ + "url" + ] + }, + { + "type": "object", + "properties": { + "numResults": { + "type": "integer", + "description": "Number of results to return (up to thousands of results available for custom plans)", + "example": 10, + "minimum": 1, + "maximum": 100 + }, + "includeDomains": { + "type": "array", + "description": "List of domains to include in the search. If specified, results will only come from these domains.", + "items": { + "type": "string" + } + }, + "excludeDomains": { + "type": "array", + "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains.", + "items": { + "type": "string" + } + }, + "startCrawlDate": { + "type": "string", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-01-01" + }, + "endCrawlDate": { + "type": "string", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-12-31" + }, + "startPublishedDate": { + "type": "string", + "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-01-01" + }, + "endPublishedDate": { + "type": "string", + "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", + "format": "date-time", + "example": "2023-12-31" + }, + "includeText": { + "type": "array", + "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", + "items": { + "type": "string" + } + }, + "excludeText": { + "type": "array", + "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", + "items": { + "type": "string" + } + }, + "context": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + }, + "contents": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "description": "The number of sentences to return for each snippet.", + "example": 1, + "minimum": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "description": "The number of snippets to return for each result.", + "example": 1, + "minimum": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "properties": {} + } + } + }, + "livecrawl": { + "type": "string", + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "type": "object", + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "properties": {}, + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + } + } + } + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"url\": {\n \"type\": \"string\",\n \"example\": \"https://arxiv.org/abs/2307.06435\",\n \"description\": \"The url for which you would like to find similar links.\"\n }\n },\n \"required\": [\n \"url\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"numResults\": {\n \"type\": \"integer\",\n \"maximum\": 100,\n \"default\": 10,\n \"minimum\": 1,\n \"description\": \"Number of results to return (up to thousands of results available for custom plans)\",\n \"example\": 10\n },\n \"includeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to include in the search. If specified, results will only come from these domains.\",\n \"example\": [\n \"arxiv.org\",\n \"paperswithcode.com\"\n ]\n },\n \"excludeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to exclude from search results. If specified, no results will be returned from these domains.\"\n },\n \"startCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"startPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date after this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date before this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"includeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.\",\n \"example\": [\n \"large language model\"\n ]\n },\n \"excludeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.\",\n \"example\": [\n \"course\"\n ]\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n },\n \"contents\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"title\": \"Simple text retrieval\",\n \"description\": \"If true, returns full page text with default settings. If false, disables text return.\"\n },\n {\n \"type\": \"object\",\n \"title\": \"Advanced text options\",\n \"description\": \"Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit for the full page text. Useful for controlling response size and API costs.\",\n \"example\": 1000\n },\n \"includeHtmlTags\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Include HTML tags in the response, which can help LLMs understand text structure and formatting.\",\n \"example\": false\n }\n }\n }\n ]\n },\n \"highlights\": {\n \"type\": \"object\",\n \"description\": \"Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.\",\n \"properties\": {\n \"numSentences\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of sentences to return for each snippet.\",\n \"example\": 1\n },\n \"highlightsPerUrl\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of snippets to return for each result.\",\n \"example\": 1\n },\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query to direct the LLM's selection of highlights.\",\n \"example\": \"Key advancements\"\n }\n }\n },\n \"summary\": {\n \"type\": \"object\",\n \"description\": \"Summary of the webpage\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query for the LLM-generated summary.\",\n \"example\": \"Main developments\"\n },\n \"schema\": {\n \"type\": \"object\",\n \"description\": \"JSON schema for structured output from summary. \\nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\\n\",\n \"example\": {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Title\",\n \"type\": \"object\",\n \"properties\": {\n \"Property 1\": {\n \"type\": \"string\",\n \"description\": \"Description\"\n },\n \"Property 2\": {\n \"type\": \"string\",\n \"enum\": [\n \"option 1\",\n \"option 2\",\n \"option 3\"\n ],\n \"description\": \"Description\"\n }\n },\n \"required\": [\n \"Property 1\"\n ]\n }\n }\n }\n },\n \"livecrawl\": {\n \"type\": \"string\",\n \"enum\": [\n \"never\",\n \"fallback\",\n \"always\",\n \"preferred\"\n ],\n \"description\": \"Options for livecrawling pages.\\n'never': Disable livecrawling (default for neural search).\\n'fallback': Livecrawl when cache is empty (default for keyword search).\\n'always': Always livecrawl.\\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\\n\",\n \"example\": \"always\"\n },\n \"livecrawlTimeout\": {\n \"type\": \"integer\",\n \"default\": 10000,\n \"description\": \"The timeout for livecrawling in milliseconds.\",\n \"example\": 1000\n },\n \"subpages\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"The number of subpages to crawl. The actual number crawled may be limited by system constraints.\",\n \"example\": 1\n },\n \"subpageTarget\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ],\n \"description\": \"Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.\",\n \"example\": \"sources\"\n },\n \"extras\": {\n \"type\": \"object\",\n \"description\": \"Extra parameters to pass.\",\n \"properties\": {\n \"links\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of URLs to return from each webpage.\",\n \"example\": 1\n },\n \"imageLinks\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of images to return for each result.\",\n \"example\": 1\n }\n }\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": true, + "validate_request_body_schema": true, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "getContents", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_content_details", + "description": { + "tagline": "Retrieve details about specific content.", + "detailed": "Use this tool to retrieve detailed information about specific content from the EXA service. It should be called when content details are needed for further processing or display." + }, + "return_annotation": "Details about the requested content.", + "arguments": [ + { + "name": "content_request_data", + "alternative_names": [ + "content_request_body", + "content_details_request" + ], + "description": "The JSON data containing parameters to specify which content details to retrieve.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/contents", + "tags": [], + "summary": "Get Contents", + "description": "", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "object", + "properties": {}, + "allOf": [ + { + "type": "object", + "properties": { + "urls": { + "type": "array", + "description": "Array of URLs to crawl (backwards compatible with 'ids' parameter).", + "items": { + "type": "string" + } + }, + "ids": { + "type": "array", + "description": "Deprecated - use 'urls' instead. Array of document IDs obtained from searches.", + "items": { + "type": "string" + } + } + }, + "required": [ + "urls" + ] + }, + { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "description": "The number of sentences to return for each snippet.", + "example": 1, + "minimum": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "description": "The number of snippets to return for each result.", + "example": 1, + "minimum": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "properties": {} + } + } + }, + "livecrawl": { + "type": "string", + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "type": "object", + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "properties": {}, + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + } + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": \"object\",\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"urls\": {\n \"type\": \"array\",\n \"description\": \"Array of URLs to crawl (backwards compatible with 'ids' parameter).\",\n \"items\": {\n \"type\": \"string\"\n },\n \"example\": [\n \"https://arxiv.org/pdf/2307.06435\"\n ]\n },\n \"ids\": {\n \"type\": \"array\",\n \"deprecated\": true,\n \"description\": \"Deprecated - use 'urls' instead. Array of document IDs obtained from searches.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"example\": [\n \"https://arxiv.org/pdf/2307.06435\"\n ]\n }\n },\n \"required\": [\n \"urls\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"title\": \"Simple text retrieval\",\n \"description\": \"If true, returns full page text with default settings. If false, disables text return.\"\n },\n {\n \"type\": \"object\",\n \"title\": \"Advanced text options\",\n \"description\": \"Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit for the full page text. Useful for controlling response size and API costs.\",\n \"example\": 1000\n },\n \"includeHtmlTags\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Include HTML tags in the response, which can help LLMs understand text structure and formatting.\",\n \"example\": false\n }\n }\n }\n ]\n },\n \"highlights\": {\n \"type\": \"object\",\n \"description\": \"Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.\",\n \"properties\": {\n \"numSentences\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of sentences to return for each snippet.\",\n \"example\": 1\n },\n \"highlightsPerUrl\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of snippets to return for each result.\",\n \"example\": 1\n },\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query to direct the LLM's selection of highlights.\",\n \"example\": \"Key advancements\"\n }\n }\n },\n \"summary\": {\n \"type\": \"object\",\n \"description\": \"Summary of the webpage\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query for the LLM-generated summary.\",\n \"example\": \"Main developments\"\n },\n \"schema\": {\n \"type\": \"object\",\n \"description\": \"JSON schema for structured output from summary. \\nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\\n\",\n \"example\": {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Title\",\n \"type\": \"object\",\n \"properties\": {\n \"Property 1\": {\n \"type\": \"string\",\n \"description\": \"Description\"\n },\n \"Property 2\": {\n \"type\": \"string\",\n \"enum\": [\n \"option 1\",\n \"option 2\",\n \"option 3\"\n ],\n \"description\": \"Description\"\n }\n },\n \"required\": [\n \"Property 1\"\n ]\n }\n }\n }\n },\n \"livecrawl\": {\n \"type\": \"string\",\n \"enum\": [\n \"never\",\n \"fallback\",\n \"always\",\n \"preferred\"\n ],\n \"description\": \"Options for livecrawling pages.\\n'never': Disable livecrawling (default for neural search).\\n'fallback': Livecrawl when cache is empty (default for keyword search).\\n'always': Always livecrawl.\\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\\n\",\n \"example\": \"always\"\n },\n \"livecrawlTimeout\": {\n \"type\": \"integer\",\n \"default\": 10000,\n \"description\": \"The timeout for livecrawling in milliseconds.\",\n \"example\": 1000\n },\n \"subpages\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"The number of subpages to crawl. The actual number crawled may be limited by system constraints.\",\n \"example\": 1\n },\n \"subpageTarget\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ],\n \"description\": \"Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.\",\n \"example\": \"sources\"\n },\n \"extras\": {\n \"type\": \"object\",\n \"description\": \"Extra parameters to pass.\",\n \"properties\": {\n \"links\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of URLs to return from each webpage.\",\n \"example\": 1\n },\n \"imageLinks\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of images to return for each result.\",\n \"example\": 1\n }\n }\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": true, + "validate_request_body_schema": true, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "answer", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "generate_answer_summary", + "description": { + "tagline": "Retrieve direct answers or detailed summaries with citations.", + "detailed": "Use this tool to perform a search based on a query. It generates either a direct answer or a detailed summary with citations, depending on the nature of the query." + }, + "return_annotation": "Provides a direct answer or detailed summary with citations.", + "arguments": [ + { + "name": "search_query", + "alternative_names": [ + "question_input", + "query_text" + ], + "description": "The question or query to be answered or summarized.", + "endpoint_argument_name": "query" + }, + { + "name": "enable_streaming_response", + "alternative_names": [ + "streaming_output_enabled", + "use_streaming_response" + ], + "description": "Return the response as a server-sent events (SSE) stream if set to true.", + "endpoint_argument_name": "stream" + }, + { + "name": "include_full_text", + "alternative_names": [ + "full_text_content", + "show_complete_text" + ], + "description": "If true, the response includes full text content in the search results.", + "endpoint_argument_name": "text" + } + ] + }, + "method": "POST", + "path": "/answer", + "tags": [], + "summary": "Generate an answer from search results", + "description": "Performs a search based on the query and generates either a direct answer or a detailed summary with citations, depending on the query type.\n", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "query", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The question or query to answer." + }, + "description": "The question or query to answer.", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "string", + "description": "The question or query to answer.", + "example": "What is the latest valuation of SpaceX?" + }, + "schema_required": true + }, + { + "name": "stream", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "If true, the response is returned as a server-sent events (SSS) stream." + }, + "description": "If true, the response is returned as a server-sent events (SSS) stream.", + "required": false, + "deprecated": false, + "default": false, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "boolean", + "description": "If true, the response is returned as a server-sent events (SSS) stream." + }, + "schema_required": false + }, + { + "name": "text", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "If true, the response includes full text content in the search results" + }, + "description": "If true, the response includes full text content in the search results", + "required": false, + "deprecated": false, + "default": false, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "boolean", + "description": "If true, the response includes full text content in the search results" + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": \"object\",\n \"required\": [\n \"query\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"The question or query to answer.\",\n \"example\": \"What is the latest valuation of SpaceX?\",\n \"minLength\": 1\n },\n \"stream\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"If true, the response is returned as a server-sent events (SSS) stream.\"\n },\n \"text\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"If true, the response includes full text content in the search results\"\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": true, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "ResearchController_listResearch", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_research_requests", + "description": { + "tagline": "Retrieve a paginated list of research requests.", + "detailed": "Use this tool to obtain a paginated list of all research requests. Ideal for reviewing or analyzing current research queries." + }, + "return_annotation": "A paginated list of research requests.", + "arguments": [ + { + "name": "pagination_cursor", + "alternative_names": [ + "page_cursor", + "result_cursor" + ], + "description": "A string representing the position in the paginated results to continue retrieving data from.", + "endpoint_argument_name": "cursor" + }, + { + "name": "results_limit", + "alternative_names": [ + "max_results", + "number_of_results" + ], + "description": "Specifies the number of research requests to return in the response. Helps manage pagination effectively.", + "endpoint_argument_name": "limit" + } + ] + }, + "method": "GET", + "path": "/research/v1", + "tags": [ + "Research" + ], + "summary": "List research requests", + "description": "Get a paginated list of research requests", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 10, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 50 + }, + "schema_required": false + } + ], + "path": [], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "ResearchController_createResearch", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_research_request", + "description": { + "tagline": "Create a new research request.", + "detailed": "Use this tool to initiate a new research request when you need to gather specific information or data." + }, + "return_annotation": "Confirmation of research request creation.", + "arguments": [ + { + "name": "research_request_details", + "alternative_names": [ + "research_query_details", + "research_request_payload" + ], + "description": "JSON object containing details of the research request including parameters and criteria.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/research/v1", + "tags": [ + "Research" + ], + "summary": "Create a new research request", + "description": "", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"model\": {\n \"default\": \"exa-research\",\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"exa-research\",\n \"exa-research-pro\"\n ]\n },\n \"instructions\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 4096,\n \"description\": \"Instructions for what research should be conducted\"\n },\n \"outputSchema\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {}\n }\n },\n \"required\": [\n \"instructions\"\n ],\n \"examples\": [\n {\n \"model\": \"exa-research\",\n \"instructions\": \"What species of ant are similar to honeypot ants?\"\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "ResearchController_getResearch", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_research_by_id", + "description": { + "tagline": "Retrieve research information using a specific ID.", + "detailed": "Use this tool to obtain detailed research information by providing a specific research ID. Supports real-time updates with streaming." + }, + "return_annotation": "Research details for a given ID.", + "arguments": [ + { + "name": "enable_streaming", + "alternative_names": [ + "use_streaming", + "activate_streaming" + ], + "description": "Set to 'true' to receive real-time streaming updates of the research information.", + "endpoint_argument_name": "stream" + }, + { + "name": "event_filter", + "alternative_names": [ + "event_types", + "event_specification" + ], + "description": "Specify the events to filter for in the research retrieval. Accepts a comma-separated list of event types.", + "endpoint_argument_name": "events" + }, + { + "name": "research_id", + "alternative_names": [ + "research_identifier", + "id_of_research" + ], + "description": "A string representing the unique identifier of the research to be retrieved.", + "endpoint_argument_name": "researchId" + } + ] + }, + "method": "GET", + "path": "/research/v1/{researchId}", + "tags": [ + "Research" + ], + "summary": "Get a research request by id", + "description": "Retrieve research by ID. Add ?stream=true for real-time SSE updates.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "apikey" + ], + "parameters": { + "query": [ + { + "name": "stream", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "events", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "path": [ + { + "name": "researchId", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai", + "original_servers": [ + { + "url": "https://api.exa.ai" + } + ] + }, + { + "name": "websets-create", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_webset", + "description": { + "tagline": "Create a new Webset with optional configurations.", + "detailed": "This tool creates a new Webset with optional search, import, and enrichment configurations. The Webset processing starts automatically once it's created. You can specify an `externalId` for easier integration with your own identifiers." + }, + "return_annotation": "Details of the newly created Webset.", + "arguments": [ + { + "name": "webset_configuration", + "alternative_names": [ + "webset_options", + "webset_setup" + ], + "description": "A JSON object detailing optional search, import, and enrichment configurations for the Webset. Include any necessary identifiers like `externalId`.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/websets", + "tags": [ + "Websets" + ], + "summary": "Create a Webset", + "description": "Creates a new Webset with optional search, import, and enrichment configurations. The Webset will automatically begin processing once created.\n\nYou can specify an `externalId` to reference the Webset with your own identifiers for easier integration.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"search\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Natural language search query describing what you are looking for.\\n\\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\\n\\nAny URLs provided will be crawled and used as additional context for the search.\",\n \"examples\": [\n \"Marketing agencies based in the US, that focus on consumer products.\",\n \"AI startups in Europe that raised Series A funding in 2024\",\n \"SaaS companies with 50-200 employees in the fintech space\"\n ]\n },\n \"count\": {\n \"default\": 10,\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"description\": \"Number of Items the Webset will attempt to find.\\n\\nThe actual number of Items found may be less than this number depending on the search complexity.\"\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"The description of the criterion\"\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 5,\n \"description\": \"Criteria every item is evaluated against.\\n\\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control.\"\n },\n \"recall\": {\n \"type\": [\n \"boolean\"\n ],\n \"description\": \"Whether to provide an estimate of how many total relevant results could exist for this search.\\nResult of the analysis will be available in the `recall` field within the search request.\"\n },\n \"exclude\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to exclude.\"\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search.\"\n },\n \"scope\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to search.\"\n },\n \"relationship\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"definition\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"What the relationship of the entities you hope to find is relative to the entities contained in the provided source.\"\n },\n \"limit\": {\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"maximum\": 10\n }\n },\n \"required\": [\n \"definition\",\n \"limit\"\n ]\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Limit the search to specific sources (existing imports or websets). Any results found within these sources matching the search criteria will be included in the Webset.\"\n }\n },\n \"required\": [\n \"query\"\n ],\n \"description\": \"Create initial search for the Webset.\"\n },\n \"import\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to search.\"\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Import data from existing Websets and Imports into this Webset.\"\n },\n \"enrichments\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Provide a description of the enrichment task you want to perform to each Webset Item.\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"text\",\n \"date\",\n \"number\",\n \"options\",\n \"email\",\n \"phone\",\n \"url\"\n ],\n \"description\": \"Format of the enrichment response.\\n\\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here.\"\n },\n \"options\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The label of the option\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 150,\n \"description\": \"When the format is options, the different options for the enrichment agent to choose from.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"description\": \"Add enrichments to extract additional data from found items.\\n\\nEnrichments automatically search for and extract specific information (like contact details, funding data, employee counts, etc.) from each item added to your Webset.\"\n },\n \"exclude\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to exclude.\"\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Global exclusion sources (existing imports or websets) that apply to all operations within this Webset. Any results found within these sources will be omitted across all search and import operations.\"\n },\n \"externalId\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 300,\n \"description\": \"The external identifier for the webset.\\n\\nYou can use this to reference the Webset by your own internal identifiers.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"examples\": [\n {\n \"search\": {\n \"query\": \"Marketing agencies based in the US, that focus on consumer products.\",\n \"count\": 10\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_websets", + "description": { + "tagline": "Retrieve a list of available websets.", + "detailed": "Use this tool to obtain a list of websets. You can paginate through results using a cursor." + }, + "return_annotation": "A list of websets available.", + "arguments": [ + { + "name": "pagination_cursor", + "alternative_names": [ + "result_cursor", + "page_cursor" + ], + "description": "A string used to paginate through the list of Websets.", + "endpoint_argument_name": "cursor" + }, + { + "name": "websets_return_limit", + "alternative_names": [ + "max_websets", + "websets_count" + ], + "description": "Specify the maximum number of Websets to return in the response.", + "endpoint_argument_name": "limit" + } + ] + }, + "method": "GET", + "path": "/v0/websets", + "tags": [ + "Websets" + ], + "summary": "List all Websets", + "description": "Returns a list of Websets.\n\nYou can paginate through the results using the `cursor` parameter.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of Websets to return" + }, + "description": "The number of Websets to return", + "required": false, + "deprecated": false, + "default": 25, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 100 + }, + "schema_required": false + } + ], + "path": [], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_webset_details", + "description": { + "tagline": "Retrieve detailed information about a specific webset.", + "detailed": "This tool is used to obtain the details of a specific webset using its unique identifier. Call this when you need information related to a particular webset." + }, + "return_annotation": "Details of the specified webset.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The unique identifier or external ID for the Webset to retrieve.", + "endpoint_argument_name": "id" + }, + { + "name": "resources_to_expand", + "alternative_names": [ + "expand_resources", + "include_related_resources" + ], + "description": "A list of resources to include in the response for additional details.", + "endpoint_argument_name": "expand" + } + ] + }, + "method": "GET", + "path": "/v0/websets/{id}", + "tags": [ + "Websets" + ], + "summary": "Get a Webset", + "description": "", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "expand", + "value_schema": { + "val_type": "array", + "inner_val_type": "string", + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Expand the response with the specified resources" + }, + "description": "Expand the response with the specified resources", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "items" + ] + } + }, + "schema_required": false + } + ], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset." + }, + "description": "The id or externalId of the Webset.", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-update", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "update_webset", + "description": { + "tagline": "Update details of an existing webset.", + "detailed": "Use this tool to update the information of a specific webset identified by its ID. Ideal for modifying webset attributes when changes are needed." + }, + "return_annotation": "Updates a webset with the given details.", + "arguments": [ + { + "name": "webset_id", + "alternative_names": [ + "webset_identifier", + "external_webset_id" + ], + "description": "The unique id or externalId of the Webset to be updated. Ensure it matches a valid Webset.", + "endpoint_argument_name": "id" + }, + { + "name": "webset_details", + "alternative_names": [ + "webset_data", + "webset_information" + ], + "description": "A JSON object containing the details to update for the webset. This includes any attributes that need to be changed.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/websets/{id}", + "tags": [ + "Websets" + ], + "summary": "Update a Webset", + "description": "", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n },\n \"nullable\": true\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-delete", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "delete_webset", + "description": { + "tagline": "Deletes a Webset and its associated items.", + "detailed": "Use this tool to permanently delete a Webset and all its associated items. Once deleted, it cannot be recovered." + }, + "return_annotation": "Confirmation of the Webset deletion.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The unique identifier or external ID of the Webset to delete.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "DELETE", + "path": "/v0/websets/{id}", + "tags": [ + "Websets" + ], + "summary": "Delete a Webset", + "description": "Deletes a Webset.\n\nOnce deleted, the Webset and all its Items will no longer be available.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-cancel", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "cancel_webset_operations", + "description": { + "tagline": "Cancel all operations on a specified Webset.", + "detailed": "Use this tool to stop any ongoing enrichment or search processes on a Webset, marking it as 'idle'." + }, + "return_annotation": "Confirms the cancellation of operations on a Webset.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The ID or external ID of the Webset to cancel operations on.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "POST", + "path": "/v0/websets/{id}/cancel", + "tags": [ + "Websets" + ], + "summary": "Cancel a running Webset", + "description": "Cancels all operations being performed on a Webset.\n\nAny enrichment or search will be stopped and the Webset will be marked as `idle`.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-preview", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "preview_search_decomposition", + "description": { + "tagline": "Preview and analyze search query decomposition.", + "detailed": "This tool previews how a search query will be decomposed before creating a webset, showing the detected entity type, generated search criteria, and available enrichment columns. Use it to understand the search interpretation before full webset creation." + }, + "return_annotation": "Detected entity type, search criteria, and enrichment columns preview.", + "arguments": [ + { + "name": "search_query_details", + "alternative_names": [ + "query_decomposition_input", + "analyze_query_request" + ], + "description": "A JSON object detailing the search query to preview. It includes elements like the search string and any additional parameters for analysis.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/websets/preview", + "tags": [ + "Websets Preview" + ], + "summary": "Preview a webset", + "description": "Preview how a search query will be decomposed before creating a webset. This endpoint performs the same query analysis that happens during webset creation, allowing you to see the detected entity type, generated search criteria, and available enrichment columns in advance.\n\nUse this to help users understand how their search will be interpreted before committing to a full webset creation.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Natural language search query describing what you are looking for.\\n\\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\",\n \"examples\": [\n \"Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city\",\n \"AI startups in Europe that raised Series A funding in 2024\",\n \"SaaS companies with 50-200 employees in the fintech space\"\n ]\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n }\n },\n \"required\": [\n \"query\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-items-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_webset_item", + "description": { + "tagline": "Retrieve a specific Webset Item by ID.", + "detailed": "This tool is used to retrieve information about a specific Webset Item using its ID. It should be called when you need detailed information about a particular item associated with a Webset." + }, + "return_annotation": "Details about the requested Webset Item.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The ID or external ID of the Webset to identify the desired Webset from which the item is to be retrieved.", + "endpoint_argument_name": "webset" + }, + { + "name": "webset_item_id", + "alternative_names": [ + "item_id", + "webset_item_identifier" + ], + "description": "The unique identifier of the Webset item to retrieve.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/websets/{webset}/items/{id}", + "tags": [ + "Items" + ], + "summary": "Get an Item", + "description": "Returns a Webset Item.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset item" + }, + "description": "The id of the Webset item", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-items-delete", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "delete_webset_item", + "description": { + "tagline": "Delete an item from a webset and cancel its enrichment process.", + "detailed": "Use this tool to remove an item from the specified webset. This will also cancel any ongoing enrichment process associated with the item." + }, + "return_annotation": "Confirms deletion of the item from the webset.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The ID or external ID of the Webset from which the item will be deleted.", + "endpoint_argument_name": "webset" + }, + { + "name": "webset_item_id", + "alternative_names": [ + "webset_item_identifier", + "webset_item_key" + ], + "description": "The unique identifier of the item to be deleted from the webset.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "DELETE", + "path": "/v0/websets/{webset}/items/{id}", + "tags": [ + "Items" + ], + "summary": "Delete an Item", + "description": "Deletes an Item from the Webset.\n\nThis will cancel any enrichment process for it.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset item" + }, + "description": "The id of the Webset item", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-items-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_webset_items", + "description": { + "tagline": "Retrieve a list of items from a specific webset.", + "detailed": "This tool fetches items from a designated webset, allowing pagination with the 'cursor' parameter if needed." + }, + "return_annotation": "A list of items in the specified webset.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_key" + ], + "description": "The ID or external ID of the Webset to retrieve items from.", + "endpoint_argument_name": "webset" + }, + { + "name": "pagination_cursor", + "alternative_names": [ + "results_cursor", + "page_cursor" + ], + "description": "A string used to paginate through the results. Pass this to retrieve the next set of items in the webset.", + "endpoint_argument_name": "cursor" + }, + { + "name": "result_limit", + "alternative_names": [ + "max_results", + "number_of_results" + ], + "description": "Specify the number of results to return. This controls the size of the page in a paginated response.", + "endpoint_argument_name": "limit" + }, + { + "name": "source_id", + "alternative_names": [ + "source_identifier", + "source_reference" + ], + "description": "The unique identifier for the source from which to retrieve items.", + "endpoint_argument_name": "sourceId" + } + ] + }, + "method": "GET", + "path": "/v0/websets/{webset}/items", + "tags": [ + "Items" + ], + "summary": "List all Items for a Webset", + "description": "Returns a list of Webset Items.\n\nYou can paginate through the Items using the `cursor` parameter.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 20, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 100 + }, + "schema_required": false + }, + { + "name": "sourceId", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the source" + }, + "description": "The id of the source", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-enrichments-create", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_webset_enrichment", + "description": { + "tagline": "Create an enrichment for a specified webset.", + "detailed": "This tool is used to create an enrichment for a given webset. It should be called when there is a need to enhance a webset with additional data or features." + }, + "return_annotation": "Details of the created enrichment for the webset.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The ID or external ID of the webset to enrich.", + "endpoint_argument_name": "webset" + }, + { + "name": "enrichment_details", + "alternative_names": [ + "enrichment_data", + "enrichment_content" + ], + "description": "A JSON object containing the details required to create the enrichment for the webset.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/websets/{webset}/enrichments", + "tags": [ + "Enrichments" + ], + "summary": "Create an Enrichment", + "description": "Create an Enrichment for a Webset.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Provide a description of the enrichment task you want to perform to each Webset Item.\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"text\",\n \"date\",\n \"number\",\n \"options\",\n \"email\",\n \"phone\",\n \"url\"\n ],\n \"description\": \"Format of the enrichment response.\\n\\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here.\"\n },\n \"options\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The label of the option\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 150,\n \"description\": \"When the format is options, the different options for the enrichment agent to choose from.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"description\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-enrichments-update", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "update_webset_enrichment", + "description": { + "tagline": "Update an enrichment configuration for a webset.", + "detailed": "This tool updates the enrichment configuration for a specified webset. It should be called when an existing enrichment configuration needs modification." + }, + "return_annotation": "Confirmation of enrichment configuration update.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_name" + ], + "description": "The identifier of the webset to be updated. Provide the specific name or ID of the webset.", + "endpoint_argument_name": "webset" + }, + { + "name": "enrichment_configuration_id", + "alternative_names": [ + "config_id", + "enrichment_id" + ], + "description": "The unique identifier of the enrichment configuration to be updated.", + "endpoint_argument_name": "id" + }, + { + "name": "enrichment_configuration_details", + "alternative_names": [ + "enrichment_config_data", + "enrichment_settings" + ], + "description": "A JSON object containing the details of the enrichment configuration to update.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "PATCH", + "path": "/v0/websets/{webset}/enrichments/{id}", + "tags": [ + "Enrichments" + ], + "summary": "Update an Enrichment", + "description": "Update an Enrichment configuration for a Webset.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Provide a description of the enrichment task you want to perform to each Webset Item.\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"text\",\n \"date\",\n \"number\",\n \"options\",\n \"email\",\n \"phone\",\n \"url\"\n ],\n \"description\": \"Format of the enrichment response.\\n\\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here.\"\n },\n \"options\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The label of the option\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 150,\n \"description\": \"When the format is options, the different options for the enrichment agent to choose from.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n },\n \"nullable\": true\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-enrichments-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_enrichment_details", + "description": { + "tagline": "Retrieve detailed information about a specific enrichment.", + "detailed": "Use this tool to get detailed information about a specific enrichment in a webset by providing the webset and enrichment IDs." + }, + "return_annotation": "Details of a specific enrichment.", + "arguments": [ + { + "name": "webset_identifier", + "alternative_names": [ + "webset_id", + "webset_external_id" + ], + "description": "The ID or external ID of the webset to retrieve enrichment details for.", + "endpoint_argument_name": "webset" + }, + { + "name": "enrichment_id", + "alternative_names": [ + "enrichment_identifier", + "id_of_enrichment" + ], + "description": "The unique identifier for the specific enrichment you want to retrieve within the webset.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/websets/{webset}/enrichments/{id}", + "tags": [ + "Enrichments" + ], + "summary": "Get an Enrichment", + "description": "", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "description": "The id of the Enrichment", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-enrichments-delete", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "delete_enrichment", + "description": { + "tagline": "Delete an enrichment and cancel running processes.", + "detailed": "Use this tool to delete an enrichment, cancel any running processes, and remove all generated enrichment results." + }, + "return_annotation": "Confirmation of enrichment deletion and cancellation status.", + "arguments": [ + { + "name": "webset_id", + "alternative_names": [ + "webset_identifier", + "webset_external_id" + ], + "description": "The ID or external ID of the Webset to identify which enrichment to delete.", + "endpoint_argument_name": "webset" + }, + { + "name": "enrichment_id", + "alternative_names": [ + "enrichment_identifier", + "enrichment_key" + ], + "description": "The unique identifier of the enrichment to be deleted.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "DELETE", + "path": "/v0/websets/{webset}/enrichments/{id}", + "tags": [ + "Enrichments" + ], + "summary": "Delete an Enrichment", + "description": "When deleting an Enrichment, any running enrichments will be canceled and all existing `enrichment_result` generated by this Enrichment will no longer be available.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "description": "The id of the Enrichment", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-enrichments-cancel", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "cancel_enrichment_process", + "description": { + "tagline": "Cancel a running enrichment process.", + "detailed": "Use this tool to cancel any currently running enrichment process. Once canceled, the process cannot be resumed." + }, + "return_annotation": "Confirmation of enrichment cancellation.", + "arguments": [ + { + "name": "webset_id", + "alternative_names": [ + "webset_identifier", + "webset_key" + ], + "description": "The ID or external ID of the Webset to identify which enrichment process to cancel.", + "endpoint_argument_name": "webset" + }, + { + "name": "enrichment_id", + "alternative_names": [ + "enrichment_process_id", + "task_id" + ], + "description": "The unique identifier of the enrichment process to be canceled.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "POST", + "path": "/v0/websets/{webset}/enrichments/{id}/cancel", + "tags": [ + "Enrichments" + ], + "summary": "Cancel a running Enrichment", + "description": "All running enrichments will be canceled. You can not resume an Enrichment after it has been canceled.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "description": "The id or externalId of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "description": "The id of the Enrichment", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "webhooks-create", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_webhook_for_notifications", + "description": { + "tagline": "Create webhooks to receive event notifications.", + "detailed": "This tool allows you to set up webhooks for receiving notifications about specific events in your Websets. Upon creation, you'll specify the events to monitor and the destination URL for the notifications. The webhook activates immediately, and you'll receive a secret key for signature verification, visible only once at this point." + }, + "return_annotation": "Details of the created webhook and a secret key for verification.", + "arguments": [ + { + "name": "webhook_configuration", + "alternative_names": [ + "webhook_settings", + "notification_events_configuration" + ], + "description": "A JSON object detailing the events to monitor and the destination URL for notifications.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/webhooks", + "tags": [ + "Webhooks" + ], + "summary": "Create a Webhook", + "description": "Webhooks let you get notifications when things happen in your Websets. When you create a webhook, you choose which events you want to know about and where to send the notifications.\n\nWhen an event happens, Exa sends an HTTP POST request to your webhook URL with:\n- Event details (type, time, ID)\n- Full data of what triggered the event\n- A signature to verify the request came from Exa\n\nThe webhook starts as `active` and begins getting notifications right away. You'll get a secret key for checking webhook signatures - save this safely as it's only shown once when you create the webhook.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"events\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"webset.created\",\n \"webset.deleted\",\n \"webset.paused\",\n \"webset.idle\",\n \"webset.search.created\",\n \"webset.search.canceled\",\n \"webset.search.completed\",\n \"webset.search.updated\",\n \"import.created\",\n \"import.completed\",\n \"webset.item.created\",\n \"webset.item.enriched\",\n \"monitor.created\",\n \"monitor.updated\",\n \"monitor.deleted\",\n \"monitor.run.created\",\n \"monitor.run.completed\",\n \"webset.export.created\",\n \"webset.export.completed\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 19,\n \"description\": \"The events to trigger the webhook\"\n },\n \"url\": {\n \"type\": [\n \"string\"\n ],\n \"format\": \"uri\",\n \"description\": \"The URL to send the webhook to\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"events\",\n \"url\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "webhooks-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_webhooks_list", + "description": { + "tagline": "Retrieve a paginated list of all webhooks in your account.", + "detailed": "Use this tool to get all the webhooks associated with your account, with options to paginate through results using limit and cursor parameters." + }, + "return_annotation": "Returns a list of webhooks with pagination details.", + "arguments": [ + { + "name": "pagination_cursor", + "alternative_names": [ + "results_cursor", + "page_cursor" + ], + "description": "The cursor used to navigate through pages of results for webhooks.", + "endpoint_argument_name": "cursor" + }, + { + "name": "results_per_page", + "alternative_names": [ + "webhooks_per_page", + "items_per_page" + ], + "description": "The number of webhooks to return per page, up to a maximum of 200.", + "endpoint_argument_name": "limit" + } + ] + }, + "method": "GET", + "path": "/v0/webhooks", + "tags": [ + "Webhooks" + ], + "summary": "List webhooks", + "description": "Get a list of all webhooks in your account.\nThe results come in pages. Use `limit` to set how many webhooks to get per page (up to 200). Use `cursor` to get the next page of results.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 25, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 200 + }, + "schema_required": false + } + ], + "path": [], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "webhooks-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_webhook_info", + "description": { + "tagline": "Retrieve details of a webhook using its ID.", + "detailed": "This tool is used to get details about a specific webhook by providing its ID. It should be called when you need to access information about a particular webhook. The secret associated with the webhook is not included for security reasons." + }, + "return_annotation": "Information about a specific webhook by ID.", + "arguments": [ + { + "name": "webhook_id", + "alternative_names": [ + "webhook_identifier", + "webhook_key" + ], + "description": "The unique identifier for the webhook you want details about.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/webhooks/{id}", + "tags": [ + "Webhooks" + ], + "summary": "Get a Webhook", + "description": "Get information about a webhook using its ID.\nThe webhook secret is not shown here for security - you only get it when you first create the webhook.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "description": "The id of the webhook", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "webhooks-update", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "update_webhook_settings", + "description": { + "tagline": "Update a webhook's settings for events, URL, and metadata.", + "detailed": "Use this tool to modify a webhook's configuration, including the events it tracks, the URL for notifications, and any custom metadata. Changes are applied immediately, and the webhook's status remains the same." + }, + "return_annotation": "Confirmation of webhook settings update.", + "arguments": [ + { + "name": "webhook_id", + "alternative_names": [ + "webhook_identifier", + "webhook_reference_id" + ], + "description": "The unique identifier of the webhook to be updated.", + "endpoint_argument_name": "id" + }, + { + "name": "webhook_update_request_body", + "alternative_names": [ + "webhook_configuration_payload", + "webhook_modification_data" + ], + "description": "JSON object containing webhook updates, such as events list, new URL, and metadata.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "PATCH", + "path": "/v0/webhooks/{id}", + "tags": [ + "Webhooks" + ], + "summary": "Update a Webhook", + "description": "Change a webhook's settings. You can update:\n- Events: Add or remove which events you want to hear about - URL: Change where notifications are sent - Metadata: Update custom data linked to the webhook\n\nChanges happen right away. If you change the events list, the webhook will start or stop getting notifications for those events immediately.\n\nThe webhook keeps its current status (`active` or `inactive`) when you update it.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "description": "The id of the webhook", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"events\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"webset.created\",\n \"webset.deleted\",\n \"webset.paused\",\n \"webset.idle\",\n \"webset.search.created\",\n \"webset.search.canceled\",\n \"webset.search.completed\",\n \"webset.search.updated\",\n \"import.created\",\n \"import.completed\",\n \"webset.item.created\",\n \"webset.item.enriched\",\n \"monitor.created\",\n \"monitor.updated\",\n \"monitor.deleted\",\n \"monitor.run.created\",\n \"monitor.run.completed\",\n \"webset.export.created\",\n \"webset.export.completed\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 19,\n \"description\": \"The events to trigger the webhook\"\n },\n \"url\": {\n \"type\": [\n \"string\"\n ],\n \"format\": \"uri\",\n \"description\": \"The URL to send the webhook to\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "webhooks-delete", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "remove_webhook", + "description": { + "tagline": "Remove a webhook from your account.", + "detailed": "Use this tool to delete a webhook. Once deleted, it stops receiving notifications immediately and cannot be restored. You'll need to create a new webhook if you wish to reinstate it. Use when you need to stop a webhook permanently." + }, + "return_annotation": "Confirms the webhook was successfully deleted.", + "arguments": [ + { + "name": "webhook_id", + "alternative_names": [ + "id_of_webhook", + "webhook_identifier" + ], + "description": "The unique identifier of the webhook to remove. This is necessary for specifying which webhook to delete.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "DELETE", + "path": "/v0/webhooks/{id}", + "tags": [ + "Webhooks" + ], + "summary": "Delete a Webhook", + "description": "Remove a webhook from your account. Once deleted, the webhook stops getting notifications right away and cannot be brought back.\n\nImportant notes: - The webhook stops working as soon as you delete it - You cannot undo this - you'll need to create a new webhook if you want it back - Any notifications currently being sent may still complete", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "description": "The id of the webhook", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "webhooks-attempts-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_webhook_attempts", + "description": { + "tagline": "Retrieve and list all webhook attempt records.", + "detailed": "This tool retrieves all attempts made by a specific webhook, ordered in descending order. It is useful for monitoring webhook activity and diagnosing issues." + }, + "return_annotation": "A list of webhook attempt records in descending order.", + "arguments": [ + { + "name": "webhook_id", + "alternative_names": [ + "webhook_identifier", + "webhook_unique_id" + ], + "description": "The unique identifier for the webhook to retrieve attempt records for.", + "endpoint_argument_name": "id" + }, + { + "name": "pagination_cursor", + "alternative_names": [ + "result_cursor", + "next_page_cursor" + ], + "description": "A string used to paginate through the webhook attempt results.", + "endpoint_argument_name": "cursor" + }, + { + "name": "results_limit", + "alternative_names": [ + "max_results", + "number_of_results" + ], + "description": "Specify the maximum number of webhook attempt records to return.", + "endpoint_argument_name": "limit" + }, + { + "name": "event_type_filter", + "alternative_names": [ + "event_filter", + "filter_by_event_type" + ], + "description": "Filter webhook attempts by specifying the type of event, such as 'webset.created' or 'monitor.run.completed'.", + "endpoint_argument_name": "eventType" + }, + { + "name": "filter_by_successful_attempts", + "alternative_names": [ + "filter_successful_attempts", + "attempt_success_filter" + ], + "description": "Use 'true' to filter for successful webhook attempts and 'false' for unsuccessful ones.", + "endpoint_argument_name": "successful" + } + ] + }, + "method": "GET", + "path": "/v0/webhooks/{id}/attempts", + "tags": [ + "Webhooks Attempts" + ], + "summary": "List webhook attempts", + "description": "List all attempts made by a Webhook ordered in descending order.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 25, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 200 + }, + "schema_required": false + }, + { + "name": "eventType", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ], + "properties": null, + "inner_properties": null, + "description": "The type of event to filter by" + }, + "description": "The type of event to filter by", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "schema_required": false + }, + { + "name": "successful", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter attempts by their success status" + }, + "description": "Filter attempts by their success status", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "boolean" + }, + "schema_required": false + } + ], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The ID of the webhook" + }, + "description": "The ID of the webhook", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "events-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_system_events", + "description": { + "tagline": "Retrieve a list of all system events.", + "detailed": "Call this tool to get a detailed list of events that have occurred within the system. Useful for auditing, monitoring, or reviewing activities. Supports pagination through a cursor parameter." + }, + "return_annotation": "A list of events that have occurred in the system.", + "arguments": [ + { + "name": "pagination_cursor", + "alternative_names": [ + "page_cursor", + "cursor_token" + ], + "description": "Cursor for paginating through event results. Use it to navigate through pages of events.", + "endpoint_argument_name": "cursor" + }, + { + "name": "results_limit", + "alternative_names": [ + "event_return_limit", + "max_results" + ], + "description": "Specify the number of event results to return. This controls the size of the result set for a single request.", + "endpoint_argument_name": "limit" + }, + { + "name": "event_types_filter", + "alternative_names": [ + "event_categories", + "filter_event_types" + ], + "description": "Filter events by specifying an array of event type names.", + "endpoint_argument_name": "types" + }, + { + "name": "filter_created_before", + "alternative_names": [ + "events_created_before", + "created_before_filter" + ], + "description": "Filter events created before or at this timestamp (inclusive). Provide a valid ISO 8601 datetime string in UTC.", + "endpoint_argument_name": "createdBefore" + }, + { + "name": "created_after", + "alternative_names": [ + "start_timestamp", + "from_datetime" + ], + "description": "Filter events created after or at this timestamp. Use a valid ISO 8601 datetime string in UTC.", + "endpoint_argument_name": "createdAfter" + } + ] + }, + "method": "GET", + "path": "/v0/events", + "tags": [ + "Events" + ], + "summary": "List all Events", + "description": "List all events that have occurred in the system.\n\nYou can paginate through the results using the `cursor` parameter.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 25, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 200 + }, + "schema_required": false + }, + { + "name": "types", + "value_schema": { + "val_type": "array", + "inner_val_type": "string", + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The types of events to filter by" + }, + "description": "The types of events to filter by", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + } + }, + "schema_required": false + }, + { + "name": "createdBefore", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter events created before or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC." + }, + "description": "Filter events created before or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC.", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string", + "format": "date-time" + }, + "schema_required": false + }, + { + "name": "createdAfter", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter events created after or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC." + }, + "description": "Filter events created after or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC.", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string", + "format": "date-time" + }, + "schema_required": false + } + ], + "path": [], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "events-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_event_by_id", + "description": { + "tagline": "Retrieve details of an event using its ID.", + "detailed": "Use this tool to obtain information about a specific event by providing its unique identifier." + }, + "return_annotation": "Details of the specified event.", + "arguments": [ + { + "name": "event_id", + "alternative_names": [ + "event_identifier", + "event_key" + ], + "description": "The unique identifier of the event to retrieve details for.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/events/{id}", + "tags": [ + "Events" + ], + "summary": "Get an Event", + "description": "Get a single Event by id.\n\nYou can subscribe to Events by creating a Webhook.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the event" + }, + "description": "The id of the event", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-searches-create", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_webset_search", + "description": { + "tagline": "Create a new search for a specified webset.", + "detailed": "Use this tool to create a new search within a webset, reusing previous search results and applying new criteria." + }, + "return_annotation": "Confirmation of new search creation for the webset.", + "arguments": [ + { + "name": "webset_id", + "alternative_names": [ + "webset_identifier", + "webset_key" + ], + "description": "The unique identifier for the Webset you want to create a search in.", + "endpoint_argument_name": "webset" + }, + { + "name": "search_criteria", + "alternative_names": [ + "search_parameters", + "search_conditions" + ], + "description": "JSON object representing new search criteria for the webset. This specifies the parameters or conditions for the new search.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/websets/{webset}/searches", + "tags": [ + "Searches" + ], + "summary": "Create a Search", + "description": "Creates a new Search for the Webset.\n\nThe default behavior is to reuse the previous Search results and evaluate them against the new criteria.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "description": "The id of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"description\": \"Number of Items the Search will attempt to find.\\n\\nThe actual number of Items found may be less than this number depending on the query complexity.\"\n },\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Natural language search query describing what you are looking for.\\n\\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\\n\\nAny URLs provided will be crawled and used as additional context for the search.\",\n \"examples\": [\n \"Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city\",\n \"AI startups in Europe that raised Series A funding in 2024\",\n \"SaaS companies with 50-200 employees in the fintech space\"\n ]\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"The description of the criterion\"\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 5,\n \"description\": \"Criteria every item is evaluated against.\\n\\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control.\"\n },\n \"exclude\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"description\": \"The ID of the source to exclude.\",\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search.\"\n },\n \"scope\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to search.\"\n },\n \"relationship\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"definition\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"What the relationship of the entities you hope to find is relative to the entities contained in the provided source.\"\n },\n \"limit\": {\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"maximum\": 10\n }\n },\n \"required\": [\n \"definition\",\n \"limit\"\n ]\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Limit the search to specific sources (existing imports). Any results found within these sources matching the search criteria will be included in the Webset.\"\n },\n \"recall\": {\n \"type\": [\n \"boolean\"\n ],\n \"description\": \"Whether to provide an estimate of how many total relevant results could exist for this search.\\nResult of the analysis will be available in the `recall` field within the search request.\"\n },\n \"behavior\": {\n \"type\": \"string\",\n \"enum\": [\n \"override\",\n \"append\"\n ]\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"count\",\n \"query\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-searches-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_search_by_id", + "description": { + "tagline": "Retrieve a search by its ID.", + "detailed": "Use this tool to get detailed information about a specific search by providing its ID." + }, + "return_annotation": "Details of the search by ID.", + "arguments": [ + { + "name": "webset_id", + "alternative_names": [ + "webset_identifier", + "webset_key" + ], + "description": "The ID of the Webset to retrieve the specific search.", + "endpoint_argument_name": "webset" + }, + { + "name": "search_id", + "alternative_names": [ + "id_of_search", + "search_identifier" + ], + "description": "The ID of the search to retrieve details for.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/websets/{webset}/searches/{id}", + "tags": [ + "Searches" + ], + "summary": "Get a Search", + "description": "Gets a Search by id", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "description": "The id of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Search" + }, + "description": "The id of the Search", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "websets-searches-cancel", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "cancel_running_search", + "description": { + "tagline": "Cancels a currently running search operation.", + "detailed": "This tool cancels an ongoing search by using the specified webset and search ID. Useful when you need to stop a search that is still in progress." + }, + "return_annotation": "Confirmation of search cancellation.", + "arguments": [ + { + "name": "webset_id", + "alternative_names": [ + "webset_identifier", + "webset_reference" + ], + "description": "The ID of the Webset where the search is executing. Use this to specify the Webset to be canceled.", + "endpoint_argument_name": "webset" + }, + { + "name": "search_id", + "alternative_names": [ + "search_identifier", + "search_key" + ], + "description": "The ID of the search to cancel. Provide the unique string identifier for the targeted search operation.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "POST", + "path": "/v0/websets/{webset}/searches/{id}/cancel", + "tags": [ + "Searches" + ], + "summary": "Cancel a running Search", + "description": "Cancels a currently running Search.\n\nYou can cancel all searches at once by using the `websets/:webset/cancel` endpoint.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "description": "The id of the Webset", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Search" + }, + "description": "The id of the Search", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-create", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_monitor_for_websets", + "description": { + "tagline": "Create a scheduled monitor to update Websets with fresh data.", + "detailed": "Use this tool to set up a new monitor that automatically updates Websets. It enables execution of 'search' and 'refresh' operations based on your defined schedule, using cron expressions and timezone settings, to keep your Websets current without manual intervention." + }, + "return_annotation": "Details of the created monitor for Websets.", + "arguments": [ + { + "name": "monitor_configuration", + "alternative_names": [ + "monitor_settings", + "webset_monitor_parameters" + ], + "description": "JSON object describing the configuration for the new monitor, including schedule, search and refresh operations.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/monitors", + "tags": [ + "Monitors" + ], + "summary": "Create a Monitor", + "description": "Creates a new `Monitor` to continuously keep your Websets updated with fresh data.\n\nMonitors automatically run on your defined schedule to ensure your Websets stay current without manual intervention:\n\n- **Find new content**: Execute `search` operations to discover fresh items matching your criteria\n- **Update existing content**: Run `refresh` operations to update items contents and enrichments\n- **Automated scheduling**: Configure `cron` expressions and `timezone` for precise scheduling control", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"websetId\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The id of the Webset\"\n },\n \"cadence\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"cron\": {\n \"description\": \"Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.\",\n \"type\": [\n \"string\"\n ]\n },\n \"timezone\": {\n \"description\": \"IANA timezone (e.g., \\\"America/New_York\\\")\",\n \"default\": \"Etc/UTC\",\n \"type\": [\n \"string\"\n ]\n }\n },\n \"required\": [\n \"cron\"\n ],\n \"description\": \"How often the monitor will run\"\n },\n \"behavior\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"search\",\n \"default\": \"search\"\n },\n \"config\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 10000,\n \"description\": \"The query to search for. By default, the query from the last search is used.\"\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 1000\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"maxItems\": 5,\n \"description\": \"The criteria to search for. By default, the criteria from the last search is used.\"\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"exclusiveMinimum\": 0,\n \"description\": \"The maximum number of results to find\"\n },\n \"behavior\": {\n \"default\": \"append\",\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"override\",\n \"append\"\n ],\n \"description\": \"The behaviour of the Search when it is added to a Webset.\"\n }\n },\n \"required\": [\n \"count\"\n ],\n \"description\": \"Specify the search parameters for the Monitor.\\n\\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided.\"\n }\n },\n \"required\": [\n \"type\",\n \"config\"\n ],\n \"description\": \"Behavior to perform when monitor runs\"\n },\n \"metadata\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ]\n }\n }\n },\n \"required\": [\n \"websetId\",\n \"cadence\",\n \"behavior\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_website_monitors", + "description": { + "tagline": "Fetch all monitors associated with a website.", + "detailed": "Use this tool to retrieve a comprehensive list of all monitoring services set up for a specific website. This is helpful for maintenance, auditing, or upgrading processes." + }, + "return_annotation": "A list of all monitors for the website.", + "arguments": [ + { + "name": "pagination_cursor", + "alternative_names": [ + "page_cursor", + "result_cursor" + ], + "description": "The cursor for paginating through the monitor results.", + "endpoint_argument_name": "cursor" + }, + { + "name": "results_limit", + "alternative_names": [ + "max_results", + "result_count" + ], + "description": "Specifies the maximum number of monitor results to return. Use for pagination.", + "endpoint_argument_name": "limit" + }, + { + "name": "webset_id", + "alternative_names": [ + "website_set_id", + "webset_identifier" + ], + "description": "The unique identifier for the Webset to retrieve monitors for. This is required to specify which website's monitors you want to list.", + "endpoint_argument_name": "websetId" + } + ] + }, + "method": "GET", + "path": "/v0/monitors", + "tags": [ + "Monitors" + ], + "summary": "List Monitors", + "description": "Lists all monitors for the Webset.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 25, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 200 + }, + "schema_required": false + }, + { + "name": "websetId", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset to list monitors for" + }, + "description": "The id of the Webset to list monitors for", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "path": [], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_specific_monitor", + "description": { + "tagline": "Retrieve details of a specific monitor using its ID.", + "detailed": "This tool is used to obtain information about a particular monitor by providing its unique ID. Call this tool when you need to get specific details about a monitor." + }, + "return_annotation": "Details of the specified monitor.", + "arguments": [ + { + "name": "monitor_id", + "alternative_names": [ + "monitor_identifier", + "monitor_key" + ], + "description": "The unique identifier of the monitor to retrieve details for.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/monitors/{id}", + "tags": [ + "Monitors" + ], + "summary": "Get Monitor", + "description": "Gets a specific monitor.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "description": "The id of the Monitor", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-update", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "update_monitor_configuration", + "description": { + "tagline": "Update the configuration of a monitor.", + "detailed": "Use this tool to update the settings of an existing monitor. Provide the monitor ID and new configuration details to modify its setup." + }, + "return_annotation": "Confirmation of updated monitor configuration.", + "arguments": [ + { + "name": "monitor_id", + "alternative_names": [ + "monitor_identifier", + "id_of_monitor" + ], + "description": "The unique identifier for the monitor to update.", + "endpoint_argument_name": "id" + }, + { + "name": "monitor_configuration_details", + "alternative_names": [ + "monitor_settings_update", + "monitor_config_data" + ], + "description": "A JSON object containing the new configuration settings for the monitor.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "PATCH", + "path": "/v0/monitors/{id}", + "tags": [ + "Monitors" + ], + "summary": "Update Monitor", + "description": "Updates a monitor configuration.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "description": "The id of the Monitor", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"status\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"enabled\",\n \"disabled\"\n ],\n \"description\": \"The status of the monitor.\"\n },\n \"metadata\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ]\n }\n },\n \"cadence\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"cron\": {\n \"description\": \"Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.\",\n \"type\": [\n \"string\"\n ]\n },\n \"timezone\": {\n \"description\": \"IANA timezone (e.g., \\\"America/New_York\\\")\",\n \"default\": \"Etc/UTC\",\n \"type\": [\n \"string\"\n ]\n }\n },\n \"required\": [\n \"cron\"\n ]\n },\n \"behavior\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"search\",\n \"default\": \"search\"\n },\n \"config\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 10000,\n \"description\": \"The query to search for. By default, the query from the last search is used.\"\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 1000\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"maxItems\": 5,\n \"description\": \"The criteria to search for. By default, the criteria from the last search is used.\"\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"exclusiveMinimum\": 0,\n \"description\": \"The maximum number of results to find\"\n },\n \"behavior\": {\n \"default\": \"append\",\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"override\",\n \"append\"\n ],\n \"description\": \"The behaviour of the Search when it is added to a Webset.\"\n }\n },\n \"required\": [\n \"count\"\n ],\n \"description\": \"Specify the search parameters for the Monitor.\\n\\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided.\"\n }\n },\n \"required\": [\n \"type\",\n \"config\"\n ]\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-delete", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "delete_monitor", + "description": { + "tagline": "Deletes a specified monitor using its ID.", + "detailed": "Use this tool to delete a monitor by providing its ID. It should be called when you need to remove a monitor from the system." + }, + "return_annotation": "Confirmation of monitor deletion.", + "arguments": [ + { + "name": "monitor_id", + "alternative_names": [ + "monitor_identifier", + "monitor_ID" + ], + "description": "The unique identifier for the monitor to be deleted.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "DELETE", + "path": "/v0/monitors/{id}", + "tags": [ + "Monitors" + ], + "summary": "Delete Monitor", + "description": "Deletes a monitor.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "description": "The id of the Monitor", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-runs-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_monitor_runs", + "description": { + "tagline": "Lists all runs for a given monitor.", + "detailed": "Use this tool to retrieve a list of all runs associated with a specific monitor. It's helpful for tracking and analyzing past monitor activities." + }, + "return_annotation": "A list of all runs for the specified monitor.", + "arguments": [ + { + "name": "monitor_id", + "alternative_names": [ + "monitor_identifier", + "monitor_reference" + ], + "description": "The ID of the monitor to list all associated runs.", + "endpoint_argument_name": "monitor" + } + ] + }, + "method": "GET", + "path": "/v0/monitors/{monitor}/runs", + "tags": [ + "Monitors Runs" + ], + "summary": "List Monitor Runs", + "description": "Lists all runs for the Monitor.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "monitor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor to list runs for" + }, + "description": "The id of the Monitor to list runs for", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "monitors-runs-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_specific_monitor_run", + "description": { + "tagline": "Retrieve details of a specific monitor run.", + "detailed": "This tool retrieves details of a specific monitor run by using the monitor ID and run ID. It should be called when you need to access information about a particular monitor run." + }, + "return_annotation": "Details of a specific monitor run.", + "arguments": [ + { + "name": "monitor_id", + "alternative_names": [ + "monitor_identifier", + "monitor_unique_id" + ], + "description": "The unique identifier of the monitor to retrieve the run for.", + "endpoint_argument_name": "monitor" + }, + { + "name": "run_id", + "alternative_names": [ + "execution_id", + "monitor_run_id" + ], + "description": "The unique identifier of the specific run to retrieve details for.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/monitors/{monitor}/runs/{id}", + "tags": [ + "Monitors Runs" + ], + "summary": "Get Monitor Run", + "description": "Gets a specific monitor run.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "monitor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor to get the run for" + }, + "description": "The id of the Monitor to get the run for", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "imports-create", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "create_data_import", + "description": { + "tagline": "Initiates a new data import for uploading data into Websets.", + "detailed": "Use this tool to create a new import allowing you to upload and manage your data within Websets. The import facilitates data enrichment, searching with natural language filters, and exclusion of duplicates. Upon creation, you'll receive an upload URL valid for a set duration to complete the data upload." + }, + "return_annotation": "Provides upload URL and expiration for data import.", + "arguments": [ + { + "name": "data_import_details", + "alternative_names": [ + "import_request_body", + "upload_data_payload" + ], + "description": "The JSON object containing data to import for Websets. This includes details for enrichment, search, or exclusion processes.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "POST", + "path": "/v0/imports", + "tags": [ + "Imports" + ], + "summary": "Create an Import", + "description": "Creates a new import to upload your data into Websets. Imports can be used to:\n\n- **Enrich**: Enhance your data with additional information using our AI-powered enrichment engine\n- **Search**: Query your data using Websets' agentic search with natural language filters\n- **Exclude**: Prevent duplicate or already known results from appearing in your searches\n\nOnce the import is created, you can upload your data to the returned `uploadUrl` until `uploadValidUntil` (by default 1 hour).", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": "object", + "properties": {}, + "oneOf": [ + { + "type": [ + "object" + ] + } + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"discriminator\": {\n \"propertyName\": \"format\"\n },\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"size\": {\n \"type\": [\n \"number\"\n ],\n \"maximum\": 50000000,\n \"description\": \"The size of the file in bytes. Maximum size is 50 MB.\"\n },\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"description\": \"The number of records to import\"\n },\n \"title\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The title of the import\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"csv\"\n ],\n \"description\": \"When the import is in CSV format, we expect a column containing the key identifier for the entity - for now URL. If not provided, import will fail to be processed.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ],\n \"description\": \"What type of entity the import contains (e.g. People, Companies, etc.), and thus should be attempted to be resolved as.\"\n },\n \"csv\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"identifier\": {\n \"type\": [\n \"integer\"\n ],\n \"minimum\": 0,\n \"description\": \"Column containing the key identifier for the entity (e.g. URL, Name, etc.). If not provided, we will try to infer it from the file.\"\n }\n },\n \"description\": \"When format is `csv`, these are the specific import parameters.\"\n }\n },\n \"required\": [\n \"size\",\n \"count\",\n \"format\",\n \"entity\"\n ]\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "imports-list", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "list_imports", + "description": { + "tagline": "Retrieve all import entries for the Webset.", + "detailed": "Use this tool to get a comprehensive list of all imports associated with the Webset, useful for tracking or auditing purposes." + }, + "return_annotation": "A list of all imports for the Webset.", + "arguments": [ + { + "name": "pagination_cursor", + "alternative_names": [ + "results_cursor", + "page_cursor" + ], + "description": "String used for paginating through results. Pass it to retrieve the next set of results.", + "endpoint_argument_name": "cursor" + }, + { + "name": "results_limit", + "alternative_names": [ + "max_results", + "number_of_results" + ], + "description": "Specify the maximum number of import results to return.", + "endpoint_argument_name": "limit" + } + ] + }, + "method": "GET", + "path": "/v0/imports", + "tags": [ + "Imports" + ], + "summary": "List Imports", + "description": "Lists all imports for the Webset.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [ + { + "name": "cursor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "description": "The cursor to paginate through the results", + "required": false, + "deprecated": false, + "default": null, + "location": "query", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + }, + { + "name": "limit", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "description": "The number of results to return", + "required": false, + "deprecated": false, + "default": 25, + "location": "query", + "content_type": null, + "json_schema": { + "type": "number", + "minimum": 1, + "maximum": 200 + }, + "schema_required": false + } + ], + "path": [], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "imports-get", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "get_specific_import", + "description": { + "tagline": "Retrieve details of a specific import.", + "detailed": "Use this tool to get detailed information about a particular import by providing its ID." + }, + "return_annotation": "Details of the specified import.", + "arguments": [ + { + "name": "import_id", + "alternative_names": [ + "import_identifier", + "export_id" + ], + "description": "The unique identifier for the specific import to retrieve details about.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "GET", + "path": "/v0/imports/{id}", + "tags": [ + "Imports" + ], + "summary": "Get Import", + "description": "Gets a specific import.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "description": "The id of the Import", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "imports-update", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "update_imports_configuration", + "description": { + "tagline": "Update an import configuration with new settings.", + "detailed": "Use this tool to update an existing import configuration by providing the necessary changes to its settings." + }, + "return_annotation": "Confirmation of updated import configuration.", + "arguments": [ + { + "name": "import_id", + "alternative_names": [ + "import_identifier", + "import_key" + ], + "description": "The identifier for the import configuration to be updated.", + "endpoint_argument_name": "id" + }, + { + "name": "import_configuration_details", + "alternative_names": [ + "config_update_payload", + "import_config_payload" + ], + "description": "JSON object containing the new settings for the import configuration. Include all necessary fields that need to be updated.", + "endpoint_argument_name": "requestBody" + } + ] + }, + "method": "PATCH", + "path": "/v0/imports/{id}", + "tags": [ + "Imports" + ], + "summary": "Update Import", + "description": "Updates a import configuration.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "description": "The id of the Import", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [ + { + "name": "requestBody", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "description": "", + "required": true, + "deprecated": false, + "default": null, + "location": "body", + "content_type": "application/json", + "json_schema": { + "type": [ + "object" + ] + }, + "schema_required": false + } + ] + }, + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"metadata\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ]\n }\n },\n \"title\": {\n \"type\": [\n \"string\"\n ]\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + }, + { + "name": "imports-delete", + "selected_for_wrapping": false, + "spec_built": true, + "wrap_finished": true, + "should_skip": false, + "skip_reason": null, + "wrapper_tool": { + "name": "delete_import", + "description": { + "tagline": "Delete an import by its ID.", + "detailed": "Use this tool to delete an import record when you have the import ID." + }, + "return_annotation": "Confirmation of import deletion.", + "arguments": [ + { + "name": "import_id", + "alternative_names": [ + "import_identifier", + "import_reference" + ], + "description": "The unique identifier of the import to be deleted.", + "endpoint_argument_name": "id" + } + ] + }, + "method": "DELETE", + "path": "/v0/imports/{id}", + "tags": [ + "Imports" + ], + "summary": "Delete Import", + "description": "Deletes a import.", + "requires_security": true, + "oauth_scopes": [], + "security_schemes": [ + "api_key" + ], + "parameters": { + "query": [], + "path": [ + { + "name": "id", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "description": "The id of the Import", + "required": true, + "deprecated": false, + "default": null, + "location": "path", + "content_type": null, + "json_schema": { + "type": "string" + }, + "schema_required": false + } + ], + "header": [], + "cookie": [], + "body": [] + }, + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false, + "use_flatten_mode": false, + "base_url": "https://api.exa.ai/websets/", + "original_servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ] + } + ], + "security_scheme_key_selected": null, + "security_scheme_selected": {} +} diff --git a/toolkits/exa_api/arcade_exa_api/moar/openapi.json b/toolkits/exa_api/arcade_exa_api/moar/openapi.json new file mode 100644 index 00000000..17048e76 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/moar/openapi.json @@ -0,0 +1,60595 @@ +{ + "openapi": "3.1.0", + "info": { + "version": "1.2.0", + "title": "Exa Search API", + "description": "A comprehensive API for internet-scale search, allowing users to perform queries and retrieve results from a wide variety of sources using embeddings-based and traditional search.", + "x-moar-merged": true, + "x-moar-merged-count": 2 + }, + "servers": [ + { + "url": "https://api.exa.ai" + }, + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "security": [ + { + "apikey": [] + } + ], + "paths": { + "/search": { + "post": { + "operationId": "search", + "summary": "Search", + "description": "Perform a search with a Exa prompt-engineered query and retrieve a list of relevant results. Optionally get contents.", + "x-codeSamples": [ + { + "lang": "bash", + "label": "Simple search and contents", + "source": "curl -X POST 'https://api.exa.ai/search' \\\n -H 'x-api-key: YOUR-EXA-API-KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"query\": \"Latest research in LLMs\",\n \"text\": true\n }'\n" + }, + { + "lang": "python", + "label": "Simple search and contents", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nresults = exa.search_and_contents(\n \"Latest research in LLMs\", \n text=True\n)\n\nprint(results)\n" + }, + { + "lang": "javascript", + "label": "Simple search and contents", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst results = await exa.searchAndContents(\n 'Latest research in LLMs', \n { text: true }\n);\n\nconsole.log(results);\n" + }, + { + "lang": "php", + "label": "Simple search and contents", + "source": "" + }, + { + "lang": "go", + "label": "Simple search and contents", + "source": "" + }, + { + "lang": "java", + "label": "Simple search and contents", + "source": "" + }, + { + "lang": "bash", + "label": "Advanced search with filters", + "source": "curl --request POST \\\n --url https://api.exa.ai/search \\\n --header 'x-api-key: ' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"query\": \"Latest research in LLMs\",\n \"type\": \"auto\",\n \"category\": \"research paper\",\n \"numResults\": 10,\n \"contents\": {\n \"text\": true,\n \"summary\": {\n \"query\": \"Main developments\"\n },\n \"subpages\": 1,\n \"subpageTarget\": \"sources\",\n \"extras\": {\n \"links\": 1,\n \"imageLinks\": 1\n }\n }\n}'\n" + }, + { + "lang": "python", + "label": "Advanced search with filters", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nresults = exa.search_and_contents(\n \"Latest research in LLMs\",\n type=\"auto\",\n category=\"research paper\",\n num_results=10,\n text=True,\n summary={\n \"query\": \"Main developments\"\n },\n subpages=1,\n subpage_target=\"sources\",\n extras={\n \"links\": 1,\n \"image_links\": 1\n }\n)\n\nprint(results)\n" + }, + { + "lang": "javascript", + "label": "Advanced search with filters", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst results = await exa.searchAndContents('Latest research in LLMs', {\n type: 'auto',\n category: 'research paper',\n numResults: 10,\n contents: {\n text: true,\n summary: {\n query: 'Main developments'\n },\n subpages: 1,\n subpageTarget: 'sources',\n extras: {\n links: 1,\n imageLinks: 1\n }\n }\n});\n\nconsole.log(results);\n" + }, + { + "lang": "php", + "label": "Advanced search with filters", + "source": "" + }, + { + "lang": "go", + "label": "Advanced search with filters", + "source": "" + }, + { + "lang": "java", + "label": "Advanced search with filters", + "source": "" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "query": { + "type": "string", + "example": "Latest developments in LLM capabilities", + "description": "The query string for the search." + }, + "type": { + "type": "string", + "enum": [ + "keyword", + "neural", + "fast", + "auto" + ], + "description": "The type of search. Neural uses an embeddings-based model, keyword is google-like SERP, and auto (default) intelligently combines the two. Fast uses streamlined versions of the neural and keyword models.", + "example": "auto", + "default": "auto" + }, + "category": { + "type": "string", + "enum": [ + "company", + "research paper", + "news", + "pdf", + "github", + "tweet", + "personal site", + "linkedin profile", + "financial report" + ], + "description": "A data category to focus on.", + "example": "research paper" + }, + "userLocation": { + "type": "string", + "description": "The two-letter ISO country code of the user, e.g. US.", + "example": "US" + } + }, + "required": [ + "query" + ] + }, + { + "type": "object", + "properties": { + "numResults": { + "type": "integer", + "maximum": 100, + "default": 10, + "minimum": 1, + "description": "Number of results to return (up to thousands of results available for custom plans)", + "example": 10 + }, + "includeDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to include in the search. If specified, results will only come from these domains.", + "example": [ + "arxiv.org", + "paperswithcode.com" + ] + }, + "excludeDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains." + }, + "startCrawlDate": { + "type": "string", + "format": "date-time", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", + "example": "2023-01-01" + }, + "endCrawlDate": { + "type": "string", + "format": "date-time", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", + "example": "2023-12-31" + }, + "startPublishedDate": { + "type": "string", + "format": "date-time", + "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", + "example": "2023-01-01" + }, + "endPublishedDate": { + "type": "string", + "format": "date-time", + "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", + "example": "2023-12-31" + }, + "includeText": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", + "example": [ + "large language model" + ] + }, + "excludeText": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", + "example": [ + "course" + ] + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + }, + "contents": { + "type": "object", + "properties": { + "text": { + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "default": false, + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "minimum": 1, + "description": "The number of sentences to return for each snippet.", + "example": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "minimum": 1, + "description": "The number of snippets to return for each result.", + "example": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "example": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Title", + "type": "object", + "properties": { + "Property 1": { + "type": "string", + "description": "Description" + }, + "Property 2": { + "type": "string", + "enum": [ + "option 1", + "option 2", + "option 3" + ], + "description": "Description" + } + }, + "required": [ + "Property 1" + ] + } + } + } + }, + "livecrawl": { + "type": "string", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "default": 10000, + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "default": 0, + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "example": "sources" + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "default": 0, + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "default": 0, + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + } + } + } + ] + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/SearchResponse" + } + }, + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 31, + "x-moar-complexity-skipped": false + } + }, + "/findSimilar": { + "post": { + "operationId": "findSimilar", + "summary": "Find similar links", + "description": "Find similar links to the link provided. Optionally get contents.", + "x-codeSamples": [ + { + "lang": "bash", + "label": "Find similar links", + "source": "curl -X POST 'https://api.exa.ai/findSimilar' \\\n -H 'x-api-key: YOUR-EXA-API-KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"url\": \"https://arxiv.org/abs/2307.06435\",\n \"text\": true\n }'\n" + }, + { + "lang": "python", + "label": "Find similar links", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nresults = exa.find_similar_and_contents(\n url=\"https://arxiv.org/abs/2307.06435\",\n text=True\n)\n\nprint(results)\n" + }, + { + "lang": "javascript", + "label": "Find similar links", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst results = await exa.findSimilarAndContents(\n 'https://arxiv.org/abs/2307.06435',\n { text: true }\n);\n\nconsole.log(results);\n" + }, + { + "lang": "php", + "label": "Find similar links", + "source": "" + }, + { + "lang": "go", + "label": "Find similar links", + "source": "" + }, + { + "lang": "java", + "label": "Find similar links", + "source": "" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "url": { + "type": "string", + "example": "https://arxiv.org/abs/2307.06435", + "description": "The url for which you would like to find similar links." + } + }, + "required": [ + "url" + ] + }, + { + "type": "object", + "properties": { + "numResults": { + "type": "integer", + "maximum": 100, + "default": 10, + "minimum": 1, + "description": "Number of results to return (up to thousands of results available for custom plans)", + "example": 10 + }, + "includeDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to include in the search. If specified, results will only come from these domains.", + "example": [ + "arxiv.org", + "paperswithcode.com" + ] + }, + "excludeDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains." + }, + "startCrawlDate": { + "type": "string", + "format": "date-time", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", + "example": "2023-01-01" + }, + "endCrawlDate": { + "type": "string", + "format": "date-time", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", + "example": "2023-12-31" + }, + "startPublishedDate": { + "type": "string", + "format": "date-time", + "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", + "example": "2023-01-01" + }, + "endPublishedDate": { + "type": "string", + "format": "date-time", + "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", + "example": "2023-12-31" + }, + "includeText": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", + "example": [ + "large language model" + ] + }, + "excludeText": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", + "example": [ + "course" + ] + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + }, + "contents": { + "type": "object", + "properties": { + "text": { + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "default": false, + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "minimum": 1, + "description": "The number of sentences to return for each snippet.", + "example": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "minimum": 1, + "description": "The number of snippets to return for each result.", + "example": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "example": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Title", + "type": "object", + "properties": { + "Property 1": { + "type": "string", + "description": "Description" + }, + "Property 2": { + "type": "string", + "enum": [ + "option 1", + "option 2", + "option 3" + ], + "description": "Description" + } + }, + "required": [ + "Property 1" + ] + } + } + } + }, + "livecrawl": { + "type": "string", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "default": 10000, + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "default": 0, + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "example": "sources" + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "default": 0, + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "default": 0, + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + } + } + } + ] + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/FindSimilarResponse" + } + }, + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 28, + "x-moar-complexity-skipped": false + } + }, + "/contents": { + "post": { + "summary": "Get Contents", + "operationId": "getContents", + "x-codeSamples": [ + { + "lang": "bash", + "label": "Simple contents retrieval", + "source": "curl -X POST 'https://api.exa.ai/contents' \\\n -H 'x-api-key: YOUR-EXA-API-KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"urls\": [\"https://arxiv.org/abs/2307.06435\"],\n \"text\": true\n }'\n" + }, + { + "lang": "python", + "label": "Simple contents retrieval", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nresults = exa.get_contents(\n urls=[\"https://arxiv.org/abs/2307.06435\"],\n text=True\n)\n\nprint(results)\n" + }, + { + "lang": "javascript", + "label": "Simple contents retrieval", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst results = await exa.getContents(\n [\"https://arxiv.org/abs/2307.06435\"],\n { text: true }\n);\n\nconsole.log(results);\n" + }, + { + "lang": "php", + "label": "Simple contents retrieval", + "source": "" + }, + { + "lang": "go", + "label": "Simple contents retrieval", + "source": "" + }, + { + "lang": "java", + "label": "Simple contents retrieval", + "source": "" + }, + { + "lang": "bash", + "label": "Advanced contents retrieval", + "source": "curl --request POST \\\n --url https://api.exa.ai/contents \\\n --header 'x-api-key: YOUR-EXA-API-KEY' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"urls\": [\"https://arxiv.org/abs/2307.06435\"],\n \"text\": {\n \"maxCharacters\": 1000,\n \"includeHtmlTags\": false\n },\n \"highlights\": {\n \"numSentences\": 3,\n \"highlightsPerUrl\": 2,\n \"query\": \"Key findings\"\n },\n \"summary\": {\n \"query\": \"Main research contributions\"\n },\n \"subpages\": 1,\n \"subpageTarget\": \"references\",\n \"extras\": {\n \"links\": 2,\n \"imageLinks\": 1\n }\n }'\n" + }, + { + "lang": "python", + "label": "Advanced contents retrieval", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nresults = exa.get_contents(\n urls=[\"https://arxiv.org/abs/2307.06435\"],\n text={\n \"maxCharacters\": 1000,\n \"includeHtmlTags\": False\n },\n highlights={\n \"numSentences\": 3,\n \"highlightsPerUrl\": 2,\n \"query\": \"Key findings\"\n },\n summary={\n \"query\": \"Main research contributions\"\n },\n subpages=1,\n subpage_target=\"references\",\n extras={\n \"links\": 2,\n \"image_links\": 1\n }\n)\n\nprint(results)\n" + }, + { + "lang": "javascript", + "label": "Advanced contents retrieval", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst results = await exa.getContents(\n [\"https://arxiv.org/abs/2307.06435\"],\n {\n text: {\n maxCharacters: 1000,\n includeHtmlTags: false\n },\n highlights: {\n numSentences: 3,\n highlightsPerUrl: 2,\n query: \"Key findings\"\n },\n summary: {\n query: \"Main research contributions\"\n },\n subpages: 1,\n subpageTarget: \"references\",\n extras: {\n links: 2,\n imageLinks: 1\n }\n }\n);\n\nconsole.log(results);\n" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "urls": { + "type": "array", + "description": "Array of URLs to crawl (backwards compatible with 'ids' parameter).", + "items": { + "type": "string" + }, + "example": [ + "https://arxiv.org/pdf/2307.06435" + ] + }, + "ids": { + "type": "array", + "deprecated": true, + "description": "Deprecated - use 'urls' instead. Array of document IDs obtained from searches.", + "items": { + "type": "string" + }, + "example": [ + "https://arxiv.org/pdf/2307.06435" + ] + } + }, + "required": [ + "urls" + ] + }, + { + "type": "object", + "properties": { + "text": { + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "default": false, + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "minimum": 1, + "description": "The number of sentences to return for each snippet.", + "example": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "minimum": 1, + "description": "The number of snippets to return for each result.", + "example": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "example": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Title", + "type": "object", + "properties": { + "Property 1": { + "type": "string", + "description": "Description" + }, + "Property 2": { + "type": "string", + "enum": [ + "option 1", + "option 2", + "option 3" + ], + "description": "Description" + } + }, + "required": [ + "Property 1" + ] + } + } + } + }, + "livecrawl": { + "type": "string", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "default": 10000, + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "default": 0, + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "example": "sources" + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "default": 0, + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "default": 0, + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + } + ] + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/ContentsResponse" + } + }, + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 18, + "x-moar-complexity-skipped": false + } + }, + "/answer": { + "post": { + "operationId": "answer", + "summary": "Generate an answer from search results", + "description": "Performs a search based on the query and generates either a direct answer or a detailed summary with citations, depending on the query type.\n", + "x-codeSamples": [ + { + "lang": "bash", + "label": "Simple answer", + "source": "curl -X POST 'https://api.exa.ai/answer' \\\n -H 'x-api-key: YOUR-EXA-API-KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"query\": \"What is the latest valuation of SpaceX?\",\n \"text\": true\n }'\n" + }, + { + "lang": "python", + "label": "Simple answer", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nresult = exa.answer(\n \"What is the latest valuation of SpaceX?\",\n text=True\n)\n\nprint(result)\n" + }, + { + "lang": "javascript", + "label": "Simple answer", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst result = await exa.answer(\n 'What is the latest valuation of SpaceX?',\n { text: true }\n);\n\nconsole.log(result);\n" + }, + { + "lang": "php", + "label": "Simple answer", + "source": "" + }, + { + "lang": "go", + "label": "Simple answer", + "source": "" + }, + { + "lang": "java", + "label": "Simple answer", + "source": "" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "query" + ], + "properties": { + "query": { + "type": "string", + "description": "The question or query to answer.", + "example": "What is the latest valuation of SpaceX?", + "minLength": 1 + }, + "stream": { + "type": "boolean", + "default": false, + "description": "If true, the response is returned as a server-sent events (SSS) stream." + }, + "text": { + "type": "boolean", + "default": false, + "description": "If true, the response includes full text content in the search results" + } + } + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/AnswerResponse" + } + }, + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 3, + "x-moar-complexity-skipped": false + } + }, + "/research/v1": { + "get": { + "description": "Get a paginated list of research requests", + "operationId": "ResearchController_listResearch", + "parameters": [ + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 50, + "default": 10, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "List of research requests", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "discriminator": { + "propertyName": "status" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "running" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + }, + "output": { + "type": [ + "object" + ], + "properties": { + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "content" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "output", + "costDollars" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "canceled" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + }, + "error": { + "type": [ + "string" + ], + "description": "A message indicating why the request failed" + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "error" + ] + } + ], + "examples": [ + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "running" + }, + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "completed", + "output": "Melophorus bagoti" + } + ] + }, + "description": "The list of research requests" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": [ + "string", + "null" + ], + "description": "The cursor to paginate through the next set of results" + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + } + } + }, + "summary": "List research requests", + "tags": [ + "Research" + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "post": { + "operationId": "ResearchController_createResearch", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ] + }, + "instructions": { + "type": [ + "string" + ], + "maxLength": 4096, + "description": "Instructions for what research should be conducted" + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "instructions" + ], + "examples": [ + { + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?" + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Research request created", + "content": { + "application/json": { + "schema": { + "discriminator": { + "propertyName": "status" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "running" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + }, + "output": { + "type": [ + "object" + ], + "properties": { + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "content" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "output", + "costDollars" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "canceled" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + }, + "error": { + "type": [ + "string" + ], + "description": "A message indicating why the request failed" + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "error" + ] + } + ], + "examples": [ + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "running" + }, + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "completed", + "output": "Melophorus bagoti" + } + ] + } + } + } + } + }, + "summary": "Create a new research request", + "tags": [ + "Research" + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/research/v1/{researchId}": { + "get": { + "description": "Retrieve research by ID. Add ?stream=true for real-time SSE updates.", + "operationId": "ResearchController_getResearch", + "parameters": [ + { + "name": "researchId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "stream", + "required": true, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "events", + "required": true, + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "discriminator": { + "propertyName": "status" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "running" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + }, + "output": { + "type": [ + "object" + ], + "properties": { + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "content" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "output", + "costDollars" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "canceled" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + } + }, + "error": { + "type": [ + "string" + ], + "description": "A message indicating why the request failed" + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "error" + ] + } + ], + "examples": [ + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "running" + }, + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "completed", + "output": "Melophorus bagoti" + } + ] + } + } + } + } + }, + "summary": "Get a research request by id", + "tags": [ + "Research" + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets": { + "post": { + "description": "Creates a new Webset with optional search, import, and enrichment configurations. The Webset will automatically begin processing once created.\n\nYou can specify an `externalId` to reference the Webset with your own identifiers for easier integration.", + "operationId": "websets-create", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "search": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Natural language search query describing what you are looking for.\n\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\n\nAny URLs provided will be crawled and used as additional context for the search.", + "examples": [ + "Marketing agencies based in the US, that focus on consumer products.", + "AI startups in Europe that raised Series A funding in 2024", + "SaaS companies with 50-200 employees in the fintech space" + ] + }, + "count": { + "default": 10, + "type": [ + "number" + ], + "minimum": 1, + "description": "Number of Items the Webset will attempt to find.\n\nThe actual number of Items found may be less than this number depending on the search complexity." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000, + "description": "The description of the criterion" + } + }, + "required": [ + "description" + ] + }, + "minItems": 1, + "maxItems": 5, + "description": "Criteria every item is evaluated against.\n\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control." + }, + "recall": { + "type": [ + "boolean" + ], + "description": "Whether to provide an estimate of how many total relevant results could exist for this search.\nResult of the analysis will be available in the `recall` field within the search request." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to exclude." + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to search." + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Limit the search to specific sources (existing imports or websets). Any results found within these sources matching the search criteria will be included in the Webset." + } + }, + "required": [ + "query" + ], + "description": "Create initial search for the Webset." + }, + "import": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to search." + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Import data from existing Websets and Imports into this Webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Provide a description of the enrichment task you want to perform to each Webset Item." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment response.\n\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "minItems": 1, + "maxItems": 150, + "description": "When the format is options, the different options for the enrichment agent to choose from." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "description" + ] + }, + "description": "Add enrichments to extract additional data from found items.\n\nEnrichments automatically search for and extract specific information (like contact details, funding data, employee counts, etc.) from each item added to your Webset." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to exclude." + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Global exclusion sources (existing imports or websets) that apply to all operations within this Webset. Any results found within these sources will be omitted across all search and import operations." + }, + "externalId": { + "type": [ + "string" + ], + "maxLength": 300, + "description": "The external identifier for the webset.\n\nYou can use this to reference the Webset by your own internal identifiers." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "examples": [ + { + "search": { + "query": "Marketing agencies based in the US, that focus on consumer products.", + "count": 10 + } + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Webset created", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "409": { + "description": "Webset with this externalId already exists", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Create a Webset", + "tags": [ + "Websets" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webset = await exa.websets.create({\n search: {\n query: \"Tech companies in San Francisco\",\n count: 10\n }\n});\n\nconsole.log(`Created webset: ${webset.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebset = exa.websets.create(params={\n 'search': {\n 'query': 'Tech companies in San Francisco',\n 'count': 10\n }\n})\n\nprint(f'Created webset: {webset.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "get": { + "description": "Returns a list of Websets.\n\nYou can paginate through the results using the `cursor` parameter.", + "operationId": "websets-list", + "parameters": [ + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of Websets to return", + "schema": { + "minimum": 1, + "maximum": 100, + "default": 25, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "List of Websets", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "description": "The list of websets" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List all Websets", + "tags": [ + "Websets" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\n// List websets with optional pagination\nconst websets = await exa.websets.list({\n limit: 20 // Optional: max results per page\n});\n\nconsole.log(`Found ${websets.data.length} websets`);\nwebsets.data.forEach(webset => {\n console.log(`- ${webset.id}: ${webset.status}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\n# List websets with optional pagination\nwebsets_response = exa.websets.list(\n limit=20 # Optional: max results per page\n)\n\nprint(f\"Found {len(websets_response.data)} websets\")\nfor webset in websets_response.data:\n print(f\"- {webset.id}: {webset.status}\")" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{id}": { + "get": { + "operationId": "websets-get", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset.", + "schema": { + "type": "string" + } + }, + { + "name": "expand", + "required": false, + "in": "query", + "description": "Expand the response with the specified resources", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "items" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Webset", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "items": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "description": "When expand query parameter contains `items`, this will contain the items in the webset" + } + } + } + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Webset not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get a Webset", + "tags": [ + "Websets" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webset = await exa.websets.get('webset_id');\n\nconsole.log(`Webset: ${webset.id} - ${webset.status}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebset = exa.websets.get('webset_id')\n\nprint(f'Webset: {webset.id} - {webset.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "post": { + "operationId": "websets-update", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": "object", + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + }, + "nullable": true + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Webset updated", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Webset not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Update a Webset", + "tags": [ + "Websets" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webset = await exa.websets.update('webset_id', {\n name: 'Updated Webset Name',\n description: 'Updated description'\n});\n\nconsole.log(`Updated webset: ${webset.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebset = exa.websets.update('webset_id', params={\n 'name': 'Updated Webset Name',\n 'description': 'Updated description'\n})\n\nprint(f'Updated webset: {webset.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "delete": { + "description": "Deletes a Webset.\n\nOnce deleted, the Webset and all its Items will no longer be available.", + "operationId": "websets-delete", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webset deleted", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Webset not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Delete a Webset", + "tags": [ + "Websets" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nawait exa.websets.delete('webset_id');\n\nconsole.log('Webset deleted successfully');" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nexa.websets.delete('webset_id')\n\nprint('Webset deleted successfully')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{id}/cancel": { + "post": { + "description": "Cancels all operations being performed on a Webset.\n\nAny enrichment or search will be stopped and the Webset will be marked as `idle`.", + "operationId": "websets-cancel", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webset canceled", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Cancel a running Webset", + "tags": [ + "Websets" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webset = await exa.websets.cancel('webset_id');\n\nconsole.log(`Cancelled webset: ${webset.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebset = exa.websets.cancel('webset_id')\n\nprint(f'Cancelled webset: {webset.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/preview": { + "post": { + "description": "Preview how a search query will be decomposed before creating a webset. This endpoint performs the same query analysis that happens during webset creation, allowing you to see the detected entity type, generated search criteria, and available enrichment columns in advance.\n\nUse this to help users understand how their search will be interpreted before committing to a full webset creation.", + "operationId": "websets-preview", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Natural language search query describing what you are looking for.\n\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.", + "examples": [ + "Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city", + "AI startups in Europe that raised Series A funding in 2024", + "SaaS companies with 50-200 employees in the fintech space" + ] + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + } + }, + "required": [ + "query" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Preview of the webset", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "search": { + "type": [ + "object" + ], + "properties": { + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ], + "description": "Detected entity from the query." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ] + } + }, + "required": [ + "description" + ] + }, + "description": "Detected criteria from the query." + } + }, + "required": [ + "entity", + "criteria" + ] + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "description": "Description of the enrichment." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "Label of the option." + } + }, + "required": [ + "label" + ] + }, + "description": "When format is options, the options detected from the query." + } + }, + "required": [ + "description", + "format" + ] + }, + "description": "Detected enrichments from the query." + } + }, + "required": [ + "search", + "enrichments" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "422": { + "description": "Unable to detect entity or criteria from query", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Preview a webset", + "tags": [ + "Websets Preview" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst preview = await exa.websets.preview({\n query: \"Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city\"\n});\n\nconsole.log('Search criteria:', preview.search.criteria);\nconsole.log('Available enrichments:', preview.enrichments.length);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\npreview = exa.websets.preview(params={\n 'query': 'Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city'\n})\n\nprint('Search criteria:', preview.search.criteria)\nprint('Available enrichments:', len(preview.enrichments))" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/items/{id}": { + "get": { + "description": "Returns a Webset Item.", + "operationId": "websets-items-get", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Webset item", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webset Item", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get an Item", + "tags": [ + "Items" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst item = await exa.websets.items.get('webset_id', 'item_id');\n\nconsole.log(`Item: ${item.id} - ${item.properties.name}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nitem = exa.websets.items.get('webset_id', 'item_id')\n\nprint(f'Item: {item.id} - {item.properties.name}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "delete": { + "description": "Deletes an Item from the Webset.\n\nThis will cancel any enrichment process for it.", + "operationId": "websets-items-delete", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Webset item", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webset Item deleted", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Delete an Item", + "tags": [ + "Items" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nawait exa.websets.items.delete('webset_id', 'item_id');\n\nconsole.log('Item deleted successfully');" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nexa.websets.items.delete('webset_id', 'item_id')\n\nprint('Item deleted successfully')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/items": { + "get": { + "description": "Returns a list of Webset Items.\n\nYou can paginate through the Items using the `cursor` parameter.", + "operationId": "websets-items-list", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 100, + "default": 20, + "type": "number" + } + }, + { + "name": "sourceId", + "required": false, + "in": "query", + "description": "The id of the source", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webset Items", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "description": "The list of webset items" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more Items to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of Items", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List all Items for a Webset", + "tags": [ + "Items" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst items = await exa.websets.items.list('webset_id', {\n limit: 20\n});\n\nconsole.log(`Found ${items.data.length} items`);\nitems.data.forEach(item => {\n console.log(`- ${item.id}: ${item.properties.name}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nitems = exa.websets.items.list('webset_id', limit=20)\n\nprint(f'Found {len(items.data)} items')\nfor item in items.data:\n print(f'- {item.id}: {item.properties.name}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/enrichments": { + "post": { + "description": "Create an Enrichment for a Webset.", + "operationId": "websets-enrichments-create", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Provide a description of the enrichment task you want to perform to each Webset Item." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment response.\n\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "minItems": 1, + "maxItems": 150, + "description": "When the format is options, the different options for the enrichment agent to choose from." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "description" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Enrichment created", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Create an Enrichment", + "tags": [ + "Enrichments" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst enrichment = await exa.websets.enrichments.create('webset_id', {\n description: 'Company revenue information',\n format: 'text'\n});\n\nconsole.log(`Created enrichment: ${enrichment.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nenrichment = exa.websets.enrichments.create('webset_id', params={\n 'description': 'Company revenue information',\n 'format': 'text'\n})\n\nprint(f'Created enrichment: {enrichment.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/enrichments/{id}": { + "patch": { + "description": "Update an Enrichment configuration for a Webset.", + "operationId": "websets-enrichments-update", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Provide a description of the enrichment task you want to perform to each Webset Item." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment response.\n\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "minItems": 1, + "maxItems": 150, + "description": "When the format is options, the different options for the enrichment agent to choose from." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": "object", + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + }, + "nullable": true + } + } + } + } + } + }, + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Update an Enrichment", + "tags": [ + "Enrichments" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst enrichment = await exa.websets.enrichments.update('webset_id', 'enrichment_id', {\n description: 'Updated company revenue and growth metrics',\n format: 'number'\n});\n\nconsole.log(`Updated enrichment: ${enrichment.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nenrichment = exa.websets.enrichments.update('webset_id', 'enrichment_id', params={\n 'description': 'Updated company revenue and growth metrics',\n 'format': 'number'\n})\n\nprint(f'Updated enrichment: {enrichment.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "get": { + "operationId": "websets-enrichments-get", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Enrichment", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Enrichment", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get an Enrichment", + "tags": [ + "Enrichments" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst enrichment = await exa.websets.enrichments.get('webset_id', 'enrichment_id');\n\nconsole.log(`Enrichment: ${enrichment.id} - ${enrichment.status}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nenrichment = exa.websets.enrichments.get('webset_id', 'enrichment_id')\n\nprint(f'Enrichment: {enrichment.id} - {enrichment.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "delete": { + "description": "When deleting an Enrichment, any running enrichments will be canceled and all existing `enrichment_result` generated by this Enrichment will no longer be available.", + "operationId": "websets-enrichments-delete", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Enrichment", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Enrichment deleted", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Delete an Enrichment", + "tags": [ + "Enrichments" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nawait exa.websets.enrichments.delete('webset_id', 'enrichment_id');\n\nconsole.log('Enrichment deleted successfully');" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nexa.websets.enrichments.delete('webset_id', 'enrichment_id')\n\nprint('Enrichment deleted successfully')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/enrichments/{id}/cancel": { + "post": { + "description": "All running enrichments will be canceled. You can not resume an Enrichment after it has been canceled.", + "operationId": "websets-enrichments-cancel", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id or externalId of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Enrichment", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Enrichment cancelled", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Cancel a running Enrichment", + "tags": [ + "Enrichments" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst enrichment = await exa.websets.enrichments.cancel('webset_id', 'enrichment_id');\n\nconsole.log(`Cancelled enrichment: ${enrichment.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nenrichment = exa.websets.enrichments.cancel('webset_id', 'enrichment_id')\n\nprint(f'Cancelled enrichment: {enrichment.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/webhooks": { + "post": { + "description": "Webhooks let you get notifications when things happen in your Websets. When you create a webhook, you choose which events you want to know about and where to send the notifications.\n\nWhen an event happens, Exa sends an HTTP POST request to your webhook URL with:\n- Event details (type, time, ID)\n- Full data of what triggered the event\n- A signature to verify the request came from Exa\n\nThe webhook starts as `active` and begins getting notifications right away. You'll get a secret key for checking webhook signatures - save this safely as it's only shown once when you create the webhook.", + "operationId": "webhooks-create", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "maxItems": 19, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "events", + "url" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Webhook", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "object": { + "type": "string", + "const": "webhook", + "default": "webhook" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "active", + "inactive" + ], + "description": "The status of the webhook", + "title": "WebhookStatus" + }, + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "secret": { + "type": "string", + "description": "The secret to verify the webhook signature. Only returned on Webhook creation.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the webhook", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "events", + "url", + "secret", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Create a Webhook", + "tags": [ + "Webhooks" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webhook = await exa.websets.webhooks.create({\n url: 'https://api.yourapp.com/webhooks/exa',\n events: ['webset.completed', 'enrichment.completed']\n});\n\nconsole.log(`Created webhook: ${webhook.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebhook = exa.websets.webhooks.create(params={\n 'url': 'https://api.yourapp.com/webhooks/exa',\n 'events': ['webset.completed', 'enrichment.completed']\n})\n\nprint(f'Created webhook: {webhook.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "get": { + "description": "Get a list of all webhooks in your account.\nThe results come in pages. Use `limit` to set how many webhooks to get per page (up to 200). Use `cursor` to get the next page of results.", + "operationId": "webhooks-list", + "parameters": [ + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 200, + "default": 25, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "List of webhooks", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "object": { + "type": "string", + "const": "webhook", + "default": "webhook" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "active", + "inactive" + ], + "description": "The status of the webhook", + "title": "WebhookStatus" + }, + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "secret": { + "type": "string", + "description": "The secret to verify the webhook signature. Only returned on Webhook creation.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the webhook", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "events", + "url", + "secret", + "createdAt", + "updatedAt" + ] + }, + "description": "The list of webhooks" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List webhooks", + "tags": [ + "Webhooks" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webhooks = await exa.websets.webhooks.list();\n\nconsole.log(`Found ${webhooks.data.length} webhooks`);\nwebhooks.data.forEach(webhook => {\n console.log(`- ${webhook.id}: ${webhook.url}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebhooks = exa.websets.webhooks.list()\n\nprint(f'Found {len(webhooks.data)} webhooks')\nfor webhook in webhooks.data:\n print(f'- {webhook.id}: {webhook.url}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/webhooks/{id}": { + "get": { + "description": "Get information about a webhook using its ID.\nThe webhook secret is not shown here for security - you only get it when you first create the webhook.", + "operationId": "webhooks-get", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the webhook", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webhook", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "object": { + "type": "string", + "const": "webhook", + "default": "webhook" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "active", + "inactive" + ], + "description": "The status of the webhook", + "title": "WebhookStatus" + }, + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "secret": { + "type": "string", + "description": "The secret to verify the webhook signature. Only returned on Webhook creation.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the webhook", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "events", + "url", + "secret", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Webhook not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get a Webhook", + "tags": [ + "Webhooks" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webhook = await exa.websets.webhooks.get('webhook_id');\n\nconsole.log(`Webhook: ${webhook.id} - ${webhook.url}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebhook = exa.websets.webhooks.get('webhook_id')\n\nprint(f'Webhook: {webhook.id} - {webhook.url}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "patch": { + "description": "Change a webhook's settings. You can update:\n- Events: Add or remove which events you want to hear about - URL: Change where notifications are sent - Metadata: Update custom data linked to the webhook\n\nChanges happen right away. If you change the events list, the webhook will start or stop getting notifications for those events immediately.\n\nThe webhook keeps its current status (`active` or `inactive`) when you update it.", + "operationId": "webhooks-update", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the webhook", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "maxItems": 19, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Webhook", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "object": { + "type": "string", + "const": "webhook", + "default": "webhook" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "active", + "inactive" + ], + "description": "The status of the webhook", + "title": "WebhookStatus" + }, + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "secret": { + "type": "string", + "description": "The secret to verify the webhook signature. Only returned on Webhook creation.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the webhook", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "events", + "url", + "secret", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Webhook not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Update a Webhook", + "tags": [ + "Webhooks" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst webhook = await exa.websets.webhooks.update('webhook_id', {\n url: 'https://api.yourapp.com/webhooks/exa-updated',\n events: ['webset.completed']\n});\n\nconsole.log(`Updated webhook: ${webhook.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nwebhook = exa.websets.webhooks.update('webhook_id', params={\n 'url': 'https://api.yourapp.com/webhooks/exa-updated',\n 'events': ['webset.completed']\n})\n\nprint(f'Updated webhook: {webhook.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "delete": { + "description": "Remove a webhook from your account. Once deleted, the webhook stops getting notifications right away and cannot be brought back.\n\nImportant notes: - The webhook stops working as soon as you delete it - You cannot undo this - you'll need to create a new webhook if you want it back - Any notifications currently being sent may still complete", + "operationId": "webhooks-delete", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the webhook", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Webhook", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "object": { + "type": "string", + "const": "webhook", + "default": "webhook" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "active", + "inactive" + ], + "description": "The status of the webhook", + "title": "WebhookStatus" + }, + "events": { + "type": [ + "array" + ], + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "minItems": 1, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "secret": { + "type": "string", + "description": "The secret to verify the webhook signature. Only returned on Webhook creation.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the webhook", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "events", + "url", + "secret", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Webhook not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Delete a Webhook", + "tags": [ + "Webhooks" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nawait exa.websets.webhooks.delete('webhook_id');\n\nconsole.log('Webhook deleted successfully');" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nexa.websets.webhooks.delete('webhook_id')\n\nprint('Webhook deleted successfully')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/webhooks/{id}/attempts": { + "get": { + "description": "List all attempts made by a Webhook ordered in descending order.", + "operationId": "webhooks-attempts-list", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The ID of the webhook", + "schema": { + "type": "string" + } + }, + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 200, + "default": 25, + "type": "number" + } + }, + { + "name": "eventType", + "required": false, + "in": "query", + "description": "The type of event to filter by", + "schema": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + } + }, + { + "name": "successful", + "required": false, + "in": "query", + "description": "Filter attempts by their success status", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "List of webhook attempts", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook attempt" + }, + "object": { + "type": "string", + "const": "webhook_attempt", + "default": "webhook_attempt" + }, + "eventId": { + "type": [ + "string" + ], + "description": "The unique identifier for the event" + }, + "eventType": { + "type": [ + "string" + ], + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ], + "description": "The type of event" + }, + "webhookId": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "url": { + "type": [ + "string" + ], + "description": "The URL that was used during the attempt" + }, + "successful": { + "description": "Whether the attempt was successful", + "type": [ + "boolean" + ] + }, + "responseHeaders": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + }, + "description": "The headers of the response" + }, + "responseBody": { + "type": "string", + "description": "The body of the response", + "nullable": true + }, + "responseStatusCode": { + "type": [ + "number" + ], + "description": "The status code of the response" + }, + "attempt": { + "type": [ + "number" + ], + "description": "The attempt number of the webhook" + }, + "attemptedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook attempt was made" + } + }, + "required": [ + "id", + "object", + "eventId", + "eventType", + "webhookId", + "url", + "successful", + "responseHeaders", + "responseBody", + "responseStatusCode", + "attempt", + "attemptedAt" + ] + }, + "description": "The list of webhook attempts" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List webhook attempts", + "tags": [ + "Webhooks Attempts" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst attempts = await exa.websets.webhooks.listAttempts('webhook_id', {\n limit: 20\n});\n\nconsole.log(`Found ${attempts.data.length} webhook attempts`);\nattempts.data.forEach(attempt => {\n console.log(`- ${attempt.id}: ${attempt.status}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nattempts = exa.websets.webhooks.attempts.list('webhook_id')\n\nprint(f'Found {len(attempts.data)} webhook attempts')\nfor attempt in attempts.data:\n print(f'- {attempt.id}: {attempt.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/events": { + "get": { + "description": "List all events that have occurred in the system.\n\nYou can paginate through the results using the `cursor` parameter.", + "operationId": "events-list", + "parameters": [ + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 200, + "default": 25, + "type": "number" + } + }, + { + "name": "types", + "required": false, + "in": "query", + "description": "The types of events to filter by", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + } + } + }, + { + "name": "createdBefore", + "required": false, + "in": "query", + "description": "Filter events created before or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAfter", + "required": false, + "in": "query", + "description": "Filter events created after or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC.", + "schema": { + "format": "date-time", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of events", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.created", + "default": "webset.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.deleted", + "default": "webset.deleted" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetDeletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.idle", + "default": "webset.idle" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetIdleEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.paused", + "default": "webset.paused" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetPausedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.item.created", + "default": "webset.item.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetItemCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.item.enriched", + "default": "webset.item.enriched" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetItemEnrichedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.created", + "default": "webset.search.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.updated", + "default": "webset.search.updated" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchUpdatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.canceled", + "default": "webset.search.canceled" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCanceledEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.completed", + "default": "webset.search.completed" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCompletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "import.created", + "default": "import.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "ImportCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "import.completed", + "default": "import.completed" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "ImportCompletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.created", + "default": "monitor.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.updated", + "default": "monitor.updated" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorUpdatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.deleted", + "default": "monitor.deleted" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorDeletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.run.created", + "default": "monitor.run.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorRunCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.run.completed", + "default": "monitor.run.completed" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorRunCompletedEvent" + } + ], + "title": "Event" + }, + "description": "The list of events" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List all Events", + "tags": [ + "Events" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst events = await exa.websets.events.list({\n limit: 20\n});\n\nconsole.log(`Found ${events.data.length} events`);\nevents.data.forEach(event => {\n console.log(`- ${event.id}: ${event.type} at ${event.createdAt}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nevents = exa.websets.events.list(limit=20)\n\nprint(f'Found {len(events.data)} events')\nfor event in events.data:\n print(f'- {event.id}: {event.type}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/events/{id}": { + "get": { + "description": "Get a single Event by id.\n\nYou can subscribe to Events by creating a Webhook.", + "operationId": "events-get", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the event", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.created", + "default": "webset.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.deleted", + "default": "webset.deleted" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetDeletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.idle", + "default": "webset.idle" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetIdleEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.paused", + "default": "webset.paused" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetPausedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.item.created", + "default": "webset.item.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetItemCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.item.enriched", + "default": "webset.item.enriched" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetItemEnrichedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.created", + "default": "webset.search.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.updated", + "default": "webset.search.updated" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchUpdatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.canceled", + "default": "webset.search.canceled" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCanceledEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.completed", + "default": "webset.search.completed" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCompletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "import.created", + "default": "import.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "ImportCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "import.completed", + "default": "import.completed" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "ImportCompletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.created", + "default": "monitor.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.updated", + "default": "monitor.updated" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorUpdatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.deleted", + "default": "monitor.deleted" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorDeletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.run.created", + "default": "monitor.run.created" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorRunCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.run.completed", + "default": "monitor.run.completed" + }, + "data": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorRunCompletedEvent" + } + ], + "title": "Event" + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + }, + "404": { + "description": "Event not found", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get an Event", + "tags": [ + "Events" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst event = await exa.websets.events.get('event_id');\n\nconsole.log(`Event: ${event.id} - ${event.type}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nevent = exa.websets.events.get('event_id')\n\nprint(f'Event: {event.id} - {event.type}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/searches": { + "post": { + "description": "Creates a new Search for the Webset.\n\nThe default behavior is to reuse the previous Search results and evaluate them against the new criteria.", + "operationId": "websets-searches-create", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id of the Webset", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "Number of Items the Search will attempt to find.\n\nThe actual number of Items found may be less than this number depending on the query complexity." + }, + "query": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Natural language search query describing what you are looking for.\n\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\n\nAny URLs provided will be crawled and used as additional context for the search.", + "examples": [ + "Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city", + "AI startups in Europe that raised Series A funding in 2024", + "SaaS companies with 50-200 employees in the fintech space" + ] + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000, + "description": "The description of the criterion" + } + }, + "required": [ + "description" + ] + }, + "minItems": 1, + "maxItems": 5, + "description": "Criteria every item is evaluated against.\n\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "description": "The ID of the source to exclude.", + "type": [ + "string" + ], + "minLength": 1 + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to search." + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Limit the search to specific sources (existing imports). Any results found within these sources matching the search criteria will be included in the Webset." + }, + "recall": { + "type": [ + "boolean" + ], + "description": "Whether to provide an estimate of how many total relevant results could exist for this search.\nResult of the analysis will be available in the `recall` field within the search request." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "count", + "query" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Webset Search created", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Create a Search", + "tags": [ + "Searches" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst search = await exa.websets.searches.create('webset_id', {\n query: 'additional companies to add',\n count: 5\n});\n\nconsole.log(`Created search: ${search.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nsearch = exa.websets.searches.create('webset_id', params={\n 'query': 'additional companies to add',\n 'count': 5\n})\n\nprint(f'Created search: {search.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/searches/{id}": { + "get": { + "description": "Gets a Search by id", + "operationId": "websets-searches-get", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Search", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Search retrieved", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get a Search", + "tags": [ + "Searches" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst search = await exa.websets.searches.get('webset_id', 'search_id');\n\nconsole.log(`Search: ${search.id} - ${search.status}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nsearch = exa.websets.searches.get('webset_id', 'search_id')\n\nprint(f'Search: {search.id} - {search.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/websets/{webset}/searches/{id}/cancel": { + "post": { + "description": "Cancels a currently running Search.\n\nYou can cancel all searches at once by using the `websets/:webset/cancel` endpoint.", + "operationId": "websets-searches-cancel", + "parameters": [ + { + "name": "webset", + "required": true, + "in": "path", + "description": "The id of the Webset", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Search", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Search canceled", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Cancel a running Search", + "tags": [ + "Searches" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst search = await exa.websets.searches.cancel('webset_id', 'search_id');\n\nconsole.log(`Cancelled search: ${search.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nsearch = exa.websets.searches.cancel('webset_id', 'search_id')\n\nprint(f'Cancelled search: {search.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/monitors": { + "post": { + "description": "Creates a new `Monitor` to continuously keep your Websets updated with fresh data.\n\nMonitors automatically run on your defined schedule to ensure your Websets stay current without manual intervention:\n\n- **Find new content**: Execute `search` operations to discover fresh items matching your criteria\n- **Update existing content**: Run `refresh` operations to update items contents and enrichments\n- **Automated scheduling**: Configure `cron` expressions and `timezone` for precise scheduling control", + "operationId": "monitors-create", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "metadata": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "websetId", + "cadence", + "behavior" + ] + } + } + } + }, + "responses": { + "201": { + "description": "Monitor created successfully", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Create a Monitor", + "tags": [ + "Monitors" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst monitor = await exa.websets.monitors.create({\n websetId: 'webset_id',\n cadence: {\n cron: '0 9 * * 1', // Every Monday at 9 AM\n timezone: 'America/New_York'\n },\n behavior: {\n type: 'search',\n config: {\n behavior: 'append',\n query: 'new companies to monitor',\n count: 10\n }\n }\n});\n\nconsole.log(`Created monitor: ${monitor.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nmonitor = exa.websets.monitors.create(params={\n 'websetId': 'webset_id',\n 'cadence': {\n 'cron': '0 9 * * 1', # Every Monday at 9 AM\n 'timezone': 'America/New_York'\n },\n 'behavior': {\n 'type': 'search',\n 'config': {\n 'behavior': 'append',\n 'query': 'new companies to monitor',\n 'count': 10\n }\n }\n})\n\nprint(f'Created monitor: {monitor.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "get": { + "description": "Lists all monitors for the Webset.", + "operationId": "monitors-list", + "parameters": [ + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 200, + "default": 25, + "type": "number" + } + }, + { + "name": "websetId", + "required": false, + "in": "query", + "description": "The id of the Webset to list monitors for", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of monitors", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "description": "The list of monitors" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List Monitors", + "tags": [ + "Monitors" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst monitors = await exa.websets.monitors.list({\n webset_id: 'webset_id'\n});\n\nconsole.log(`Found ${monitors.data.length} monitors`);\nmonitors.data.forEach(monitor => {\n console.log(`- ${monitor.id}: ${monitor.status}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nmonitors = exa.websets.monitors.list(webset_id='webset_id')\n\nprint(f'Found {len(monitors.data)} monitors')\nfor monitor in monitors.data:\n print(f'- {monitor.id}: {monitor.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/monitors/{id}": { + "get": { + "description": "Gets a specific monitor.", + "operationId": "monitors-get", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Monitor", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Monitor details", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get Monitor", + "tags": [ + "Monitors" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst monitor = await exa.websets.monitors.get('monitor_id');\n\nconsole.log(`Monitor: ${monitor.id} - ${monitor.status}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nmonitor = exa.websets.monitors.get('monitor_id')\n\nprint(f'Monitor: {monitor.id} - {monitor.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "patch": { + "description": "Updates a monitor configuration.", + "operationId": "monitors-update", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Monitor", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the monitor." + }, + "metadata": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + } + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ] + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Monitor updated successfully", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Update Monitor", + "tags": [ + "Monitors" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst monitor = await exa.websets.monitors.update('monitor_id', {\n cadence: {\n cron: '0 14 * * *', // Every day at 2 PM\n timezone: 'America/New_York'\n }\n});\n\nconsole.log(`Updated monitor: ${monitor.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nmonitor = exa.websets.monitors.update('monitor_id', params={\n 'cadence': {\n 'cron': '0 14 * * *', # Every day at 2 PM\n 'timezone': 'America/New_York'\n }\n})\n\nprint(f'Updated monitor: {monitor.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "delete": { + "description": "Deletes a monitor.", + "operationId": "monitors-delete", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Monitor", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Monitor deleted successfully", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Delete Monitor", + "tags": [ + "Monitors" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nawait exa.websets.monitors.delete('monitor_id');\n\nconsole.log('Monitor deleted successfully');" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nexa.websets.monitors.delete('monitor_id')\n\nprint('Monitor deleted successfully')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/monitors/{monitor}/runs": { + "get": { + "description": "Lists all runs for the Monitor.", + "operationId": "monitors-runs-list", + "parameters": [ + { + "name": "monitor", + "required": true, + "in": "path", + "description": "The id of the Monitor to list runs for", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of monitor runs", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "description": "The list of monitor runs" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List Monitor Runs", + "tags": [ + "Monitors Runs" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst runs = await exa.websets.monitors.runs.list('monitor_id');\n\nconsole.log(`Found ${runs.data.length} monitor runs`);\nruns.data.forEach(run => {\n console.log(`- ${run.id}: ${run.status}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nruns = exa.websets.monitors.runs.list('monitor_id')\n\nprint(f'Found {len(runs.data)} monitor runs')\nfor run in runs.data:\n print(f'- {run.id}: {run.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/monitors/{monitor}/runs/{id}": { + "get": { + "description": "Gets a specific monitor run.", + "operationId": "monitors-runs-get", + "parameters": [ + { + "name": "monitor", + "required": true, + "in": "path", + "description": "The id of the Monitor to get the run for", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Monitor run details", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get Monitor Run", + "tags": [ + "Monitors Runs" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst run = await exa.websets.monitors.runs.get('monitor_id', 'run_id');\n\nconsole.log(`Monitor run: ${run.id} - ${run.status}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nrun = exa.websets.monitors.runs.get('monitor_id', 'run_id')\n\nprint(f'Monitor run: {run.id} - {run.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/imports": { + "post": { + "description": "Creates a new import to upload your data into Websets. Imports can be used to:\n\n- **Enrich**: Enhance your data with additional information using our AI-powered enrichment engine\n- **Search**: Query your data using Websets' agentic search with natural language filters\n- **Exclude**: Prevent duplicate or already known results from appearing in your searches\n\nOnce the import is created, you can upload your data to the returned `uploadUrl` until `uploadValidUntil` (by default 1 hour).", + "operationId": "imports-create", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "discriminator": { + "propertyName": "format" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "size": { + "type": [ + "number" + ], + "maximum": 50000000, + "description": "The size of the file in bytes. Maximum size is 50 MB." + }, + "count": { + "type": [ + "number" + ], + "description": "The number of records to import" + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv" + ], + "description": "When the import is in CSV format, we expect a column containing the key identifier for the entity - for now URL. If not provided, import will fail to be processed." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ], + "description": "What type of entity the import contains (e.g. People, Companies, etc.), and thus should be attempted to be resolved as." + }, + "csv": { + "type": [ + "object" + ], + "properties": { + "identifier": { + "type": [ + "integer" + ], + "minimum": 0, + "description": "Column containing the key identifier for the entity (e.g. URL, Name, etc.). If not provided, we will try to infer it from the file." + } + }, + "description": "When format is `csv`, these are the specific import parameters." + } + }, + "required": [ + "size", + "count", + "format", + "entity" + ] + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Import created successfully", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + }, + "uploadUrl": { + "type": [ + "string" + ], + "description": "The URL to upload the file to" + }, + "uploadValidUntil": { + "type": [ + "string" + ], + "description": "The date and time until the upload URL is valid. The upload URL will be valid for 1 hour." + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt", + "uploadUrl", + "uploadValidUntil" + ], + "description": "The response to a successful import. Includes the upload URL and the upload valid until date." + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Create an Import", + "tags": [ + "Imports" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst importJob = await exa.websets.imports.create('webset_id', {\n source: {\n type: 'csv',\n url: 'https://example.com/companies.csv'\n }\n});\n\nconsole.log(`Created import: ${importJob.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nimport_job = exa.websets.imports.create('webset_id', params={\n 'source': {\n 'type': 'csv',\n 'url': 'https://example.com/companies.csv'\n }\n})\n\nprint(f'Created import: {import_job.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "get": { + "description": "Lists all imports for the Webset.", + "operationId": "imports-list", + "parameters": [ + { + "name": "cursor", + "required": false, + "in": "query", + "description": "The cursor to paginate through the results", + "schema": { + "minLength": 1, + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "The number of results to return", + "schema": { + "minimum": 1, + "maximum": 200, + "default": 25, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "List of imports", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "description": "The list of imports" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "List Imports", + "tags": [ + "Imports" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst imports = await exa.websets.imports.list({\n webset_id: 'webset_id'\n});\n\nconsole.log(`Found ${imports.data.length} imports`);\nimports.data.forEach(importJob => {\n console.log(`- ${importJob.id}: ${importJob.status}`);\n});" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nimports = exa.websets.imports.list(webset_id='webset_id')\n\nprint(f'Found {len(imports.data)} imports')\nfor import_job in imports.data:\n print(f'- {import_job.id}: {import_job.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + }, + "/v0/imports/{id}": { + "get": { + "description": "Gets a specific import.", + "operationId": "imports-get", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Import", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Import details", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Get Import", + "tags": [ + "Imports" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst importJob = await exa.websets.imports.get('webset_id', 'import_id');\n\nconsole.log(`Import: ${importJob.id} - ${importJob.status}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nimport_job = exa.websets.imports.get('webset_id', 'import_id')\n\nprint(f'Import: {import_job.id} - {import_job.status}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "patch": { + "description": "Updates a import configuration.", + "operationId": "imports-update", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Import", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "metadata": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + } + }, + "title": { + "type": [ + "string" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Import updated successfully", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Update Import", + "tags": [ + "Imports" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst importJob = await exa.websets.imports.update('webset_id', 'import_id', {\n name: 'Updated Import Name'\n});\n\nconsole.log(`Updated import: ${importJob.id}`);" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nimport_job = exa.websets.imports.update('webset_id', 'import_id', params={\n 'name': 'Updated Import Name'\n})\n\nprint(f'Updated import: {import_job.id}')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + }, + "delete": { + "description": "Deletes a import.", + "operationId": "imports-delete", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The id of the Import", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Import deleted successfully", + "content": { + "application/json": { + "schema": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + } + ] + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + } + } + }, + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Unique identifier for the request.", + "example": "req_N6SsgoiaOQOPqsYKKiw5", + "required": true + } + } + } + }, + "summary": "Delete Import", + "tags": [ + "Imports" + ], + "security": [ + { + "api_key": [] + } + ], + "x-codeSamples": [ + { + "lang": "javascript", + "label": "JavaScript", + "source": "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nawait exa.websets.imports.delete('webset_id', 'import_id');\n\nconsole.log('Import deleted successfully');" + }, + { + "lang": "python", + "label": "Python", + "source": "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa('YOUR_EXA_API_KEY')\n\nexa.websets.imports.delete('webset_id', 'import_id')\n\nprint('Import deleted successfully')" + } + ], + "x-moar-original-servers": [ + { + "url": "https://api.exa.ai/websets/", + "description": "Production" + } + ], + "x-moar-primitive-count": 0, + "x-moar-complexity-skipped": false + } + } + }, + "components": { + "securitySchemes": { + "apikey": { + "type": "apiKey", + "name": "x-api-key", + "in": "header", + "description": "API key can be provided either via x-api-key header or Authorization header with Bearer scheme" + }, + "bearer": { + "type": "http", + "scheme": "bearer", + "description": "API key can be provided either via x-api-key header or Authorization header with Bearer scheme" + }, + "api_key": { + "type": "apiKey", + "in": "header", + "name": "x-api-key", + "description": "Your Exa API key" + } + }, + "schemas": { + "AnswerCitation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The temporary ID for the document.", + "example": "https://www.theguardian.com/science/2024/dec/11/spacex-valued-at-350bn-as-company-agrees-to-buy-shares-from-employees" + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL of the search result.", + "example": "https://www.theguardian.com/science/2024/dec/11/spacex-valued-at-350bn-as-company-agrees-to-buy-shares-from-employees" + }, + "title": { + "type": "string", + "description": "The title of the search result.", + "example": "SpaceX valued at $350bn as company agrees to buy shares from ..." + }, + "author": { + "type": "string", + "nullable": true, + "description": "If available, the author of the content.", + "example": "Dan Milmon" + }, + "publishedDate": { + "type": "string", + "nullable": true, + "description": "An estimate of the creation date, from parsing HTML content. Format is YYYY-MM-DD.", + "example": "2023-11-16T01:36:32.547Z" + }, + "text": { + "type": "string", + "description": "The full text content of each source. Only present when includeText is enabled.", + "example": "SpaceX valued at $350bn as company agrees to buy shares from ..." + }, + "image": { + "type": "string", + "format": "uri", + "description": "The URL of the image associated with the search result, if available.", + "example": "https://i.guim.co.uk/img/media/7cfee7e84b24b73c97a079c402642a333ad31e77/0_380_6176_3706/master/6176.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wbmc&enable=upscale&s=71ebb2fbf458c185229d02d380c01530" + }, + "favicon": { + "type": "string", + "format": "uri", + "description": "The URL of the favicon for the search result's domain, if available.", + "example": "https://assets.guim.co.uk/static/frontend/icons/homescreen/apple-touch-icon.svg" + } + } + }, + "AnswerResult": { + "type": "object", + "properties": { + "answer": { + "type": "string", + "description": "The generated answer based on search results.", + "example": "$350 billion." + }, + "citations": { + "type": "array", + "description": "Search results used to generate the answer.", + "items": { + "$ref": "#/components/schemas/AnswerCitation" + } + } + } + }, + "ContentsRequest": { + "type": "object", + "properties": { + "text": { + "oneOf": [ + { + "type": "boolean", + "title": "Simple text retrieval", + "description": "If true, returns full page text with default settings. If false, disables text return." + }, + { + "type": "object", + "title": "Advanced text options", + "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", + "example": 1000 + }, + "includeHtmlTags": { + "type": "boolean", + "default": false, + "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", + "example": false + } + } + } + ] + }, + "highlights": { + "type": "object", + "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", + "properties": { + "numSentences": { + "type": "integer", + "minimum": 1, + "description": "The number of sentences to return for each snippet.", + "example": 1 + }, + "highlightsPerUrl": { + "type": "integer", + "minimum": 1, + "description": "The number of snippets to return for each result.", + "example": 1 + }, + "query": { + "type": "string", + "description": "Custom query to direct the LLM's selection of highlights.", + "example": "Key advancements" + } + } + }, + "summary": { + "type": "object", + "description": "Summary of the webpage", + "properties": { + "query": { + "type": "string", + "description": "Custom query for the LLM-generated summary.", + "example": "Main developments" + }, + "schema": { + "type": "object", + "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", + "example": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Title", + "type": "object", + "properties": { + "Property 1": { + "type": "string", + "description": "Description" + }, + "Property 2": { + "type": "string", + "enum": [ + "option 1", + "option 2", + "option 3" + ], + "description": "Description" + } + }, + "required": [ + "Property 1" + ] + } + } + } + }, + "livecrawl": { + "type": "string", + "enum": [ + "never", + "fallback", + "always", + "preferred" + ], + "description": "Options for livecrawling pages.\n'never': Disable livecrawling (default for neural search).\n'fallback': Livecrawl when cache is empty (default for keyword search).\n'always': Always livecrawl.\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\n", + "example": "always" + }, + "livecrawlTimeout": { + "type": "integer", + "default": 10000, + "description": "The timeout for livecrawling in milliseconds.", + "example": 1000 + }, + "subpages": { + "type": "integer", + "default": 0, + "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", + "example": 1 + }, + "subpageTarget": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", + "example": "sources" + }, + "extras": { + "type": "object", + "description": "Extra parameters to pass.", + "properties": { + "links": { + "type": "integer", + "default": 0, + "description": "Number of URLs to return from each webpage.", + "example": 1 + }, + "imageLinks": { + "type": "integer", + "default": 0, + "description": "Number of images to return for each result.", + "example": 1 + } + } + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + } + } + }, + "CommonRequest": { + "type": "object", + "properties": { + "numResults": { + "type": "integer", + "maximum": 100, + "default": 10, + "minimum": 1, + "description": "Number of results to return (up to thousands of results available for custom plans)", + "example": 10 + }, + "includeDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to include in the search. If specified, results will only come from these domains.", + "example": [ + "arxiv.org", + "paperswithcode.com" + ] + }, + "excludeDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains." + }, + "startCrawlDate": { + "type": "string", + "format": "date-time", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", + "example": "2023-01-01" + }, + "endCrawlDate": { + "type": "string", + "format": "date-time", + "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", + "example": "2023-12-31" + }, + "startPublishedDate": { + "type": "string", + "format": "date-time", + "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", + "example": "2023-01-01" + }, + "endPublishedDate": { + "type": "string", + "format": "date-time", + "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", + "example": "2023-12-31" + }, + "includeText": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", + "example": [ + "large language model" + ] + }, + "excludeText": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", + "example": [ + "course" + ] + }, + "context": { + "oneOf": [ + { + "type": "boolean", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "example": true + }, + { + "type": "object", + "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", + "properties": { + "maxCharacters": { + "type": "integer", + "description": "Maximum character limit.", + "example": 10000 + } + } + } + ] + }, + "contents": { + "$ref": "#/components/schemas/ContentsRequest" + } + } + }, + "Result": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The title of the search result.", + "example": "A Comprehensive Overview of Large Language Models" + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL of the search result.", + "example": "https://arxiv.org/pdf/2307.06435.pdf" + }, + "publishedDate": { + "type": "string", + "nullable": true, + "description": "An estimate of the creation date, from parsing HTML content. Format is YYYY-MM-DD.", + "example": "2023-11-16T01:36:32.547Z" + }, + "author": { + "type": "string", + "nullable": true, + "description": "If available, the author of the content.", + "example": "Humza Naveed, University of Engineering and Technology (UET), Lahore, Pakistan" + }, + "score": { + "type": "number", + "nullable": true, + "description": "A number from 0 to 1 representing similarity between the query/url and the result.", + "example": 0.4600165784358978 + }, + "id": { + "type": "string", + "description": "The temporary ID for the document. Useful for /contents endpoint.", + "example": "https://arxiv.org/abs/2307.06435" + }, + "image": { + "type": "string", + "format": "uri", + "description": "The URL of an image associated with the search result, if available.", + "example": "https://arxiv.org/pdf/2307.06435.pdf/page_1.png" + }, + "favicon": { + "type": "string", + "format": "uri", + "description": "The URL of the favicon for the search result's domain.", + "example": "https://arxiv.org/favicon.ico" + } + } + }, + "ResultWithContent": { + "allOf": [ + { + "$ref": "#/components/schemas/Result" + }, + { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "The full content text of the search result.", + "example": "Abstract Large Language Models (LLMs) have recently demonstrated remarkable capabilities..." + }, + "highlights": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of highlights extracted from the search result content.", + "example": [ + "Such requirements have limited their adoption..." + ] + }, + "highlightScores": { + "type": "array", + "items": { + "type": "number", + "format": "float" + }, + "description": "Array of cosine similarity scores for each highlighted", + "example": [ + 0.4600165784358978 + ] + }, + "summary": { + "type": "string", + "description": "Summary of the webpage", + "example": "This overview paper on Large Language Models (LLMs) highlights key developments..." + }, + "subpages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResultWithContent" + }, + "description": "Array of subpages for the search result.", + "example": [ + { + "id": "https://arxiv.org/abs/2303.17580", + "url": "https://arxiv.org/pdf/2303.17580.pdf", + "title": "HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face", + "author": "Yongliang Shen, Microsoft Research Asia, Kaitao Song, Microsoft Research Asia, Xu Tan, Microsoft Research Asia, Dongsheng Li, Microsoft Research Asia, Weiming Lu, Microsoft Research Asia, Yueting Zhuang, Microsoft Research Asia, yzhuang@zju.edu.cn, Zhejiang University, Microsoft Research Asia, Microsoft Research, Microsoft Research Asia", + "publishedDate": "2023-11-16T01:36:20.486Z", + "text": "HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Date Published: 2023-05-25 Authors: Yongliang Shen, Microsoft Research Asia Kaitao Song, Microsoft Research Asia Xu Tan, Microsoft Research Asia Dongsheng Li, Microsoft Research Asia Weiming Lu, Microsoft Research Asia Yueting Zhuang, Microsoft Research Asia, yzhuang@zju.edu.cn Zhejiang University, Microsoft Research Asia Microsoft Research, Microsoft Research Asia Abstract Solving complicated AI tasks with different domains and modalities is a key step toward artificial general intelligence. While there are abundant AI models available for different domains and modalities, they cannot handle complicated AI tasks. Considering large language models (LLMs) have exhibited exceptional ability in language understanding, generation, interaction, and reasoning, we advocate that LLMs could act as a controller to manage existing AI models to solve complicated AI tasks and language could be a generic interface to empower t", + "summary": "HuggingGPT is a framework using ChatGPT as a central controller to orchestrate various AI models from Hugging Face to solve complex tasks. ChatGPT plans the task, selects appropriate models based on their descriptions, executes subtasks, and summarizes the results. This approach addresses limitations of LLMs by allowing them to handle multimodal data (vision, speech) and coordinate multiple models for complex tasks, paving the way for more advanced AI systems.", + "highlights": [ + "2) Recently, some researchers started to investigate the integration of using tools or models in LLMs ." + ], + "highlightScores": [ + 0.32679107785224915 + ] + } + ] + }, + "extras": { + "type": "object", + "description": "Results from extras.", + "properties": { + "links": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of links from the search result.", + "example": [] + } + } + } + } + } + ] + }, + "CostDollars": { + "type": "object", + "properties": { + "total": { + "type": "number", + "format": "float", + "description": "Total dollar cost for your request", + "example": 0.005 + }, + "breakDown": { + "type": "array", + "description": "Breakdown of costs by operation type", + "items": { + "type": "object", + "properties": { + "search": { + "type": "number", + "format": "float", + "description": "Cost of your search operations", + "example": 0.005 + }, + "contents": { + "type": "number", + "format": "float", + "description": "Cost of your content operations", + "example": 0 + }, + "breakdown": { + "type": "object", + "properties": { + "keywordSearch": { + "type": "number", + "format": "float", + "description": "Cost of your keyword search operations", + "example": 0 + }, + "neuralSearch": { + "type": "number", + "format": "float", + "description": "Cost of your neural search operations", + "example": 0.005 + }, + "contentText": { + "type": "number", + "format": "float", + "description": "Cost of your text content retrieval", + "example": 0 + }, + "contentHighlight": { + "type": "number", + "format": "float", + "description": "Cost of your highlight generation", + "example": 0 + }, + "contentSummary": { + "type": "number", + "format": "float", + "description": "Cost of your summary generation", + "example": 0 + } + } + } + } + } + }, + "perRequestPrices": { + "type": "object", + "description": "Standard price per request for different operations", + "properties": { + "neuralSearch_1_25_results": { + "type": "number", + "format": "float", + "description": "Standard price for neural search with 1-25 results", + "example": 0.005 + }, + "neuralSearch_26_100_results": { + "type": "number", + "format": "float", + "description": "Standard price for neural search with 26-100 results", + "example": 0.025 + }, + "neuralSearch_100_plus_results": { + "type": "number", + "format": "float", + "description": "Standard price for neural search with 100+ results", + "example": 1 + }, + "keywordSearch_1_100_results": { + "type": "number", + "format": "float", + "description": "Standard price for keyword search with 1-100 results", + "example": 0.0025 + }, + "keywordSearch_100_plus_results": { + "type": "number", + "format": "float", + "description": "Standard price for keyword search with 100+ results", + "example": 3 + } + } + }, + "perPagePrices": { + "type": "object", + "description": "Standard price per page for different content operations", + "properties": { + "contentText": { + "type": "number", + "format": "float", + "description": "Standard price per page for text content", + "example": 0.001 + }, + "contentHighlight": { + "type": "number", + "format": "float", + "description": "Standard price per page for highlights", + "example": 0.001 + }, + "contentSummary": { + "type": "number", + "format": "float", + "description": "Standard price per page for summaries", + "example": 0.001 + } + } + } + } + }, + "ListResearchResponseDto": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "discriminator": { + "propertyName": "status" + }, + "examples": [ + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "running" + }, + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "completed", + "output": "Melophorus bagoti" + } + ], + "$ref": "#/components/schemas/ResearchDtoClass" + }, + "description": "The list of research requests" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": [ + "string", + "null" + ], + "description": "The cursor to paginate through the next set of results" + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "ResearchCreateRequestDtoClass": { + "type": [ + "object" + ], + "properties": { + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ] + }, + "instructions": { + "type": [ + "string" + ], + "maxLength": 4096, + "description": "Instructions for what research should be conducted" + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "instructions" + ], + "examples": [ + { + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?" + } + ] + }, + "ResearchDtoClass": { + "discriminator": { + "propertyName": "status" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "running" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "$ref": "#/components/schemas/ResearchEventDtoClass" + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "$ref": "#/components/schemas/ResearchEventDtoClass" + } + }, + "output": { + "type": [ + "object" + ], + "properties": { + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "content" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "output", + "costDollars" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "canceled" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "$ref": "#/components/schemas/ResearchEventDtoClass" + } + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "researchId": { + "type": [ + "string" + ], + "description": "The unique identifier for the research request" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "model": { + "default": "exa-research", + "type": [ + "string" + ], + "enum": [ + "exa-research", + "exa-research-pro" + ], + "description": "The model used for the research request" + }, + "instructions": { + "type": [ + "string" + ], + "description": "The instructions given to this research request" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "events": { + "type": [ + "array" + ], + "items": { + "$ref": "#/components/schemas/ResearchEventDtoClass" + } + }, + "error": { + "type": [ + "string" + ], + "description": "A message indicating why the request failed" + } + }, + "required": [ + "researchId", + "createdAt", + "instructions", + "status", + "error" + ] + } + ], + "examples": [ + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "running" + }, + { + "researchId": "01jszdfs0052sg4jc552sg4jc5", + "model": "exa-research", + "instructions": "What species of ant are similar to honeypot ants?", + "status": "completed", + "output": "Melophorus bagoti" + } + ] + }, + "ResearchOperationDtoClass": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "think" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "type", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "search" + ] + }, + "searchType": { + "type": [ + "string" + ], + "enum": [ + "neural", + "keyword", + "auto", + "fast" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "query": { + "type": [ + "string" + ] + }, + "results": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + } + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "searchType", + "query", + "results", + "pageTokens" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "type": { + "type": [ + "string" + ], + "enum": [ + "crawl" + ] + }, + "goal": { + "type": [ + "string" + ] + }, + "result": { + "type": [ + "object" + ], + "properties": { + "url": { + "type": [ + "string" + ] + } + }, + "required": [ + "url" + ] + }, + "pageTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "type", + "result", + "pageTokens" + ] + } + ] + }, + "ResearchEventDtoClass": { + "oneOf": [ + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-definition" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "outputSchema": { + "type": [ + "object" + ], + "additionalProperties": {} + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "research-output" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "costDollars": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ] + }, + "numSearches": { + "type": [ + "number" + ] + }, + "numPages": { + "type": [ + "number" + ] + }, + "reasoningTokens": { + "type": [ + "number" + ] + } + }, + "required": [ + "total", + "numSearches", + "numPages", + "reasoningTokens" + ] + }, + "content": { + "type": [ + "string" + ] + }, + "parsed": { + "type": [ + "object" + ], + "additionalProperties": {} + } + }, + "required": [ + "outputType", + "costDollars", + "content" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "failed" + ] + }, + "error": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "error" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "$ref": "#/components/schemas/ResearchOperationDtoClass" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "plan-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "output": { + "discriminator": { + "propertyName": "outputType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "tasks" + ] + }, + "reasoning": { + "type": [ + "string" + ] + }, + "tasksInstructions": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "outputType", + "reasoning", + "tasksInstructions" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "stop" + ] + }, + "reasoning": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "reasoning" + ] + } + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "output", + "createdAt", + "researchId" + ] + } + ] + }, + { + "discriminator": { + "propertyName": "eventType" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-definition" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "instructions": { + "type": [ + "string" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "instructions", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-operation" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "operationId": { + "type": [ + "string" + ] + }, + "data": { + "discriminator": { + "propertyName": "type" + }, + "$ref": "#/components/schemas/ResearchOperationDtoClass" + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "operationId", + "data", + "createdAt", + "researchId" + ] + }, + { + "type": [ + "object" + ], + "properties": { + "eventType": { + "type": [ + "string" + ], + "enum": [ + "task-output" + ] + }, + "planId": { + "type": [ + "string" + ] + }, + "taskId": { + "type": [ + "string" + ] + }, + "output": { + "type": [ + "object" + ], + "properties": { + "outputType": { + "type": [ + "string" + ], + "enum": [ + "completed" + ] + }, + "content": { + "type": [ + "string" + ] + } + }, + "required": [ + "outputType", + "content" + ] + }, + "createdAt": { + "type": [ + "number" + ], + "description": "Milliseconds since epoch time" + }, + "researchId": { + "type": [ + "string" + ] + } + }, + "required": [ + "eventType", + "planId", + "taskId", + "output", + "createdAt", + "researchId" + ] + } + ] + } + ] + }, + "CompanyEntity": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + } + }, + "required": [ + "type" + ], + "title": "Company" + }, + "PersonEntity": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + } + }, + "required": [ + "type" + ], + "title": "Person" + }, + "ArticleEntity": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + } + }, + "required": [ + "type" + ], + "title": "Article" + }, + "ResearchPaperEntity": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + } + }, + "required": [ + "type" + ], + "title": "Research Paper" + }, + "CustomEntity": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 200 + } + }, + "required": [ + "type", + "description" + ], + "title": "Custom" + }, + "Entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CompanyEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/PersonEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/ArticleEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/ResearchPaperEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CustomEntity" + } + ] + }, + "CreateCriterionParameters": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000, + "description": "The description of the criterion" + } + }, + "required": [ + "description" + ] + }, + "CreateEnrichmentParameters": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Provide a description of the enrichment task you want to perform to each Webset Item." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment response.\n\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "minItems": 1, + "maxItems": 150, + "description": "When the format is options, the different options for the enrichment agent to choose from." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "description" + ] + }, + "CreateWebsetParameters": { + "type": [ + "object" + ], + "properties": { + "search": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Natural language search query describing what you are looking for.\n\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\n\nAny URLs provided will be crawled and used as additional context for the search.", + "examples": [ + "Marketing agencies based in the US, that focus on consumer products.", + "AI startups in Europe that raised Series A funding in 2024", + "SaaS companies with 50-200 employees in the fintech space" + ] + }, + "count": { + "default": 10, + "type": [ + "number" + ], + "minimum": 1, + "description": "Number of Items the Webset will attempt to find.\n\nThe actual number of Items found may be less than this number depending on the search complexity." + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "description": "Entity the Webset will return results for.\n\nIt is not required to provide it, we automatically detect the entity from all the information provided in the query. Only use this when you need more fine control." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CreateCriterionParameters", + "title": "CreateCriterionParameters" + }, + "minItems": 1, + "maxItems": 5, + "description": "Criteria every item is evaluated against.\n\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control." + }, + "recall": { + "type": [ + "boolean" + ], + "description": "Whether to provide an estimate of how many total relevant results could exist for this search.\nResult of the analysis will be available in the `recall` field within the search request." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to exclude." + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to search." + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Limit the search to specific sources (existing imports or websets). Any results found within these sources matching the search criteria will be included in the Webset." + } + }, + "required": [ + "query" + ], + "description": "Create initial search for the Webset." + }, + "import": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to search." + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Import data from existing Websets and Imports into this Webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CreateEnrichmentParameters", + "title": "CreateEnrichmentParameters" + }, + "description": "Add enrichments to extract additional data from found items.\n\nEnrichments automatically search for and extract specific information (like contact details, funding data, employee counts, etc.) from each item added to your Webset." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to exclude." + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Global exclusion sources (existing imports or websets) that apply to all operations within this Webset. Any results found within these sources will be omitted across all search and import operations." + }, + "externalId": { + "type": [ + "string" + ], + "maxLength": 300, + "description": "The external identifier for the webset.\n\nYou can use this to reference the Webset by your own internal identifiers." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "examples": [ + { + "search": { + "query": "Marketing agencies based in the US, that focus on consumer products.", + "count": 10 + } + } + ] + }, + "WebsetSearch": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the search" + }, + "object": { + "type": "string", + "const": "webset_search", + "default": "webset_search" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "pending", + "running", + "completed", + "canceled" + ], + "description": "The status of the search", + "title": "WebsetSearchStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this search belongs to" + }, + "query": { + "description": "The query used to create the search.", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000 + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "description": "The entity the search will return results for.\n\nWhen no entity is provided during creation, we will automatically select the best entity based on the query.", + "nullable": true + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "description": "The description of the criterion", + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 1000 + }, + "successRate": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "Value between 0 and 100 representing the percentage of results that meet the criterion." + } + }, + "required": [ + "description", + "successRate" + ] + }, + "description": "The criteria the search will use to evaluate the results. If not provided, we will automatically generate them for you." + }, + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "The number of results the search will attempt to find. The actual number of results may be less than this number depending on the search complexity." + }, + "behavior": { + "default": "override", + "type": [ + "string" + ], + "$ref": "#/components/schemas/WebsetSearchBehavior", + "description": "The behavior of the search when it is added to a Webset.\n\n- `override`: the search will replace the existing Items found in the Webset and evaluate them against the new criteria. Any Items that don't match the new criteria will be discarded.\n- `append`: the search will add the new Items found to the existing Webset. Any Items that don't match the new criteria will be discarded." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) used to omit certain results to be found during the search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ] + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "The scope of the search. By default, there is no scope - thus searching the web.\n\nIf provided during creation, the search will only be performed on the sources provided." + }, + "progress": { + "type": [ + "object" + ], + "properties": { + "found": { + "type": [ + "number" + ], + "description": "The number of results found so far" + }, + "analyzed": { + "type": [ + "number" + ], + "description": "The number of results analyzed so far" + }, + "completion": { + "type": [ + "number" + ], + "minimum": 0, + "maximum": 100, + "description": "The completion percentage of the search" + }, + "timeLeft": { + "type": "number", + "description": "The estimated time remaining in seconds, null if unknown", + "nullable": true + } + }, + "required": [ + "found", + "analyzed", + "completion", + "timeLeft" + ], + "description": "The progress of the search" + }, + "recall": { + "type": "object", + "properties": { + "expected": { + "type": [ + "object" + ], + "properties": { + "total": { + "type": [ + "number" + ], + "description": "The estimated total number of potential matches" + }, + "confidence": { + "type": [ + "string" + ], + "enum": [ + "high", + "medium", + "low" + ], + "description": "The confidence in the estimate" + }, + "bounds": { + "type": [ + "object" + ], + "properties": { + "min": { + "type": [ + "number" + ], + "description": "The minimum estimated total number of potential matches" + }, + "max": { + "type": [ + "number" + ], + "description": "The maximum estimated total number of potential matches" + } + }, + "required": [ + "min", + "max" + ] + } + }, + "required": [ + "total", + "confidence", + "bounds" + ] + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the estimate" + } + }, + "required": [ + "expected", + "reasoning" + ], + "description": "Recall metrics for the search, null if not yet computed or requested.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "The date and time the search was canceled", + "nullable": true + }, + "canceledReason": { + "type": "string", + "$ref": "#/components/schemas/WebsetSearchCanceledReason", + "description": "The reason the search was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the search was updated" + } + }, + "required": [ + "id", + "object", + "websetId", + "status", + "query", + "entity", + "criteria", + "count", + "exclude", + "scope", + "progress", + "recall", + "canceledAt", + "canceledReason", + "createdAt", + "updatedAt" + ] + }, + "Import": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "description": "The type of entity the import contains.", + "nullable": true + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt" + ] + }, + "WebsetEnrichment": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the enrichment" + }, + "object": { + "type": "string", + "const": "webset_enrichment", + "default": "webset_enrichment" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "canceled", + "completed" + ], + "description": "The status of the enrichment", + "title": "WebsetEnrichmentStatus" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this enrichment belongs to." + }, + "title": { + "type": "string", + "description": "The title of the enrichment.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "description": { + "type": [ + "string" + ], + "description": "The description of the enrichment task provided during the creation of the enrichment." + }, + "format": { + "type": "string", + "$ref": "#/components/schemas/WebsetEnrichmentFormat", + "description": "The format of the enrichment response.", + "nullable": true + }, + "options": { + "type": "array", + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "description": "When the format is options, the different options for the enrichment agent to choose from.", + "title": "WebsetEnrichmentOptions", + "nullable": true + }, + "instructions": { + "type": "string", + "description": "The instructions for the enrichment Agent.\n\nThis will be automatically generated based on the description and format.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the enrichment", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the enrichment was updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "title", + "description", + "format", + "options", + "instructions", + "createdAt", + "updatedAt" + ] + }, + "MonitorRun": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor Run" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor_run" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "created", + "running", + "completed", + "canceled", + "failed" + ], + "description": "The status of the Monitor Run" + }, + "monitorId": { + "type": [ + "string" + ], + "description": "The monitor that the run is associated with" + }, + "type": { + "type": [ + "string" + ], + "enum": [ + "search", + "refresh" + ], + "description": "The type of the Monitor Run" + }, + "completedAt": { + "type": "string", + "format": "date-time", + "description": "When the run completed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the run failed", + "nullable": true + }, + "failedReason": { + "type": "string", + "description": "The reason the run failed", + "nullable": true + }, + "canceledAt": { + "type": "string", + "format": "date-time", + "description": "When the run was canceled", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the run was last updated" + } + }, + "required": [ + "id", + "object", + "monitorId", + "status", + "type", + "completedAt", + "failedAt", + "failedReason", + "canceledAt", + "createdAt", + "updatedAt" + ] + }, + "Monitor": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Monitor" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "monitor" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the Monitor" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset the Monitor belongs to" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "title": "Entity", + "description": "The entity to search for. By default, the entity from the last search/import is used." + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "lastRun": { + "type": "object", + "$ref": "#/components/schemas/MonitorRun", + "title": "MonitorRun", + "description": "The last run of the monitor", + "nullable": true + }, + "nextRunAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when the next run will occur in", + "nullable": true + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the monitor was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "websetId", + "cadence", + "behavior", + "lastRun", + "nextRunAt", + "metadata", + "createdAt", + "updatedAt" + ] + }, + "Webset": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webset" + }, + "object": { + "type": "string", + "const": "webset", + "default": "webset" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "idle", + "pending", + "running", + "paused" + ], + "description": "The status of the webset", + "title": "WebsetStatus" + }, + "externalId": { + "type": "string", + "description": "The external identifier for the webset", + "nullable": true + }, + "title": { + "type": "string", + "description": "The title of the webset", + "nullable": true + }, + "searches": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetSearch" + }, + "description": "The searches that have been performed on the webset." + }, + "imports": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Import" + }, + "description": "Imports that have been performed on the webset." + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetEnrichment" + }, + "description": "The Enrichments to apply to the Webset Items." + }, + "monitors": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Monitor" + }, + "description": "The Monitors for the Webset." + }, + "streams": { + "type": [ + "array" + ], + "items": {}, + "description": "The Streams for the Webset." + }, + "metadata": { + "default": {}, + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webset was updated" + } + }, + "required": [ + "id", + "object", + "status", + "externalId", + "title", + "searches", + "imports", + "enrichments", + "monitors", + "streams", + "createdAt", + "updatedAt" + ] + }, + "WebsetItemPersonProperties": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "person", + "default": "person" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the person profile" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the person" + }, + "person": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the person" + }, + "location": { + "type": "string", + "description": "The location of the person", + "nullable": true + }, + "position": { + "type": "string", + "description": "The current work position of the person", + "nullable": true + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The location the person is working at the company", + "nullable": true + } + }, + "required": [ + "name", + "location" + ], + "title": "WebsetItemPersonCompanyPropertiesFields", + "nullable": true + }, + "pictureUrl": { + "type": "string", + "format": "uri", + "description": "The image URL of the person", + "nullable": true + } + }, + "required": [ + "name", + "location", + "position", + "company", + "pictureUrl" + ], + "title": "WebsetItemPersonPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "person" + ] + }, + "WebsetItemCompanyProperties": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "company", + "default": "company" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the company website" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the company" + }, + "content": { + "type": "string", + "description": "The text content of the company website", + "nullable": true + }, + "company": { + "type": [ + "object" + ], + "properties": { + "name": { + "type": [ + "string" + ], + "description": "The name of the company" + }, + "location": { + "type": "string", + "description": "The main location of the company", + "nullable": true + }, + "employees": { + "type": "number", + "description": "The number of employees of the company", + "nullable": true + }, + "industry": { + "type": "string", + "description": "The industry of the company", + "nullable": true + }, + "about": { + "type": "string", + "description": "A short description of the company", + "nullable": true + }, + "logoUrl": { + "type": "string", + "format": "uri", + "description": "The logo URL of the company", + "nullable": true + } + }, + "required": [ + "name", + "location", + "employees", + "industry", + "about", + "logoUrl" + ], + "title": "WebsetItemCompanyPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "company" + ] + }, + "WebsetItemArticleProperties": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "article", + "default": "article" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the article" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the article" + }, + "content": { + "type": "string", + "description": "The text content for the article", + "nullable": true + }, + "article": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the article", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the article", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the article was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemArticlePropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "article" + ] + }, + "WebsetItemResearchPaperProperties": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "research_paper", + "default": "research_paper" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the research paper" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the relevance of the research paper" + }, + "content": { + "type": "string", + "description": "The text content of the research paper", + "nullable": true + }, + "researchPaper": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the research paper", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the research paper", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the research paper was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemResearchPaperPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "researchPaper" + ] + }, + "WebsetItemCustomProperties": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "custom", + "default": "custom" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the Item" + }, + "description": { + "type": [ + "string" + ], + "description": "Short description of the Item" + }, + "content": { + "type": "string", + "description": "The text content of the Item", + "nullable": true + }, + "custom": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the website", + "nullable": true + }, + "author": { + "type": "string", + "description": "The author(s) of the website", + "nullable": true + }, + "publishedAt": { + "type": "string", + "description": "The date and time the website was published", + "nullable": true + } + }, + "required": [ + "title", + "author", + "publishedAt" + ], + "title": "WebsetItemCustomPropertiesFields" + } + }, + "required": [ + "type", + "url", + "description", + "content", + "custom" + ] + }, + "WebsetItemEvaluation": { + "type": [ + "object" + ], + "properties": { + "criterion": { + "type": [ + "string" + ], + "description": "The description of the criterion" + }, + "reasoning": { + "type": [ + "string" + ], + "description": "The reasoning for the result of the evaluation" + }, + "satisfied": { + "type": [ + "string" + ], + "enum": [ + "yes", + "no", + "unclear" + ], + "description": "The satisfaction of the criterion" + }, + "references": { + "default": [], + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + } + }, + "required": [ + "criterion", + "reasoning", + "satisfied" + ] + }, + "EnrichmentResult": { + "type": [ + "object" + ], + "properties": { + "object": { + "type": "string", + "const": "enrichment_result", + "default": "enrichment_result" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "completed", + "canceled" + ], + "description": "The status of the enrichment result." + }, + "format": { + "type": [ + "string" + ], + "$ref": "#/components/schemas/WebsetEnrichmentFormat" + }, + "result": { + "type": "array", + "items": { + "type": [ + "string" + ] + }, + "description": "The result of the enrichment.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "The reasoning for the result when an Agent is used.", + "nullable": true + }, + "references": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "title": { + "type": "string", + "description": "The title of the reference", + "nullable": true + }, + "snippet": { + "type": "string", + "description": "The relevant snippet of the reference content", + "nullable": true + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL of the reference" + } + }, + "required": [ + "title", + "snippet", + "url" + ] + }, + "description": "The references used to generate the result." + }, + "enrichmentId": { + "type": [ + "string" + ], + "description": "The id of the Enrichment that generated the result" + } + }, + "required": [ + "object", + "status", + "format", + "result", + "reasoning", + "references", + "enrichmentId" + ] + }, + "WebsetItem": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset Item" + }, + "object": { + "type": "string", + "const": "webset_item", + "default": "webset_item" + }, + "source": { + "type": [ + "string" + ], + "enum": [ + "search", + "import" + ], + "description": "The source of the Item" + }, + "sourceId": { + "type": [ + "string" + ], + "description": "The unique identifier for the source" + }, + "websetId": { + "type": [ + "string" + ], + "description": "The unique identifier for the Webset this Item belongs to." + }, + "properties": { + "oneOf": [ + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItemPersonProperties", + "title": "Person" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItemCompanyProperties", + "title": "Company" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItemArticleProperties", + "title": "Article" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItemResearchPaperProperties", + "title": "Research Paper" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItemCustomProperties", + "title": "Custom" + } + ], + "description": "The properties of the Item" + }, + "evaluations": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItemEvaluation" + }, + "description": "The criteria evaluations of the item" + }, + "enrichments": { + "type": "array", + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/EnrichmentResult" + }, + "description": "The enrichments results of the Webset item", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the item was last updated" + } + }, + "required": [ + "id", + "object", + "source", + "sourceId", + "websetId", + "properties", + "evaluations", + "enrichments", + "createdAt", + "updatedAt" + ] + }, + "GetWebsetResponse": { + "allOf": [ + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webset" + }, + { + "type": [ + "object" + ], + "properties": { + "items": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItem" + }, + "description": "When expand query parameter contains `items`, this will contain the items in the webset" + } + } + } + ] + }, + "UpdateWebsetRequest": { + "type": [ + "object" + ], + "properties": { + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": "object", + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + }, + "nullable": true + } + } + }, + "ListWebsetsResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webset" + }, + "description": "The list of websets" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "PreviewWebsetParameters": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Natural language search query describing what you are looking for.\n\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.", + "examples": [ + "Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city", + "AI startups in Europe that raised Series A funding in 2024", + "SaaS companies with 50-200 employees in the fintech space" + ] + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "description": "Entity used to inform the decomposition.\n\nIt is not required to provide it, we automatically detect the entity from all the information provided in the query. Only use this when you need more fine control." + } + }, + "required": [ + "query" + ] + }, + "PreviewWebsetResponse": { + "type": [ + "object" + ], + "properties": { + "search": { + "type": [ + "object" + ], + "properties": { + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CompanyEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/PersonEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/ArticleEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/ResearchPaperEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CustomEntity" + } + ], + "description": "Detected entity from the query." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ] + } + }, + "required": [ + "description" + ] + }, + "description": "Detected criteria from the query." + } + }, + "required": [ + "entity", + "criteria" + ] + }, + "enrichments": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "description": "Description of the enrichment." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "Label of the option." + } + }, + "required": [ + "label" + ] + }, + "description": "When format is options, the options detected from the query." + } + }, + "required": [ + "description", + "format" + ] + }, + "description": "Detected enrichments from the query." + } + }, + "required": [ + "search", + "enrichments" + ] + }, + "ListWebsetItemResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItem" + }, + "description": "The list of webset items" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more Items to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of Items", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "UpdateEnrichmentParameters": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Provide a description of the enrichment task you want to perform to each Webset Item." + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ], + "description": "Format of the enrichment response.\n\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here." + }, + "options": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "label": { + "type": [ + "string" + ], + "description": "The label of the option" + } + }, + "required": [ + "label" + ] + }, + "minItems": 1, + "maxItems": 150, + "description": "When the format is options, the different options for the enrichment agent to choose from." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": "object", + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + }, + "nullable": true + } + } + }, + "CreateWebhookParameters": { + "type": [ + "object" + ], + "properties": { + "events": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ], + "$ref": "#/components/schemas/EventType" + }, + "minItems": 1, + "maxItems": 19, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "events", + "url" + ] + }, + "Webhook": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "object": { + "type": "string", + "const": "webhook", + "default": "webhook" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "active", + "inactive" + ], + "description": "The status of the webhook", + "title": "WebhookStatus" + }, + "events": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ], + "$ref": "#/components/schemas/EventType" + }, + "minItems": 1, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "secret": { + "type": "string", + "description": "The secret to verify the webhook signature. Only returned on Webhook creation.", + "nullable": true + }, + "metadata": { + "default": {}, + "description": "The metadata of the webhook", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook was last updated" + } + }, + "required": [ + "id", + "object", + "status", + "events", + "url", + "secret", + "createdAt", + "updatedAt" + ] + }, + "UpdateWebhookParameters": { + "type": [ + "object" + ], + "properties": { + "events": { + "type": [ + "array" + ], + "items": { + "type": [ + "string" + ], + "$ref": "#/components/schemas/EventType" + }, + "minItems": 1, + "maxItems": 19, + "description": "The events to trigger the webhook" + }, + "url": { + "type": [ + "string" + ], + "format": "uri", + "description": "The URL to send the webhook to" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + } + }, + "ListWebhooksResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webhook" + }, + "description": "The list of webhooks" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "WebhookAttempt": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook attempt" + }, + "object": { + "type": "string", + "const": "webhook_attempt", + "default": "webhook_attempt" + }, + "eventId": { + "type": [ + "string" + ], + "description": "The unique identifier for the event" + }, + "eventType": { + "type": [ + "string" + ], + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ], + "description": "The type of event" + }, + "webhookId": { + "type": [ + "string" + ], + "description": "The unique identifier for the webhook" + }, + "url": { + "type": [ + "string" + ], + "description": "The URL that was used during the attempt" + }, + "successful": { + "description": "Whether the attempt was successful", + "type": [ + "boolean" + ] + }, + "responseHeaders": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + }, + "description": "The headers of the response" + }, + "responseBody": { + "type": "string", + "description": "The body of the response", + "nullable": true + }, + "responseStatusCode": { + "type": [ + "number" + ], + "description": "The status code of the response" + }, + "attempt": { + "type": [ + "number" + ], + "description": "The attempt number of the webhook" + }, + "attemptedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the webhook attempt was made" + } + }, + "required": [ + "id", + "object", + "eventId", + "eventType", + "webhookId", + "url", + "successful", + "responseHeaders", + "responseBody", + "responseStatusCode", + "attempt", + "attemptedAt" + ] + }, + "ListWebhookAttemptsResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebhookAttempt" + }, + "description": "The list of webhook attempts" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "Event": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.created", + "default": "webset.created" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webset" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.deleted", + "default": "webset.deleted" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webset" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetDeletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.idle", + "default": "webset.idle" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webset" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetIdleEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.paused", + "default": "webset.paused" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Webset" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetPausedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.item.created", + "default": "webset.item.created" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItem" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetItemCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.item.enriched", + "default": "webset.item.enriched" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetItem" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetItemEnrichedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.created", + "default": "webset.search.created" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetSearch" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.updated", + "default": "webset.search.updated" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetSearch" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchUpdatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.canceled", + "default": "webset.search.canceled" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetSearch" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCanceledEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "webset.search.completed", + "default": "webset.search.completed" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/WebsetSearch" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "WebsetSearchCompletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "import.created", + "default": "import.created" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Import" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "ImportCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "import.completed", + "default": "import.completed" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Import" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "ImportCompletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.created", + "default": "monitor.created" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Monitor" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.updated", + "default": "monitor.updated" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Monitor" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorUpdatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.deleted", + "default": "monitor.deleted" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Monitor" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorDeletedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.run.created", + "default": "monitor.run.created" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/MonitorRun" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorRunCreatedEvent" + }, + { + "type": [ + "object" + ], + "properties": { + "id": { + "description": "The unique identifier for the event", + "type": [ + "string" + ] + }, + "object": { + "type": "string", + "const": "event", + "default": "event" + }, + "type": { + "type": "string", + "const": "monitor.run.completed", + "default": "monitor.run.completed" + }, + "data": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/MonitorRun" + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "The date and time the event was created" + } + }, + "required": [ + "id", + "object", + "type", + "data", + "createdAt" + ], + "title": "MonitorRunCompletedEvent" + } + ], + "title": "Event" + }, + "ListEventsResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "discriminator": { + "propertyName": "type" + }, + "$ref": "#/components/schemas/Event" + }, + "description": "The list of events" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "CreateWebsetSearchParameters": { + "type": [ + "object" + ], + "properties": { + "count": { + "type": [ + "number" + ], + "minimum": 1, + "description": "Number of Items the Search will attempt to find.\n\nThe actual number of Items found may be less than this number depending on the query complexity." + }, + "query": { + "type": [ + "string" + ], + "minLength": 1, + "maxLength": 5000, + "description": "Natural language search query describing what you are looking for.\n\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\n\nAny URLs provided will be crawled and used as additional context for the search.", + "examples": [ + "Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city", + "AI startups in Europe that raised Series A funding in 2024", + "SaaS companies with 50-200 employees in the fintech space" + ] + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "description": "Entity the search will return results for.\n\nIt is not required to provide it, we automatically detect the entity from all the information provided in the query. Only use this when you need more fine control." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CreateCriterionParameters", + "title": "CreateCriterionParameters" + }, + "minItems": 1, + "maxItems": 5, + "description": "Criteria every item is evaluated against.\n\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control." + }, + "exclude": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "description": "The ID of the source to exclude.", + "type": [ + "string" + ], + "minLength": 1 + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search." + }, + "scope": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "source": { + "type": [ + "string" + ], + "enum": [ + "import", + "webset" + ] + }, + "id": { + "type": [ + "string" + ], + "minLength": 1, + "description": "The ID of the source to search." + }, + "relationship": { + "type": [ + "object" + ], + "properties": { + "definition": { + "type": [ + "string" + ], + "description": "What the relationship of the entities you hope to find is relative to the entities contained in the provided source." + }, + "limit": { + "type": [ + "number" + ], + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "definition", + "limit" + ] + } + }, + "required": [ + "source", + "id" + ] + }, + "description": "Limit the search to specific sources (existing imports). Any results found within these sources matching the search criteria will be included in the Webset." + }, + "recall": { + "type": [ + "boolean" + ], + "description": "Whether to provide an estimate of how many total relevant results could exist for this search.\nResult of the analysis will be available in the `recall` field within the search request." + }, + "behavior": { + "default": "override", + "type": [ + "string" + ], + "description": "How this search interacts with existing items in the Webset:\n\n- **override**: Replace existing items and evaluate all items against new criteria\n- **append**: Add new items to existing ones, keeping items that match the new criteria", + "$ref": "#/components/schemas/WebsetSearchBehavior" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + } + }, + "required": [ + "count", + "query" + ] + }, + "CreateMonitorParameters": { + "type": [ + "object" + ], + "properties": { + "websetId": { + "type": [ + "string" + ], + "description": "The id of the Webset" + }, + "cadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ], + "description": "How often the monitor will run" + }, + "behavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "title": "Entity", + "description": "The entity to search for. By default, the entity from the last search/import is used." + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ], + "description": "Behavior to perform when monitor runs" + }, + "metadata": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + } + } + }, + "required": [ + "websetId", + "cadence", + "behavior" + ] + }, + "ListMonitorsResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Monitor" + }, + "description": "The list of monitors" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "MonitorCadence": { + "type": [ + "object" + ], + "properties": { + "cron": { + "description": "Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.", + "type": [ + "string" + ] + }, + "timezone": { + "description": "IANA timezone (e.g., \"America/New_York\")", + "default": "Etc/UTC", + "type": [ + "string" + ] + } + }, + "required": [ + "cron" + ] + }, + "MonitorBehavior": { + "type": [ + "object" + ], + "properties": { + "type": { + "type": "string", + "const": "search", + "default": "search" + }, + "config": { + "type": [ + "object" + ], + "properties": { + "query": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 10000, + "description": "The query to search for. By default, the query from the last search is used." + }, + "criteria": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "properties": { + "description": { + "type": [ + "string" + ], + "minLength": 2, + "maxLength": 1000 + } + }, + "required": [ + "description" + ] + }, + "maxItems": 5, + "description": "The criteria to search for. By default, the criteria from the last search is used." + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "title": "Entity", + "description": "The entity to search for. By default, the entity from the last search/import is used." + }, + "count": { + "type": [ + "number" + ], + "exclusiveMinimum": 0, + "description": "The maximum number of results to find" + }, + "behavior": { + "default": "append", + "type": [ + "string" + ], + "enum": [ + "override", + "append" + ], + "description": "The behaviour of the Search when it is added to a Webset." + } + }, + "required": [ + "count" + ], + "description": "Specify the search parameters for the Monitor.\n\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided." + } + }, + "required": [ + "type", + "config" + ] + }, + "UpdateMonitor": { + "type": [ + "object" + ], + "properties": { + "status": { + "type": [ + "string" + ], + "enum": [ + "enabled", + "disabled" + ], + "description": "The status of the monitor." + }, + "metadata": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + } + }, + "cadence": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/MonitorCadence" + }, + "behavior": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/MonitorBehavior" + } + } + }, + "ListMonitorRunsResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/MonitorRun" + }, + "description": "The list of monitor runs" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "CreateImportParameters": { + "discriminator": { + "propertyName": "format" + }, + "oneOf": [ + { + "type": [ + "object" + ], + "properties": { + "size": { + "type": [ + "number" + ], + "maximum": 50000000, + "description": "The size of the file in bytes. Maximum size is 50 MB." + }, + "count": { + "type": [ + "number" + ], + "description": "The number of records to import" + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv" + ], + "description": "When the import is in CSV format, we expect a column containing the key identifier for the entity - for now URL. If not provided, import will fail to be processed." + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "entity": { + "oneOf": [ + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CompanyEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/PersonEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/ArticleEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/ResearchPaperEntity" + }, + { + "type": [ + "object" + ], + "$ref": "#/components/schemas/CustomEntity" + } + ], + "description": "What type of entity the import contains (e.g. People, Companies, etc.), and thus should be attempted to be resolved as." + }, + "csv": { + "type": [ + "object" + ], + "properties": { + "identifier": { + "type": [ + "integer" + ], + "minimum": 0, + "description": "Column containing the key identifier for the entity (e.g. URL, Name, etc.). If not provided, we will try to infer it from the file." + } + }, + "description": "When format is `csv`, these are the specific import parameters." + } + }, + "required": [ + "size", + "count", + "format", + "entity" + ] + } + ] + }, + "CreateImportResponse": { + "type": [ + "object" + ], + "properties": { + "id": { + "type": [ + "string" + ], + "description": "The unique identifier for the Import" + }, + "object": { + "type": [ + "string" + ], + "enum": [ + "import" + ], + "description": "The type of object" + }, + "status": { + "type": [ + "string" + ], + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "description": "The status of the Import" + }, + "format": { + "type": [ + "string" + ], + "enum": [ + "csv", + "webset" + ], + "description": "The format of the import." + }, + "entity": { + "$ref": "#/components/schemas/Entity", + "description": "The type of entity the import contains.", + "nullable": true + }, + "title": { + "type": [ + "string" + ], + "description": "The title of the import" + }, + "count": { + "type": [ + "number" + ], + "description": "The number of entities in the import" + }, + "metadata": { + "description": "Set of key-value pairs you want to associate with this object.", + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ], + "maxLength": 1000 + } + }, + "failedReason": { + "type": "string", + "enum": [ + "invalid_format", + "invalid_file_content", + "missing_identifier" + ], + "description": "The reason the import failed", + "nullable": true + }, + "failedAt": { + "type": "string", + "format": "date-time", + "description": "When the import failed", + "nullable": true + }, + "failedMessage": { + "type": "string", + "description": "A human readable message of the import failure", + "nullable": true + }, + "createdAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was created" + }, + "updatedAt": { + "type": [ + "string" + ], + "format": "date-time", + "description": "When the import was last updated" + }, + "uploadUrl": { + "type": [ + "string" + ], + "description": "The URL to upload the file to" + }, + "uploadValidUntil": { + "type": [ + "string" + ], + "description": "The date and time until the upload URL is valid. The upload URL will be valid for 1 hour." + } + }, + "required": [ + "id", + "object", + "status", + "format", + "entity", + "title", + "count", + "metadata", + "failedReason", + "failedAt", + "failedMessage", + "createdAt", + "updatedAt", + "uploadUrl", + "uploadValidUntil" + ], + "description": "The response to a successful import. Includes the upload URL and the upload valid until date." + }, + "ListImportsResponse": { + "type": [ + "object" + ], + "properties": { + "data": { + "type": [ + "array" + ], + "items": { + "type": [ + "object" + ], + "$ref": "#/components/schemas/Import" + }, + "description": "The list of imports" + }, + "hasMore": { + "type": [ + "boolean" + ], + "description": "Whether there are more results to paginate through" + }, + "nextCursor": { + "type": "string", + "description": "The cursor to paginate through the next set of results", + "nullable": true + } + }, + "required": [ + "data", + "hasMore", + "nextCursor" + ] + }, + "UpdateImport": { + "type": [ + "object" + ], + "properties": { + "metadata": { + "type": [ + "object" + ], + "additionalProperties": { + "type": [ + "string" + ] + } + }, + "title": { + "type": [ + "string" + ] + } + } + }, + "WebsetEnrichmentFormat": { + "type": "string", + "enum": [ + "text", + "date", + "number", + "options", + "email", + "phone", + "url" + ] + }, + "EventType": { + "type": "string", + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ] + }, + "WebsetSearchBehavior": { + "type": "string", + "enum": [ + "override", + "append" + ] + }, + "WebsetSearchCanceledReason": { + "type": "string", + "enum": [ + "webset_deleted", + "webset_canceled" + ] + } + }, + "responses": { + "SearchResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique identifier for the request", + "example": "b5947044c4b78efa9552a7c89b306d95" + }, + "resolvedSearchType": { + "type": "string", + "enum": [ + "neural", + "keyword" + ], + "description": "The search type that was actually used for this request", + "example": "neural" + }, + "results": { + "type": "array", + "description": "A list of search results containing title, URL, published date, author, and score.", + "items": { + "$ref": "#/components/schemas/ResultWithContent" + } + }, + "searchType": { + "type": "string", + "enum": [ + "neural", + "keyword" + ], + "description": "For auto searches, indicates which search type was selected.", + "example": "auto" + }, + "context": { + "type": "string", + "description": "A formatted string of the search results ready for LLMs." + }, + "costDollars": { + "$ref": "#/components/schemas/CostDollars" + } + } + } + } + } + }, + "FindSimilarResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique identifier for the request", + "example": "c6958155d5c89ffa0663b7c90c407396" + }, + "context": { + "type": "string", + "description": "A formatted string of the search results ready for LLMs." + }, + "results": { + "type": "array", + "description": "A list of search results containing title, URL, published date, author, and score.", + "items": { + "$ref": "#/components/schemas/ResultWithContent" + } + }, + "costDollars": { + "$ref": "#/components/schemas/CostDollars" + } + } + } + } + } + }, + "ContentsResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Unique identifier for the request", + "example": "e492118ccdedcba5088bfc4357a8a125" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResultWithContent" + } + }, + "context": { + "type": "string", + "description": "A formatted string of the search results ready for LLMs." + }, + "statuses": { + "type": "array", + "description": "Status information for each requested URL", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The URL that was requested", + "example": "https://example.com" + }, + "status": { + "type": "string", + "enum": [ + "success", + "error" + ], + "description": "Status of the content fetch operation", + "example": "success" + }, + "error": { + "type": "object", + "nullable": true, + "description": "Error details, only present when status is \"error\"", + "properties": { + "tag": { + "type": "string", + "enum": [ + "CRAWL_NOT_FOUND", + "CRAWL_TIMEOUT", + "CRAWL_LIVECRAWL_TIMEOUT", + "SOURCE_NOT_AVAILABLE", + "CRAWL_UNKNOWN_ERROR" + ], + "description": "Specific error type", + "example": "CRAWL_NOT_FOUND" + }, + "httpStatusCode": { + "type": "integer", + "nullable": true, + "description": "The corresponding HTTP status code", + "example": 404 + } + } + } + } + } + }, + "costDollars": { + "$ref": "#/components/schemas/CostDollars" + } + } + } + } + } + }, + "AnswerResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/AnswerResult" + }, + { + "type": "object", + "properties": { + "costDollars": { + "$ref": "#/components/schemas/CostDollars" + } + } + } + ] + } + }, + "text/event-stream": { + "schema": { + "type": "object", + "properties": { + "answer": { + "type": "string", + "description": "Partial answer chunk when streaming is enabled." + }, + "citations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnswerCitation" + } + } + } + } + } + } + } + } + } +} diff --git a/toolkits/exa_api/arcade_exa_api/tools/__init__.py b/toolkits/exa_api/arcade_exa_api/tools/__init__.py new file mode 100644 index 00000000..182eeb4b --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/tools/__init__.py @@ -0,0 +1,1954 @@ +"""Arcade Starter Tools for Exa + +DO NOT EDIT THIS MODULE DIRECTLY. + +THIS MODULE WAS AUTO-GENERATED BY TRANSPILING THE API STARTER TOOL JSON DEFINITIONS +IN THE ../wrapper_tools DIRECTORY INTO PYTHON CODE. ANY CHANGES TO THIS MODULE WILL +BE OVERWRITTEN BY THE TRANSPILER. +""" + +import asyncio +import json +from enum import Enum +from typing import Annotated, Any + +import httpx +import jsonschema +from arcade_tdk import ToolContext, tool +from arcade_tdk.errors import RetryableToolError + +from .request_body_schemas import REQUEST_BODY_SCHEMAS + +# Retry configuration +INITIAL_RETRY_DELAY = 0.5 # seconds + +HTTP_CLIENT = httpx.AsyncClient( + timeout=httpx.Timeout(60.0, connect=10.0), + limits=httpx.Limits(max_keepalive_connections=20, max_connections=100), + transport=httpx.AsyncHTTPTransport(retries=3), + http2=True, + follow_redirects=True, +) + + +class ToolMode(str, Enum): + """Mode for tools with complex request bodies.""" + + GET_REQUEST_SCHEMA = "get_request_schema" + EXECUTE = "execute" + + +def remove_none_values(data: dict[str, Any]) -> dict[str, Any]: + return {k: v for k, v in data.items() if v is not None} + + +async def make_request( + url: str, + method: str, + params: dict[str, Any] | None = None, + headers: dict[str, Any] | None = None, + content: str | None = None, + data: dict[str, Any] | None = None, + auth: tuple[str, str] | None = None, + max_retries: int = 3, +) -> httpx.Response: + """Make an HTTP request with retry logic for 5xx server errors.""" + for attempt in range(max_retries): + try: + response = await HTTP_CLIENT.request( + url=url, + auth=auth, + method=method, + params=params, + headers=headers, + content=content, + ) + response.raise_for_status() + except httpx.HTTPStatusError as e: + # Only retry on 5xx server errors + if e.response.status_code >= 500 and attempt < max_retries - 1: + # Exponential backoff: 0.5s, 1s, 2s + await asyncio.sleep(INITIAL_RETRY_DELAY * (2**attempt)) + continue + # Re-raise for 4xx errors or if max retries reached + raise + except httpx.RequestError: + # Don't retry request errors (network issues are handled by transport) + raise + else: + return response + + # This should never be reached, but satisfies type checker + raise httpx.RequestError("Max retries exceeded") # noqa: TRY003 + + +async def make_request_with_schema_validation( + url: str, + method: str, + request_data: dict[str, Any], + schema: dict[str, Any] | str, + auth: tuple[str, str] | None = None, + params: dict[str, Any] | None = None, + headers: dict[str, Any] | None = None, + max_retries: int = 3, +) -> httpx.Response: + """Make an HTTP request with schema validation on format errors.""" + # Parse schema if it's a string, skip validation if parsing fails + parsed_schema = None + if isinstance(schema, str): + try: + parsed_schema = json.loads(schema) + except Exception: + # If schema parsing fails, just skip validation + parsed_schema = None + else: + parsed_schema = schema + + try: + response = await make_request( + url=url, + auth=auth, + method=method, + params=params, + headers=headers, + content=json.dumps(request_data), + max_retries=max_retries, + ) + except httpx.HTTPStatusError as e: + # Only provide schema validation for format-related errors + if e.response.status_code in (400, 422): + api_error_details = f"API returned {e.response.status_code}: {e.response.text}" + + # Only run validation if we have a valid parsed schema + if parsed_schema is not None: + # Run validation to provide additional context + is_valid, validation_error = validate_json_against_schema( + request_data, parsed_schema + ) + + if not is_valid: + # Schema validation found issues - additional context + additional_context = ( + f"{api_error_details}\n\n" + f"Schema validation found the following issues:\n" + f"{validation_error}" + ) + else: + # Schema validation passed - just show API error + additional_context = api_error_details + else: + # No valid schema - just show API error + additional_context = api_error_details + + raise RetryableToolError( + message=(f"API request failed with validation error: {e.response.status_code}"), + developer_message=api_error_details, + additional_prompt_content=additional_context, + ) from e + else: + # For non-validation errors, re-raise as-is + raise + else: + return response + + +def validate_json_against_schema( + json_data: dict[str, Any], schema: dict[str, Any] +) -> tuple[bool, str | None]: + """Validate JSON data against an OpenAPI/JSON Schema. + + This provides full JSON Schema Draft 7 validation including: + - Required fields, types, enums + - Pattern validation (regex) + - Format validation (email, uuid, date-time, etc.) + - Min/max length and values + - oneOf, anyOf, allOf + - And all other JSON Schema features + + Args: + json_data: The JSON data to validate + schema: The JSON Schema to validate against + + Returns: + Tuple of (is_valid, error_messages). If valid, error_messages is None. + If invalid, error_messages contains all validation errors. + """ + try: + validator = jsonschema.Draft7Validator( + schema, format_checker=jsonschema.Draft7Validator.FORMAT_CHECKER + ) + # Collect ALL validation errors + errors = list(validator.iter_errors(json_data)) + if errors: + # Format all errors with their paths + error_messages = [] + for error in errors: + error_path = ".".join(str(p) for p in error.path) if error.path else "root" + error_messages.append(f"{error.message} at {error_path}") + # Join all errors with newlines + return False, "\n".join(error_messages) + else: + return True, None + except jsonschema.SchemaError as e: + return False, f"Invalid schema: {e.message}" + except Exception as e: + return False, f"Validation error: {e!s}" + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def perform_exa_search( + context: ToolContext, + mode: Annotated[ + ToolMode, + "Operation mode: 'get_request_schema' returns the OpenAPI spec " + "for the request body, 'execute' performs the actual operation", + ], + request_body: Annotated[ + str | None, + "Stringified JSON representing the request body. Required when " + "mode is 'execute', ignored when mode is 'get_request_schema'", + ] = None, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'search'."]: + """Conduct a search using Exa and retrieve relevant results. + + This tool performs a search using the Exa prompt-engineered query system. It retrieves a list of relevant search results based on the query, with an optional feature to include content details. + + Note: Understanding the request schema is necessary to properly create + the stringified JSON input object for execution. + + Modes: + - GET_REQUEST_SCHEMA: Returns the schema. Only call if you don't + already have it. Do NOT call repeatedly if you already received + the schema. + - EXECUTE: Performs the operation with the provided request body + JSON. + + If you need the schema, call with mode='get_request_schema' ONCE, then execute. + """ # noqa: E501 + if mode == ToolMode.GET_REQUEST_SCHEMA: + return { + "request_body_schema": REQUEST_BODY_SCHEMAS["PERFORMEXASEARCH"], + "instructions": ( + "Use the request_body_schema to construct a valid JSON object. " + "Once you have populated the object following the schema " + "structure and requirements, call this tool again with " + "mode='execute' and the stringified JSON as the " + "request_body parameter. " + "Do NOT call the schema mode again - you already have " + "the schema now." + ), + } + + # Mode is EXECUTE - validate parameters + + # Validate request body is provided (not None or empty string) + # Note: Empty objects like {} are allowed - schema validation will check if valid + if request_body is None or request_body.strip() == "": + raise RetryableToolError( + message="Request body is required when mode is 'execute'", + developer_message="The request_body parameter was null or empty string", + additional_prompt_content=( + "The request body is required to perform this operation. " + "Use the schema below to construct a valid JSON object, " + "then call this tool again in execute mode with the " + "stringified JSON as the request_body parameter.\n\n" + "Schema:\n\n```json\n" + REQUEST_BODY_SCHEMAS["PERFORMEXASEARCH"] + "\n```" + ), + ) + + # Parse JSON + try: + request_data = json.loads(request_body) + except json.JSONDecodeError as e: + raise RetryableToolError( + message=f"Invalid JSON in request body: {e!s}", + developer_message=f"JSON parsing failed: {e!s}", + additional_prompt_content=( + f"The request body contains invalid JSON. Error: {e!s}\n\n" + "Please provide a valid JSON string that matches the schema " + "below, then call this tool again in execute mode.\n\n" + "Schema:\n\n```json\n" + REQUEST_BODY_SCHEMAS["PERFORMEXASEARCH"] + "\n```" + ), + ) from e + + response = await make_request_with_schema_validation( + url="https://api.exa.ai/search", + method="POST", + request_data=request_data, + schema=REQUEST_BODY_SCHEMAS["PERFORMEXASEARCH"], + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def find_similar_links( + context: ToolContext, + mode: Annotated[ + ToolMode, + "Operation mode: 'get_request_schema' returns the OpenAPI spec " + "for the request body, 'execute' performs the actual operation", + ], + request_body: Annotated[ + str | None, + "Stringified JSON representing the request body. Required when " + "mode is 'execute', ignored when mode is 'get_request_schema'", + ] = None, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'findSimilar'."]: + """Find similar links to a given link. + + This tool finds links similar to the provided link and can optionally retrieve their contents. It should be called when a user needs to discover related web pages or resources. + + Note: Understanding the request schema is necessary to properly create + the stringified JSON input object for execution. + + Modes: + - GET_REQUEST_SCHEMA: Returns the schema. Only call if you don't + already have it. Do NOT call repeatedly if you already received + the schema. + - EXECUTE: Performs the operation with the provided request body + JSON. + + If you need the schema, call with mode='get_request_schema' ONCE, then execute. + """ # noqa: E501 + if mode == ToolMode.GET_REQUEST_SCHEMA: + return { + "request_body_schema": REQUEST_BODY_SCHEMAS["FINDSIMILARLINKS"], + "instructions": ( + "Use the request_body_schema to construct a valid JSON object. " + "Once you have populated the object following the schema " + "structure and requirements, call this tool again with " + "mode='execute' and the stringified JSON as the " + "request_body parameter. " + "Do NOT call the schema mode again - you already have " + "the schema now." + ), + } + + # Mode is EXECUTE - validate parameters + + # Validate request body is provided (not None or empty string) + # Note: Empty objects like {} are allowed - schema validation will check if valid + if request_body is None or request_body.strip() == "": + raise RetryableToolError( + message="Request body is required when mode is 'execute'", + developer_message="The request_body parameter was null or empty string", + additional_prompt_content=( + "The request body is required to perform this operation. " + "Use the schema below to construct a valid JSON object, " + "then call this tool again in execute mode with the " + "stringified JSON as the request_body parameter.\n\n" + "Schema:\n\n```json\n" + REQUEST_BODY_SCHEMAS["FINDSIMILARLINKS"] + "\n```" + ), + ) + + # Parse JSON + try: + request_data = json.loads(request_body) + except json.JSONDecodeError as e: + raise RetryableToolError( + message=f"Invalid JSON in request body: {e!s}", + developer_message=f"JSON parsing failed: {e!s}", + additional_prompt_content=( + f"The request body contains invalid JSON. Error: {e!s}\n\n" + "Please provide a valid JSON string that matches the schema " + "below, then call this tool again in execute mode.\n\n" + "Schema:\n\n```json\n" + REQUEST_BODY_SCHEMAS["FINDSIMILARLINKS"] + "\n```" + ), + ) from e + + response = await make_request_with_schema_validation( + url="https://api.exa.ai/findSimilar", + method="POST", + request_data=request_data, + schema=REQUEST_BODY_SCHEMAS["FINDSIMILARLINKS"], + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_content_details( + context: ToolContext, + mode: Annotated[ + ToolMode, + "Operation mode: 'get_request_schema' returns the OpenAPI spec " + "for the request body, 'execute' performs the actual operation", + ], + request_body: Annotated[ + str | None, + "Stringified JSON representing the request body. Required when " + "mode is 'execute', ignored when mode is 'get_request_schema'", + ] = None, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'getContents'."]: + """Retrieve details about specific content. + + Use this tool to retrieve detailed information about specific content from the EXA service. It should be called when content details are needed for further processing or display. + + Note: Understanding the request schema is necessary to properly create + the stringified JSON input object for execution. + + Modes: + - GET_REQUEST_SCHEMA: Returns the schema. Only call if you don't + already have it. Do NOT call repeatedly if you already received + the schema. + - EXECUTE: Performs the operation with the provided request body + JSON. + + If you need the schema, call with mode='get_request_schema' ONCE, then execute. + """ # noqa: E501 + if mode == ToolMode.GET_REQUEST_SCHEMA: + return { + "request_body_schema": REQUEST_BODY_SCHEMAS["GETCONTENTDETAILS"], + "instructions": ( + "Use the request_body_schema to construct a valid JSON object. " + "Once you have populated the object following the schema " + "structure and requirements, call this tool again with " + "mode='execute' and the stringified JSON as the " + "request_body parameter. " + "Do NOT call the schema mode again - you already have " + "the schema now." + ), + } + + # Mode is EXECUTE - validate parameters + + # Validate request body is provided (not None or empty string) + # Note: Empty objects like {} are allowed - schema validation will check if valid + if request_body is None or request_body.strip() == "": + raise RetryableToolError( + message="Request body is required when mode is 'execute'", + developer_message="The request_body parameter was null or empty string", + additional_prompt_content=( + "The request body is required to perform this operation. " + "Use the schema below to construct a valid JSON object, " + "then call this tool again in execute mode with the " + "stringified JSON as the request_body parameter.\n\n" + "Schema:\n\n```json\n" + REQUEST_BODY_SCHEMAS["GETCONTENTDETAILS"] + "\n```" + ), + ) + + # Parse JSON + try: + request_data = json.loads(request_body) + except json.JSONDecodeError as e: + raise RetryableToolError( + message=f"Invalid JSON in request body: {e!s}", + developer_message=f"JSON parsing failed: {e!s}", + additional_prompt_content=( + f"The request body contains invalid JSON. Error: {e!s}\n\n" + "Please provide a valid JSON string that matches the schema " + "below, then call this tool again in execute mode.\n\n" + "Schema:\n\n```json\n" + REQUEST_BODY_SCHEMAS["GETCONTENTDETAILS"] + "\n```" + ), + ) from e + + response = await make_request_with_schema_validation( + url="https://api.exa.ai/contents", + method="POST", + request_data=request_data, + schema=REQUEST_BODY_SCHEMAS["GETCONTENTDETAILS"], + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def generate_answer_summary( + context: ToolContext, + search_query: Annotated[str, "The question or query to be answered or summarized."], + enable_streaming_response: Annotated[ + bool | None, "Return the response as a server-sent events (SSE) stream if set to true." + ] = False, + include_full_text: Annotated[ + bool | None, "If true, the response includes full text content in the search results." + ] = False, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'answer'."]: + """Retrieve direct answers or detailed summaries with citations. + + Use this tool to perform a search based on a query. It generates either a direct answer or a detailed summary with citations, depending on the nature of the query.""" # noqa: E501 + request_data: Any = { + "query": search_query, + "stream": enable_streaming_response, + "text": include_full_text, + } + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/answer", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_research_requests( + context: ToolContext, + pagination_cursor: Annotated[ + str | None, + "A string representing the position in the paginated results to continue retrieving data from.", # noqa: E501 + ] = None, + results_limit: Annotated[ + float | None, + "Specifies the number of research requests to return in the response. Helps manage pagination effectively.", # noqa: E501 + ] = 10, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'ResearchController_listResearch'."]: + """Retrieve a paginated list of research requests. + + Use this tool to obtain a paginated list of all research requests. Ideal for reviewing or analyzing current research queries.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/research/v1", + method="GET", + params=remove_none_values({"cursor": pagination_cursor, "limit": results_limit}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_research_request( + context: ToolContext, + research_request_details: Annotated[ + dict[str, str], + "JSON object containing details of the research request including parameters and criteria.", + ], +) -> Annotated[ + dict[str, Any], "Response from the API endpoint 'ResearchController_createResearch'." +]: + """Create a new research request. + + Use this tool to initiate a new research request when you need to gather specific information or data.""" # noqa: E501 + request_data: Any = research_request_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/research/v1", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_research_by_id( + context: ToolContext, + enable_streaming: Annotated[ + str, "Set to 'true' to receive real-time streaming updates of the research information." + ], + event_filter: Annotated[ + str, + "Specify the events to filter for in the research retrieval. Accepts a comma-separated list of event types.", # noqa: E501 + ], + research_id: Annotated[ + str, "A string representing the unique identifier of the research to be retrieved." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'ResearchController_getResearch'."]: + """Retrieve research information using a specific ID. + + Use this tool to obtain detailed research information by providing a specific research ID. Supports real-time updates with streaming.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/research/v1/{researchId}".format(researchId=research_id), # noqa: UP032 + method="GET", + params=remove_none_values({"stream": enable_streaming, "events": event_filter}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_webset( + context: ToolContext, + webset_configuration: Annotated[ + dict[str, str], + "A JSON object detailing optional search, import, and enrichment configurations for the Webset. Include any necessary identifiers like `externalId`.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-create'."]: + """Create a new Webset with optional configurations. + + This tool creates a new Webset with optional search, import, and enrichment configurations. The Webset processing starts automatically once it's created. You can specify an `externalId` for easier integration with your own identifiers.""" # noqa: E501 + request_data: Any = webset_configuration + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_websets( + context: ToolContext, + pagination_cursor: Annotated[ + str | None, "A string used to paginate through the list of Websets." + ] = None, + websets_return_limit: Annotated[ + float | None, "Specify the maximum number of Websets to return in the response." + ] = 25, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-list'."]: + """Retrieve a list of available websets. + + Use this tool to obtain a list of websets. You can paginate through results using a cursor.""" + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets", + method="GET", + params=remove_none_values({"cursor": pagination_cursor, "limit": websets_return_limit}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_webset_details( + context: ToolContext, + webset_identifier: Annotated[ + str, "The unique identifier or external ID for the Webset to retrieve." + ], + resources_to_expand: Annotated[ + list[str] | None, "A list of resources to include in the response for additional details." + ] = None, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-get'."]: + """Retrieve detailed information about a specific webset. + + This tool is used to obtain the details of a specific webset using its unique identifier. Call this when you need information related to a particular webset.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{id}".format(id=webset_identifier), # noqa: UP032 + method="GET", + params=remove_none_values({"expand": resources_to_expand}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def update_webset( + context: ToolContext, + webset_details: Annotated[ + dict[str, str], + "A JSON object containing the details to update for the webset. This includes any attributes that need to be changed.", # noqa: E501 + ], + webset_id: Annotated[ + str, + "The unique id or externalId of the Webset to be updated. Ensure it matches a valid Webset.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-update'."]: + """Update details of an existing webset. + + Use this tool to update the information of a specific webset identified by its ID. Ideal for modifying webset attributes when changes are needed.""" # noqa: E501 + request_data: Any = webset_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{id}".format(id=webset_id), # noqa: UP032 + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def delete_webset( + context: ToolContext, + webset_identifier: Annotated[ + str, "The unique identifier or external ID of the Webset to delete." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-delete'."]: + """Deletes a Webset and its associated items. + + Use this tool to permanently delete a Webset and all its associated items. Once deleted, it cannot be recovered.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{id}".format(id=webset_identifier), # noqa: UP032 + method="DELETE", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def cancel_webset_operations( + context: ToolContext, + webset_identifier: Annotated[ + str, "The ID or external ID of the Webset to cancel operations on." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-cancel'."]: + """Cancel all operations on a specified Webset. + + Use this tool to stop any ongoing enrichment or search processes on a Webset, marking it as 'idle'.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{id}/cancel".format(id=webset_identifier), # noqa: UP032 + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def preview_search_decomposition( + context: ToolContext, + search_query_details: Annotated[ + dict[str, str], + "A JSON object detailing the search query to preview. It includes elements like the search string and any additional parameters for analysis.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-preview'."]: + """Preview and analyze search query decomposition. + + This tool previews how a search query will be decomposed before creating a webset, showing the detected entity type, generated search criteria, and available enrichment columns. Use it to understand the search interpretation before full webset creation.""" # noqa: E501 + request_data: Any = search_query_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/preview", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_webset_item( + context: ToolContext, + webset_identifier: Annotated[ + str, + "The ID or external ID of the Webset to identify the desired Webset from which the item is to be retrieved.", # noqa: E501 + ], + webset_item_id: Annotated[str, "The unique identifier of the Webset item to retrieve."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-items-get'."]: + """Retrieve a specific Webset Item by ID. + + This tool is used to retrieve information about a specific Webset Item using its ID. It should be called when you need detailed information about a particular item associated with a Webset.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/items/{id}".format( # noqa: UP032 + webset=webset_identifier, id=webset_item_id + ), + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def delete_webset_item( + context: ToolContext, + webset_identifier: Annotated[ + str, "The ID or external ID of the Webset from which the item will be deleted." + ], + webset_item_id: Annotated[ + str, "The unique identifier of the item to be deleted from the webset." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-items-delete'."]: + """Delete an item from a webset and cancel its enrichment process. + + Use this tool to remove an item from the specified webset. This will also cancel any ongoing enrichment process associated with the item.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/items/{id}".format( # noqa: UP032 + webset=webset_identifier, id=webset_item_id + ), + method="DELETE", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_webset_items( + context: ToolContext, + webset_identifier: Annotated[ + str, "The ID or external ID of the Webset to retrieve items from." + ], + pagination_cursor: Annotated[ + str | None, + "A string used to paginate through the results. Pass this to retrieve the next set of items in the webset.", # noqa: E501 + ] = None, + result_limit: Annotated[ + float | None, + "Specify the number of results to return. This controls the size of the page in a paginated response.", # noqa: E501 + ] = 20, + source_id: Annotated[ + str | None, "The unique identifier for the source from which to retrieve items." + ] = None, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-items-list'."]: + """Retrieve a list of items from a specific webset. + + This tool fetches items from a designated webset, allowing pagination with the 'cursor' parameter if needed.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/items".format(webset=webset_identifier), # noqa: UP032 + method="GET", + params=remove_none_values({ + "cursor": pagination_cursor, + "limit": result_limit, + "sourceId": source_id, + }), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_webset_enrichment( + context: ToolContext, + enrichment_details: Annotated[ + dict[str, str], + "A JSON object containing the details required to create the enrichment for the webset.", + ], + webset_identifier: Annotated[str, "The ID or external ID of the webset to enrich."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-enrichments-create'."]: + """Create an enrichment for a specified webset. + + This tool is used to create an enrichment for a given webset. It should be called when there is a need to enhance a webset with additional data or features.""" # noqa: E501 + request_data: Any = enrichment_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/enrichments".format( # noqa: UP032 + webset=webset_identifier + ), + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def update_webset_enrichment( + context: ToolContext, + enrichment_configuration_details: Annotated[ + dict[str, str], + "A JSON object containing the details of the enrichment configuration to update.", + ], + enrichment_configuration_id: Annotated[ + str, "The unique identifier of the enrichment configuration to be updated." + ], + webset_identifier: Annotated[ + str, + "The identifier of the webset to be updated. Provide the specific name or ID of the webset.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-enrichments-update'."]: + """Update an enrichment configuration for a webset. + + This tool updates the enrichment configuration for a specified webset. It should be called when an existing enrichment configuration needs modification.""" # noqa: E501 + request_data: Any = enrichment_configuration_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}".format( # noqa: UP032 + webset=webset_identifier, id=enrichment_configuration_id + ), + method="PATCH", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_enrichment_details( + context: ToolContext, + enrichment_id: Annotated[ + str, + "The unique identifier for the specific enrichment you want to retrieve within the webset.", + ], + webset_identifier: Annotated[ + str, "The ID or external ID of the webset to retrieve enrichment details for." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-enrichments-get'."]: + """Retrieve detailed information about a specific enrichment. + + Use this tool to get detailed information about a specific enrichment in a webset by providing the webset and enrichment IDs.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}".format( # noqa: UP032 + webset=webset_identifier, id=enrichment_id + ), + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def delete_enrichment( + context: ToolContext, + enrichment_id: Annotated[str, "The unique identifier of the enrichment to be deleted."], + webset_id: Annotated[ + str, "The ID or external ID of the Webset to identify which enrichment to delete." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-enrichments-delete'."]: + """Delete an enrichment and cancel running processes. + + Use this tool to delete an enrichment, cancel any running processes, and remove all generated enrichment results.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}".format( # noqa: UP032 + webset=webset_id, id=enrichment_id + ), + method="DELETE", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def cancel_enrichment_process( + context: ToolContext, + enrichment_id: Annotated[ + str, "The unique identifier of the enrichment process to be canceled." + ], + webset_id: Annotated[ + str, "The ID or external ID of the Webset to identify which enrichment process to cancel." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-enrichments-cancel'."]: + """Cancel a running enrichment process. + + Use this tool to cancel any currently running enrichment process. Once canceled, the process cannot be resumed.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}/cancel".format( # noqa: UP032 + webset=webset_id, id=enrichment_id + ), + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_webhook_for_notifications( + context: ToolContext, + webhook_configuration: Annotated[ + dict[str, str], + "A JSON object detailing the events to monitor and the destination URL for notifications.", + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'webhooks-create'."]: + """Create webhooks to receive event notifications. + + This tool allows you to set up webhooks for receiving notifications about specific events in your Websets. Upon creation, you'll specify the events to monitor and the destination URL for the notifications. The webhook activates immediately, and you'll receive a secret key for signature verification, visible only once at this point.""" # noqa: E501 + request_data: Any = webhook_configuration + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/webhooks", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_webhooks_list( + context: ToolContext, + pagination_cursor: Annotated[ + str | None, "The cursor used to navigate through pages of results for webhooks." + ] = None, + results_per_page: Annotated[ + float | None, "The number of webhooks to return per page, up to a maximum of 200." + ] = 25, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'webhooks-list'."]: + """Retrieve a paginated list of all webhooks in your account. + + Use this tool to get all the webhooks associated with your account, with options to paginate through results using limit and cursor parameters.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/webhooks", + method="GET", + params=remove_none_values({"cursor": pagination_cursor, "limit": results_per_page}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_webhook_info( + context: ToolContext, + webhook_id: Annotated[str, "The unique identifier for the webhook you want details about."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'webhooks-get'."]: + """Retrieve details of a webhook using its ID. + + This tool is used to get details about a specific webhook by providing its ID. It should be called when you need to access information about a particular webhook. The secret associated with the webhook is not included for security reasons.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/webhooks/{id}".format(id=webhook_id), # noqa: UP032 + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def update_webhook_settings( + context: ToolContext, + webhook_id: Annotated[str, "The unique identifier of the webhook to be updated."], + webhook_update_request_body: Annotated[ + dict[str, str], + "JSON object containing webhook updates, such as events list, new URL, and metadata.", + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'webhooks-update'."]: + """Update a webhook's settings for events, URL, and metadata. + + Use this tool to modify a webhook's configuration, including the events it tracks, the URL for notifications, and any custom metadata. Changes are applied immediately, and the webhook's status remains the same.""" # noqa: E501 + request_data: Any = webhook_update_request_body + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/webhooks/{id}".format(id=webhook_id), # noqa: UP032 + method="PATCH", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def remove_webhook( + context: ToolContext, + webhook_id: Annotated[ + str, + "The unique identifier of the webhook to remove. This is necessary for specifying which webhook to delete.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'webhooks-delete'."]: + """Remove a webhook from your account. + + Use this tool to delete a webhook. Once deleted, it stops receiving notifications immediately and cannot be restored. You'll need to create a new webhook if you wish to reinstate it. Use when you need to stop a webhook permanently.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/webhooks/{id}".format(id=webhook_id), # noqa: UP032 + method="DELETE", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_webhook_attempts( + context: ToolContext, + webhook_id: Annotated[ + str, "The unique identifier for the webhook to retrieve attempt records for." + ], + event_type_filter: Annotated[ + str | None, + "Filter webhook attempts by specifying the type of event, such as 'webset.created' or 'monitor.run.completed'.", # noqa: E501 + ] = None, + filter_by_successful_attempts: Annotated[ + bool | None, + "Use 'true' to filter for successful webhook attempts and 'false' for unsuccessful ones.", + ] = None, + pagination_cursor: Annotated[ + str | None, "A string used to paginate through the webhook attempt results." + ] = None, + results_limit: Annotated[ + float | None, "Specify the maximum number of webhook attempt records to return." + ] = 25, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'webhooks-attempts-list'."]: + """Retrieve and list all webhook attempt records. + + This tool retrieves all attempts made by a specific webhook, ordered in descending order. It is useful for monitoring webhook activity and diagnosing issues.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/webhooks/{id}/attempts".format(id=webhook_id), # noqa: UP032 + method="GET", + params=remove_none_values({ + "cursor": pagination_cursor, + "limit": results_limit, + "eventType": event_type_filter, + "successful": filter_by_successful_attempts, + }), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_system_events( + context: ToolContext, + created_after: Annotated[ + str | None, + "Filter events created after or at this timestamp. Use a valid ISO 8601 datetime string in UTC.", # noqa: E501 + ] = None, + event_types_filter: Annotated[ + list[str] | None, "Filter events by specifying an array of event type names." + ] = None, + filter_created_before: Annotated[ + str | None, + "Filter events created before or at this timestamp (inclusive). Provide a valid ISO 8601 datetime string in UTC.", # noqa: E501 + ] = None, + pagination_cursor: Annotated[ + str | None, + "Cursor for paginating through event results. Use it to navigate through pages of events.", + ] = None, + results_limit: Annotated[ + float | None, + "Specify the number of event results to return. This controls the size of the result set for a single request.", # noqa: E501 + ] = 25, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'events-list'."]: + """Retrieve a list of all system events. + + Call this tool to get a detailed list of events that have occurred within the system. Useful for auditing, monitoring, or reviewing activities. Supports pagination through a cursor parameter.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/events", + method="GET", + params=remove_none_values({ + "cursor": pagination_cursor, + "limit": results_limit, + "types": event_types_filter, + "createdBefore": filter_created_before, + "createdAfter": created_after, + }), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_event_by_id( + context: ToolContext, + event_id: Annotated[str, "The unique identifier of the event to retrieve details for."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'events-get'."]: + """Retrieve details of an event using its ID. + + Use this tool to obtain information about a specific event by providing its unique identifier.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/events/{id}".format(id=event_id), # noqa: UP032 + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_webset_search( + context: ToolContext, + search_criteria: Annotated[ + dict[str, str], + "JSON object representing new search criteria for the webset. This specifies the parameters or conditions for the new search.", # noqa: E501 + ], + webset_id: Annotated[ + str, "The unique identifier for the Webset you want to create a search in." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-searches-create'."]: + """Create a new search for a specified webset. + + Use this tool to create a new search within a webset, reusing previous search results and applying new criteria.""" # noqa: E501 + request_data: Any = search_criteria + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/searches".format(webset=webset_id), # noqa: UP032 + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_search_by_id( + context: ToolContext, + search_id: Annotated[str, "The ID of the search to retrieve details for."], + webset_id: Annotated[str, "The ID of the Webset to retrieve the specific search."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-searches-get'."]: + """Retrieve a search by its ID. + + Use this tool to get detailed information about a specific search by providing its ID.""" + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/searches/{id}".format( # noqa: UP032 + webset=webset_id, id=search_id + ), + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def cancel_running_search( + context: ToolContext, + search_id: Annotated[ + str, + "The ID of the search to cancel. Provide the unique string identifier for the targeted search operation.", # noqa: E501 + ], + webset_id: Annotated[ + str, + "The ID of the Webset where the search is executing. Use this to specify the Webset to be canceled.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'websets-searches-cancel'."]: + """Cancels a currently running search operation. + + This tool cancels an ongoing search by using the specified webset and search ID. Useful when you need to stop a search that is still in progress.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/websets/{webset}/searches/{id}/cancel".format( # noqa: UP032 + webset=webset_id, id=search_id + ), + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_monitor_for_websets( + context: ToolContext, + monitor_configuration: Annotated[ + dict[str, str], + "JSON object describing the configuration for the new monitor, including schedule, search and refresh operations.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-create'."]: + """Create a scheduled monitor to update Websets with fresh data. + + Use this tool to set up a new monitor that automatically updates Websets. It enables execution of 'search' and 'refresh' operations based on your defined schedule, using cron expressions and timezone settings, to keep your Websets current without manual intervention.""" # noqa: E501 + request_data: Any = monitor_configuration + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_website_monitors( + context: ToolContext, + pagination_cursor: Annotated[ + str | None, "The cursor for paginating through the monitor results." + ] = None, + results_limit: Annotated[ + float | None, + "Specifies the maximum number of monitor results to return. Use for pagination.", + ] = 25, + webset_id: Annotated[ + str | None, + "The unique identifier for the Webset to retrieve monitors for. This is required to specify which website's monitors you want to list.", # noqa: E501 + ] = None, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-list'."]: + """Fetch all monitors associated with a website. + + Use this tool to retrieve a comprehensive list of all monitoring services set up for a specific website. This is helpful for maintenance, auditing, or upgrading processes.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors", + method="GET", + params=remove_none_values({ + "cursor": pagination_cursor, + "limit": results_limit, + "websetId": webset_id, + }), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_specific_monitor( + context: ToolContext, + monitor_id: Annotated[str, "The unique identifier of the monitor to retrieve details for."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-get'."]: + """Retrieve details of a specific monitor using its ID. + + This tool is used to obtain information about a particular monitor by providing its unique ID. Call this tool when you need to get specific details about a monitor.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors/{id}".format(id=monitor_id), # noqa: UP032 + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def update_monitor_configuration( + context: ToolContext, + monitor_configuration_details: Annotated[ + dict[str, str], "A JSON object containing the new configuration settings for the monitor." + ], + monitor_id: Annotated[str, "The unique identifier for the monitor to update."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-update'."]: + """Update the configuration of a monitor. + + Use this tool to update the settings of an existing monitor. Provide the monitor ID and new configuration details to modify its setup.""" # noqa: E501 + request_data: Any = monitor_configuration_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors/{id}".format(id=monitor_id), # noqa: UP032 + method="PATCH", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def delete_monitor( + context: ToolContext, + monitor_id: Annotated[str, "The unique identifier for the monitor to be deleted."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-delete'."]: + """Deletes a specified monitor using its ID. + + Use this tool to delete a monitor by providing its ID. It should be called when you need to remove a monitor from the system.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors/{id}".format(id=monitor_id), # noqa: UP032 + method="DELETE", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_monitor_runs( + context: ToolContext, + monitor_id: Annotated[str, "The ID of the monitor to list all associated runs."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-runs-list'."]: + """Lists all runs for a given monitor. + + Use this tool to retrieve a list of all runs associated with a specific monitor. It's helpful for tracking and analyzing past monitor activities.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors/{monitor}/runs".format(monitor=monitor_id), # noqa: UP032 + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_specific_monitor_run( + context: ToolContext, + monitor_id: Annotated[str, "The unique identifier of the monitor to retrieve the run for."], + run_id: Annotated[str, "The unique identifier of the specific run to retrieve details for."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'monitors-runs-get'."]: + """Retrieve details of a specific monitor run. + + This tool retrieves details of a specific monitor run by using the monitor ID and run ID. It should be called when you need to access information about a particular monitor run.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/monitors/{monitor}/runs/{id}".format( # noqa: UP032 + monitor=monitor_id, id=run_id + ), + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def create_data_import( + context: ToolContext, + data_import_details: Annotated[ + dict[str, str], + "The JSON object containing data to import for Websets. This includes details for enrichment, search, or exclusion processes.", # noqa: E501 + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'imports-create'."]: + """Initiates a new data import for uploading data into Websets. + + Use this tool to create a new import allowing you to upload and manage your data within Websets. The import facilitates data enrichment, searching with natural language filters, and exclusion of duplicates. Upon creation, you'll receive an upload URL valid for a set duration to complete the data upload.""" # noqa: E501 + request_data: Any = data_import_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/imports", + method="POST", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def list_imports( + context: ToolContext, + pagination_cursor: Annotated[ + str | None, + "String used for paginating through results. Pass it to retrieve the next set of results.", + ] = None, + results_limit: Annotated[ + float | None, "Specify the maximum number of import results to return." + ] = 25, +) -> Annotated[dict[str, Any], "Response from the API endpoint 'imports-list'."]: + """Retrieve all import entries for the Webset. + + Use this tool to get a comprehensive list of all imports associated with the Webset, useful for tracking or auditing purposes.""" # noqa: E501 + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/imports", + method="GET", + params=remove_none_values({"cursor": pagination_cursor, "limit": results_limit}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def get_specific_import( + context: ToolContext, + import_id: Annotated[ + str, "The unique identifier for the specific import to retrieve details about." + ], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'imports-get'."]: + """Retrieve details of a specific import. + + Use this tool to get detailed information about a particular import by providing its ID.""" + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/imports/{id}".format(id=import_id), # noqa: UP032 + method="GET", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def update_imports_configuration( + context: ToolContext, + import_configuration_details: Annotated[ + dict[str, str], + "JSON object containing the new settings for the import configuration. Include all necessary fields that need to be updated.", # noqa: E501 + ], + import_id: Annotated[str, "The identifier for the import configuration to be updated."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'imports-update'."]: + """Update an import configuration with new settings. + + Use this tool to update an existing import configuration by providing the necessary changes to its settings.""" # noqa: E501 + request_data: Any = import_configuration_details + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/imports/{id}".format(id=import_id), # noqa: UP032 + method="PATCH", + params=remove_none_values({}), + headers=remove_none_values({ + "Content-Type": "application/json", + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ), + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} + + +@tool(requires_secrets=["EXA_API_KEY"]) +async def delete_import( + context: ToolContext, + import_id: Annotated[str, "The unique identifier of the import to be deleted."], +) -> Annotated[dict[str, Any], "Response from the API endpoint 'imports-delete'."]: + """Delete an import by its ID. + + Use this tool to delete an import record when you have the import ID.""" + request_data: Any = {} + if isinstance(request_data, dict): + request_data = remove_none_values(request_data) + content = json.dumps(request_data) if request_data else None + response = await make_request( + url="https://api.exa.ai/websets/v0/imports/{id}".format(id=import_id), # noqa: UP032 + method="DELETE", + params=remove_none_values({}), + headers=remove_none_values({ + "Authorization": "Bearer {authorization}".format( + authorization=context.get_secret("EXA_API_KEY") + ) + }), + content=content, + ) + try: + return {"response_json": response.json()} + except Exception: + return {"response_text": response.text} diff --git a/toolkits/exa_api/arcade_exa_api/tools/request_body_schemas.py b/toolkits/exa_api/arcade_exa_api/tools/request_body_schemas.py new file mode 100644 index 00000000..dc055b47 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/tools/request_body_schemas.py @@ -0,0 +1,16 @@ +"""Request Body Schemas for API Tools + +DO NOT EDIT THIS MODULE DIRECTLY. + +THIS MODULE WAS AUTO-GENERATED AND CONTAINS OpenAPI REQUEST BODY SCHEMAS +FOR TOOLS WITH COMPLEX REQUEST BODIES. ANY CHANGES TO THIS MODULE WILL +BE OVERWRITTEN BY THE TRANSPILER. +""" + +from typing import Any + +REQUEST_BODY_SCHEMAS: dict[str, Any] = { + "PERFORMEXASEARCH": '{"allOf": [{"type": "object", "properties": {"query": {"type": "string", "example": "Latest developments in LLM capabilities", "description": "The query string for the search."}, "type": {"type": "string", "enum": ["keyword", "neural", "fast", "auto"], "description": "The type of search. Neural uses an embeddings-based model, keyword is google-like SERP, and auto (default) intelligently combines the two. Fast uses streamlined versions of the neural and keyword models.", "example": "auto", "default": "auto"}, "category": {"type": "string", "enum": ["company", "research paper", "news", "pdf", "github", "tweet", "personal site", "linkedin profile", "financial report"], "description": "A data category to focus on.", "example": "research paper"}, "userLocation": {"type": "string", "description": "The two-letter ISO country code of the user, e.g. US.", "example": "US"}}, "required": ["query"]}, {"type": "object", "properties": {"numResults": {"type": "integer", "maximum": 100, "default": 10, "minimum": 1, "description": "Number of results to return (up to thousands of results available for custom plans)", "example": 10}, "includeDomains": {"type": "array", "items": {"type": "string"}, "description": "List of domains to include in the search. If specified, results will only come from these domains.", "example": ["arxiv.org", "paperswithcode.com"]}, "excludeDomains": {"type": "array", "items": {"type": "string"}, "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains."}, "startCrawlDate": {"type": "string", "format": "date-time", "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", "example": "2023-01-01"}, "endCrawlDate": {"type": "string", "format": "date-time", "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", "example": "2023-12-31"}, "startPublishedDate": {"type": "string", "format": "date-time", "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", "example": "2023-01-01"}, "endPublishedDate": {"type": "string", "format": "date-time", "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", "example": "2023-12-31"}, "includeText": {"type": "array", "items": {"type": "string"}, "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", "example": ["large language model"]}, "excludeText": {"type": "array", "items": {"type": "string"}, "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", "example": ["course"]}, "context": {"oneOf": [{"type": "boolean", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "example": true}, {"type": "object", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit.", "example": 10000}}}]}, "contents": {"type": "object", "properties": {"text": {"oneOf": [{"type": "boolean", "title": "Simple text retrieval", "description": "If true, returns full page text with default settings. If false, disables text return."}, {"type": "object", "title": "Advanced text options", "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", "example": 1000}, "includeHtmlTags": {"type": "boolean", "default": false, "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", "example": false}}}]}, "highlights": {"type": "object", "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", "properties": {"numSentences": {"type": "integer", "minimum": 1, "description": "The number of sentences to return for each snippet.", "example": 1}, "highlightsPerUrl": {"type": "integer", "minimum": 1, "description": "The number of snippets to return for each result.", "example": 1}, "query": {"type": "string", "description": "Custom query to direct the LLM\'s selection of highlights.", "example": "Key advancements"}}}, "summary": {"type": "object", "description": "Summary of the webpage", "properties": {"query": {"type": "string", "description": "Custom query for the LLM-generated summary.", "example": "Main developments"}, "schema": {"type": "object", "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", "example": {"$schema": "http://json-schema.org/draft-07/schema#", "title": "Title", "type": "object", "properties": {"Property 1": {"type": "string", "description": "Description"}, "Property 2": {"type": "string", "enum": ["option 1", "option 2", "option 3"], "description": "Description"}}, "required": ["Property 1"]}}}}, "livecrawl": {"type": "string", "enum": ["never", "fallback", "always", "preferred"], "description": "Options for livecrawling pages.\n\'never\': Disable livecrawling (default for neural search).\n\'fallback\': Livecrawl when cache is empty (default for keyword search).\n\'always\': Always livecrawl.\n\'preferred\': Always try to livecrawl, but fall back to cache if crawling fails.\n", "example": "always"}, "livecrawlTimeout": {"type": "integer", "default": 10000, "description": "The timeout for livecrawling in milliseconds.", "example": 1000}, "subpages": {"type": "integer", "default": 0, "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", "example": 1}, "subpageTarget": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", "example": "sources"}, "extras": {"type": "object", "description": "Extra parameters to pass.", "properties": {"links": {"type": "integer", "default": 0, "description": "Number of URLs to return from each webpage.", "example": 1}, "imageLinks": {"type": "integer", "default": 0, "description": "Number of images to return for each result.", "example": 1}}}, "context": {"oneOf": [{"type": "boolean", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "example": true}, {"type": "object", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit.", "example": 10000}}}]}}}}}]}', # noqa: E501 + "FINDSIMILARLINKS": '{"allOf": [{"type": "object", "properties": {"url": {"type": "string", "example": "https://arxiv.org/abs/2307.06435", "description": "The url for which you would like to find similar links."}}, "required": ["url"]}, {"type": "object", "properties": {"numResults": {"type": "integer", "maximum": 100, "default": 10, "minimum": 1, "description": "Number of results to return (up to thousands of results available for custom plans)", "example": 10}, "includeDomains": {"type": "array", "items": {"type": "string"}, "description": "List of domains to include in the search. If specified, results will only come from these domains.", "example": ["arxiv.org", "paperswithcode.com"]}, "excludeDomains": {"type": "array", "items": {"type": "string"}, "description": "List of domains to exclude from search results. If specified, no results will be returned from these domains."}, "startCrawlDate": {"type": "string", "format": "date-time", "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.", "example": "2023-01-01"}, "endCrawlDate": {"type": "string", "format": "date-time", "description": "Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.", "example": "2023-12-31"}, "startPublishedDate": {"type": "string", "format": "date-time", "description": "Only links with a published date after this will be returned. Must be specified in ISO 8601 format.", "example": "2023-01-01"}, "endPublishedDate": {"type": "string", "format": "date-time", "description": "Only links with a published date before this will be returned. Must be specified in ISO 8601 format.", "example": "2023-12-31"}, "includeText": {"type": "array", "items": {"type": "string"}, "description": "List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.", "example": ["large language model"]}, "excludeText": {"type": "array", "items": {"type": "string"}, "description": "List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.", "example": ["course"]}, "context": {"oneOf": [{"type": "boolean", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "example": true}, {"type": "object", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit.", "example": 10000}}}]}, "contents": {"type": "object", "properties": {"text": {"oneOf": [{"type": "boolean", "title": "Simple text retrieval", "description": "If true, returns full page text with default settings. If false, disables text return."}, {"type": "object", "title": "Advanced text options", "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", "example": 1000}, "includeHtmlTags": {"type": "boolean", "default": false, "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", "example": false}}}]}, "highlights": {"type": "object", "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", "properties": {"numSentences": {"type": "integer", "minimum": 1, "description": "The number of sentences to return for each snippet.", "example": 1}, "highlightsPerUrl": {"type": "integer", "minimum": 1, "description": "The number of snippets to return for each result.", "example": 1}, "query": {"type": "string", "description": "Custom query to direct the LLM\'s selection of highlights.", "example": "Key advancements"}}}, "summary": {"type": "object", "description": "Summary of the webpage", "properties": {"query": {"type": "string", "description": "Custom query for the LLM-generated summary.", "example": "Main developments"}, "schema": {"type": "object", "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", "example": {"$schema": "http://json-schema.org/draft-07/schema#", "title": "Title", "type": "object", "properties": {"Property 1": {"type": "string", "description": "Description"}, "Property 2": {"type": "string", "enum": ["option 1", "option 2", "option 3"], "description": "Description"}}, "required": ["Property 1"]}}}}, "livecrawl": {"type": "string", "enum": ["never", "fallback", "always", "preferred"], "description": "Options for livecrawling pages.\n\'never\': Disable livecrawling (default for neural search).\n\'fallback\': Livecrawl when cache is empty (default for keyword search).\n\'always\': Always livecrawl.\n\'preferred\': Always try to livecrawl, but fall back to cache if crawling fails.\n", "example": "always"}, "livecrawlTimeout": {"type": "integer", "default": 10000, "description": "The timeout for livecrawling in milliseconds.", "example": 1000}, "subpages": {"type": "integer", "default": 0, "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", "example": 1}, "subpageTarget": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", "example": "sources"}, "extras": {"type": "object", "description": "Extra parameters to pass.", "properties": {"links": {"type": "integer", "default": 0, "description": "Number of URLs to return from each webpage.", "example": 1}, "imageLinks": {"type": "integer", "default": 0, "description": "Number of images to return for each result.", "example": 1}}}, "context": {"oneOf": [{"type": "boolean", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "example": true}, {"type": "object", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit.", "example": 10000}}}]}}}}}]}', # noqa: E501 + "GETCONTENTDETAILS": '{"type": "object", "allOf": [{"type": "object", "properties": {"urls": {"type": "array", "description": "Array of URLs to crawl (backwards compatible with \'ids\' parameter).", "items": {"type": "string"}, "example": ["https://arxiv.org/pdf/2307.06435"]}, "ids": {"type": "array", "deprecated": true, "description": "Deprecated - use \'urls\' instead. Array of document IDs obtained from searches.", "items": {"type": "string"}, "example": ["https://arxiv.org/pdf/2307.06435"]}}, "required": ["urls"]}, {"type": "object", "properties": {"text": {"oneOf": [{"type": "boolean", "title": "Simple text retrieval", "description": "If true, returns full page text with default settings. If false, disables text return."}, {"type": "object", "title": "Advanced text options", "description": "Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit for the full page text. Useful for controlling response size and API costs.", "example": 1000}, "includeHtmlTags": {"type": "boolean", "default": false, "description": "Include HTML tags in the response, which can help LLMs understand text structure and formatting.", "example": false}}}]}, "highlights": {"type": "object", "description": "Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.", "properties": {"numSentences": {"type": "integer", "minimum": 1, "description": "The number of sentences to return for each snippet.", "example": 1}, "highlightsPerUrl": {"type": "integer", "minimum": 1, "description": "The number of snippets to return for each result.", "example": 1}, "query": {"type": "string", "description": "Custom query to direct the LLM\'s selection of highlights.", "example": "Key advancements"}}}, "summary": {"type": "object", "description": "Summary of the webpage", "properties": {"query": {"type": "string", "description": "Custom query for the LLM-generated summary.", "example": "Main developments"}, "schema": {"type": "object", "description": "JSON schema for structured output from summary. \nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\n", "example": {"$schema": "http://json-schema.org/draft-07/schema#", "title": "Title", "type": "object", "properties": {"Property 1": {"type": "string", "description": "Description"}, "Property 2": {"type": "string", "enum": ["option 1", "option 2", "option 3"], "description": "Description"}}, "required": ["Property 1"]}}}}, "livecrawl": {"type": "string", "enum": ["never", "fallback", "always", "preferred"], "description": "Options for livecrawling pages.\n\'never\': Disable livecrawling (default for neural search).\n\'fallback\': Livecrawl when cache is empty (default for keyword search).\n\'always\': Always livecrawl.\n\'preferred\': Always try to livecrawl, but fall back to cache if crawling fails.\n", "example": "always"}, "livecrawlTimeout": {"type": "integer", "default": 10000, "description": "The timeout for livecrawling in milliseconds.", "example": 1000}, "subpages": {"type": "integer", "default": 0, "description": "The number of subpages to crawl. The actual number crawled may be limited by system constraints.", "example": 1}, "subpageTarget": {"oneOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.", "example": "sources"}, "extras": {"type": "object", "description": "Extra parameters to pass.", "properties": {"links": {"type": "integer", "default": 0, "description": "Number of URLs to return from each webpage.", "example": 1}, "imageLinks": {"type": "integer", "default": 0, "description": "Number of images to return for each result.", "example": 1}}}, "context": {"oneOf": [{"type": "boolean", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "example": true}, {"type": "object", "description": "Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.", "properties": {"maxCharacters": {"type": "integer", "description": "Maximum character limit.", "example": 10000}}}]}}}]}', # noqa: E501 +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelEnrichmentProcess.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelEnrichmentProcess.json new file mode 100644 index 00000000..a6152c4f --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelEnrichmentProcess.json @@ -0,0 +1,137 @@ +{ + "name": "CancelEnrichmentProcess", + "fully_qualified_name": "ExaApi.CancelEnrichmentProcess@0.1.0", + "description": "Cancel a running enrichment process.\n\nUse this tool to cancel any currently running enrichment process. Once canceled, the process cannot be resumed.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_id", + "required": true, + "description": "The ID or external ID of the Webset to identify which enrichment process to cancel.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "enrichment_id", + "required": true, + "description": "The unique identifier of the enrichment process to be canceled.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-enrichments-cancel'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}/cancel", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_id", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "enrichment_id", + "description": "The id of the Enrichment", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelRunningSearch.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelRunningSearch.json new file mode 100644 index 00000000..f8b29d30 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelRunningSearch.json @@ -0,0 +1,137 @@ +{ + "name": "CancelRunningSearch", + "fully_qualified_name": "ExaApi.CancelRunningSearch@0.1.0", + "description": "Cancels a currently running search operation.\n\nThis tool cancels an ongoing search by using the specified webset and search ID. Useful when you need to stop a search that is still in progress.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_id", + "required": true, + "description": "The ID of the Webset where the search is executing. Use this to specify the Webset to be canceled.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "search_id", + "required": true, + "description": "The ID of the search to cancel. Provide the unique string identifier for the targeted search operation.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Search" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-searches-cancel'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/searches/{id}/cancel", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_id", + "description": "The id of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "search_id", + "description": "The id of the Search", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Search" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelWebsetOperations.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelWebsetOperations.json new file mode 100644 index 00000000..3a30697b --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CancelWebsetOperations.json @@ -0,0 +1,104 @@ +{ + "name": "CancelWebsetOperations", + "fully_qualified_name": "ExaApi.CancelWebsetOperations@0.1.0", + "description": "Cancel all operations on a specified Webset.\n\nUse this tool to stop any ongoing enrichment or search processes on a Webset, marking it as 'idle'.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The ID or external ID of the Webset to cancel operations on.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-cancel'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{id}/cancel", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateDataImport.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateDataImport.json new file mode 100644 index 00000000..a50980c3 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateDataImport.json @@ -0,0 +1,104 @@ +{ + "name": "CreateDataImport", + "fully_qualified_name": "ExaApi.CreateDataImport@0.1.0", + "description": "Initiates a new data import for uploading data into Websets.\n\nUse this tool to create a new import allowing you to upload and manage your data within Websets. The import facilitates data enrichment, searching with natural language filters, and exclusion of duplicates. Upon creation, you'll receive an upload URL valid for a set duration to complete the data upload.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "data_import_details", + "required": true, + "description": "The JSON object containing data to import for Websets. This includes details for enrichment, search, or exclusion processes.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'imports-create'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/imports", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "data_import_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"discriminator\": {\n \"propertyName\": \"format\"\n },\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"size\": {\n \"type\": [\n \"number\"\n ],\n \"maximum\": 50000000,\n \"description\": \"The size of the file in bytes. Maximum size is 50 MB.\"\n },\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"description\": \"The number of records to import\"\n },\n \"title\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The title of the import\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"csv\"\n ],\n \"description\": \"When the import is in CSV format, we expect a column containing the key identifier for the entity - for now URL. If not provided, import will fail to be processed.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ],\n \"description\": \"What type of entity the import contains (e.g. People, Companies, etc.), and thus should be attempted to be resolved as.\"\n },\n \"csv\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"identifier\": {\n \"type\": [\n \"integer\"\n ],\n \"minimum\": 0,\n \"description\": \"Column containing the key identifier for the entity (e.g. URL, Name, etc.). If not provided, we will try to infer it from the file.\"\n }\n },\n \"description\": \"When format is `csv`, these are the specific import parameters.\"\n }\n },\n \"required\": [\n \"size\",\n \"count\",\n \"format\",\n \"entity\"\n ]\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateMonitorForWebsets.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateMonitorForWebsets.json new file mode 100644 index 00000000..e507b181 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateMonitorForWebsets.json @@ -0,0 +1,104 @@ +{ + "name": "CreateMonitorForWebsets", + "fully_qualified_name": "ExaApi.CreateMonitorForWebsets@0.1.0", + "description": "Create a scheduled monitor to update Websets with fresh data.\n\nUse this tool to set up a new monitor that automatically updates Websets. It enables execution of 'search' and 'refresh' operations based on your defined schedule, using cron expressions and timezone settings, to keep your Websets current without manual intervention.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "monitor_configuration", + "required": true, + "description": "JSON object describing the configuration for the new monitor, including schedule, search and refresh operations.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-create'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "monitor_configuration", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"websetId\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The id of the Webset\"\n },\n \"cadence\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"cron\": {\n \"description\": \"Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.\",\n \"type\": [\n \"string\"\n ]\n },\n \"timezone\": {\n \"description\": \"IANA timezone (e.g., \\\"America/New_York\\\")\",\n \"default\": \"Etc/UTC\",\n \"type\": [\n \"string\"\n ]\n }\n },\n \"required\": [\n \"cron\"\n ],\n \"description\": \"How often the monitor will run\"\n },\n \"behavior\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"search\",\n \"default\": \"search\"\n },\n \"config\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 10000,\n \"description\": \"The query to search for. By default, the query from the last search is used.\"\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 1000\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"maxItems\": 5,\n \"description\": \"The criteria to search for. By default, the criteria from the last search is used.\"\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"exclusiveMinimum\": 0,\n \"description\": \"The maximum number of results to find\"\n },\n \"behavior\": {\n \"default\": \"append\",\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"override\",\n \"append\"\n ],\n \"description\": \"The behaviour of the Search when it is added to a Webset.\"\n }\n },\n \"required\": [\n \"count\"\n ],\n \"description\": \"Specify the search parameters for the Monitor.\\n\\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided.\"\n }\n },\n \"required\": [\n \"type\",\n \"config\"\n ],\n \"description\": \"Behavior to perform when monitor runs\"\n },\n \"metadata\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ]\n }\n }\n },\n \"required\": [\n \"websetId\",\n \"cadence\",\n \"behavior\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateResearchRequest.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateResearchRequest.json new file mode 100644 index 00000000..b073d844 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateResearchRequest.json @@ -0,0 +1,104 @@ +{ + "name": "CreateResearchRequest", + "fully_qualified_name": "ExaApi.CreateResearchRequest@0.1.0", + "description": "Create a new research request.\n\nUse this tool to initiate a new research request when you need to gather specific information or data.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "research_request_details", + "required": true, + "description": "JSON object containing details of the research request including parameters and criteria.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'ResearchController_createResearch'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/research/v1", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "research_request_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"model\": {\n \"default\": \"exa-research\",\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"exa-research\",\n \"exa-research-pro\"\n ]\n },\n \"instructions\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 4096,\n \"description\": \"Instructions for what research should be conducted\"\n },\n \"outputSchema\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {}\n }\n },\n \"required\": [\n \"instructions\"\n ],\n \"examples\": [\n {\n \"model\": \"exa-research\",\n \"instructions\": \"What species of ant are similar to honeypot ants?\"\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebhookForNotifications.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebhookForNotifications.json new file mode 100644 index 00000000..acf20b37 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebhookForNotifications.json @@ -0,0 +1,104 @@ +{ + "name": "CreateWebhookForNotifications", + "fully_qualified_name": "ExaApi.CreateWebhookForNotifications@0.1.0", + "description": "Create webhooks to receive event notifications.\n\nThis tool allows you to set up webhooks for receiving notifications about specific events in your Websets. Upon creation, you'll specify the events to monitor and the destination URL for the notifications. The webhook activates immediately, and you'll receive a secret key for signature verification, visible only once at this point.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webhook_configuration", + "required": true, + "description": "A JSON object detailing the events to monitor and the destination URL for notifications.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'webhooks-create'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/webhooks", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "webhook_configuration", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"events\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"webset.created\",\n \"webset.deleted\",\n \"webset.paused\",\n \"webset.idle\",\n \"webset.search.created\",\n \"webset.search.canceled\",\n \"webset.search.completed\",\n \"webset.search.updated\",\n \"import.created\",\n \"import.completed\",\n \"webset.item.created\",\n \"webset.item.enriched\",\n \"monitor.created\",\n \"monitor.updated\",\n \"monitor.deleted\",\n \"monitor.run.created\",\n \"monitor.run.completed\",\n \"webset.export.created\",\n \"webset.export.completed\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 19,\n \"description\": \"The events to trigger the webhook\"\n },\n \"url\": {\n \"type\": [\n \"string\"\n ],\n \"format\": \"uri\",\n \"description\": \"The URL to send the webhook to\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"events\",\n \"url\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebset.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebset.json new file mode 100644 index 00000000..10118eff --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebset.json @@ -0,0 +1,104 @@ +{ + "name": "CreateWebset", + "fully_qualified_name": "ExaApi.CreateWebset@0.1.0", + "description": "Create a new Webset with optional configurations.\n\nThis tool creates a new Webset with optional search, import, and enrichment configurations. The Webset processing starts automatically once it's created. You can specify an `externalId` for easier integration with your own identifiers.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_configuration", + "required": true, + "description": "A JSON object detailing optional search, import, and enrichment configurations for the Webset. Include any necessary identifiers like `externalId`.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-create'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "webset_configuration", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"search\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Natural language search query describing what you are looking for.\\n\\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\\n\\nAny URLs provided will be crawled and used as additional context for the search.\",\n \"examples\": [\n \"Marketing agencies based in the US, that focus on consumer products.\",\n \"AI startups in Europe that raised Series A funding in 2024\",\n \"SaaS companies with 50-200 employees in the fintech space\"\n ]\n },\n \"count\": {\n \"default\": 10,\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"description\": \"Number of Items the Webset will attempt to find.\\n\\nThe actual number of Items found may be less than this number depending on the search complexity.\"\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"The description of the criterion\"\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 5,\n \"description\": \"Criteria every item is evaluated against.\\n\\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control.\"\n },\n \"recall\": {\n \"type\": [\n \"boolean\"\n ],\n \"description\": \"Whether to provide an estimate of how many total relevant results could exist for this search.\\nResult of the analysis will be available in the `recall` field within the search request.\"\n },\n \"exclude\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to exclude.\"\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search.\"\n },\n \"scope\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to search.\"\n },\n \"relationship\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"definition\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"What the relationship of the entities you hope to find is relative to the entities contained in the provided source.\"\n },\n \"limit\": {\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"maximum\": 10\n }\n },\n \"required\": [\n \"definition\",\n \"limit\"\n ]\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Limit the search to specific sources (existing imports or websets). Any results found within these sources matching the search criteria will be included in the Webset.\"\n }\n },\n \"required\": [\n \"query\"\n ],\n \"description\": \"Create initial search for the Webset.\"\n },\n \"import\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to search.\"\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Import data from existing Websets and Imports into this Webset.\"\n },\n \"enrichments\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Provide a description of the enrichment task you want to perform to each Webset Item.\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"text\",\n \"date\",\n \"number\",\n \"options\",\n \"email\",\n \"phone\",\n \"url\"\n ],\n \"description\": \"Format of the enrichment response.\\n\\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here.\"\n },\n \"options\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The label of the option\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 150,\n \"description\": \"When the format is options, the different options for the enrichment agent to choose from.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"description\": \"Add enrichments to extract additional data from found items.\\n\\nEnrichments automatically search for and extract specific information (like contact details, funding data, employee counts, etc.) from each item added to your Webset.\"\n },\n \"exclude\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to exclude.\"\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Global exclusion sources (existing imports or websets) that apply to all operations within this Webset. Any results found within these sources will be omitted across all search and import operations.\"\n },\n \"externalId\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 300,\n \"description\": \"The external identifier for the webset.\\n\\nYou can use this to reference the Webset by your own internal identifiers.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"examples\": [\n {\n \"search\": {\n \"query\": \"Marketing agencies based in the US, that focus on consumer products.\",\n \"count\": 10\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetEnrichment.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetEnrichment.json new file mode 100644 index 00000000..e1684987 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetEnrichment.json @@ -0,0 +1,137 @@ +{ + "name": "CreateWebsetEnrichment", + "fully_qualified_name": "ExaApi.CreateWebsetEnrichment@0.1.0", + "description": "Create an enrichment for a specified webset.\n\nThis tool is used to create an enrichment for a given webset. It should be called when there is a need to enhance a webset with additional data or features.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The ID or external ID of the webset to enrich.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "enrichment_details", + "required": true, + "description": "A JSON object containing the details required to create the enrichment for the webset.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-enrichments-create'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/enrichments", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "enrichment_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Provide a description of the enrichment task you want to perform to each Webset Item.\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"text\",\n \"date\",\n \"number\",\n \"options\",\n \"email\",\n \"phone\",\n \"url\"\n ],\n \"description\": \"Format of the enrichment response.\\n\\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here.\"\n },\n \"options\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The label of the option\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 150,\n \"description\": \"When the format is options, the different options for the enrichment agent to choose from.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"description\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetSearch.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetSearch.json new file mode 100644 index 00000000..a31d8ed2 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/CreateWebsetSearch.json @@ -0,0 +1,137 @@ +{ + "name": "CreateWebsetSearch", + "fully_qualified_name": "ExaApi.CreateWebsetSearch@0.1.0", + "description": "Create a new search for a specified webset.\n\nUse this tool to create a new search within a webset, reusing previous search results and applying new criteria.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_id", + "required": true, + "description": "The unique identifier for the Webset you want to create a search in.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "search_criteria", + "required": true, + "description": "JSON object representing new search criteria for the webset. This specifies the parameters or conditions for the new search.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-searches-create'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/searches", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_id", + "description": "The id of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "search_criteria", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"description\": \"Number of Items the Search will attempt to find.\\n\\nThe actual number of Items found may be less than this number depending on the query complexity.\"\n },\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Natural language search query describing what you are looking for.\\n\\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\\n\\nAny URLs provided will be crawled and used as additional context for the search.\",\n \"examples\": [\n \"Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city\",\n \"AI startups in Europe that raised Series A funding in 2024\",\n \"SaaS companies with 50-200 employees in the fintech space\"\n ]\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"The description of the criterion\"\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 5,\n \"description\": \"Criteria every item is evaluated against.\\n\\nIt's not required to provide your own criteria, we automatically detect the criteria from all the information provided in the query. Only use this when you need more fine control.\"\n },\n \"exclude\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"description\": \"The ID of the source to exclude.\",\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Sources (existing imports or websets) to exclude from search results. Any results found within these sources will be omitted to prevent finding them during search.\"\n },\n \"scope\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"source\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"import\",\n \"webset\"\n ]\n },\n \"id\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"description\": \"The ID of the source to search.\"\n },\n \"relationship\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"definition\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"What the relationship of the entities you hope to find is relative to the entities contained in the provided source.\"\n },\n \"limit\": {\n \"type\": [\n \"number\"\n ],\n \"minimum\": 1,\n \"maximum\": 10\n }\n },\n \"required\": [\n \"definition\",\n \"limit\"\n ]\n }\n },\n \"required\": [\n \"source\",\n \"id\"\n ]\n },\n \"description\": \"Limit the search to specific sources (existing imports). Any results found within these sources matching the search criteria will be included in the Webset.\"\n },\n \"recall\": {\n \"type\": [\n \"boolean\"\n ],\n \"description\": \"Whether to provide an estimate of how many total relevant results could exist for this search.\\nResult of the analysis will be available in the `recall` field within the search request.\"\n },\n \"behavior\": {\n \"type\": \"string\",\n \"enum\": [\n \"override\",\n \"append\"\n ]\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n },\n \"required\": [\n \"count\",\n \"query\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteEnrichment.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteEnrichment.json new file mode 100644 index 00000000..d63371d1 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteEnrichment.json @@ -0,0 +1,137 @@ +{ + "name": "DeleteEnrichment", + "fully_qualified_name": "ExaApi.DeleteEnrichment@0.1.0", + "description": "Delete an enrichment and cancel running processes.\n\nUse this tool to delete an enrichment, cancel any running processes, and remove all generated enrichment results.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_id", + "required": true, + "description": "The ID or external ID of the Webset to identify which enrichment to delete.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "enrichment_id", + "required": true, + "description": "The unique identifier of the enrichment to be deleted.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-enrichments-delete'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}", + "http_method": "DELETE", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_id", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "enrichment_id", + "description": "The id of the Enrichment", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteImport.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteImport.json new file mode 100644 index 00000000..9f3cdc25 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteImport.json @@ -0,0 +1,104 @@ +{ + "name": "DeleteImport", + "fully_qualified_name": "ExaApi.DeleteImport@0.1.0", + "description": "Delete an import by its ID.\n\nUse this tool to delete an import record when you have the import ID.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "import_id", + "required": true, + "description": "The unique identifier of the import to be deleted.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'imports-delete'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/imports/{id}", + "http_method": "DELETE", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "import_id", + "description": "The id of the Import", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteMonitor.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteMonitor.json new file mode 100644 index 00000000..4ae05c31 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteMonitor.json @@ -0,0 +1,104 @@ +{ + "name": "DeleteMonitor", + "fully_qualified_name": "ExaApi.DeleteMonitor@0.1.0", + "description": "Deletes a specified monitor using its ID.\n\nUse this tool to delete a monitor by providing its ID. It should be called when you need to remove a monitor from the system.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "monitor_id", + "required": true, + "description": "The unique identifier for the monitor to be deleted.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-delete'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors/{id}", + "http_method": "DELETE", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "monitor_id", + "description": "The id of the Monitor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebset.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebset.json new file mode 100644 index 00000000..4a2a5851 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebset.json @@ -0,0 +1,104 @@ +{ + "name": "DeleteWebset", + "fully_qualified_name": "ExaApi.DeleteWebset@0.1.0", + "description": "Deletes a Webset and its associated items.\n\nUse this tool to permanently delete a Webset and all its associated items. Once deleted, it cannot be recovered.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The unique identifier or external ID of the Webset to delete.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-delete'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{id}", + "http_method": "DELETE", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebsetItem.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebsetItem.json new file mode 100644 index 00000000..04d5237b --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/DeleteWebsetItem.json @@ -0,0 +1,137 @@ +{ + "name": "DeleteWebsetItem", + "fully_qualified_name": "ExaApi.DeleteWebsetItem@0.1.0", + "description": "Delete an item from a webset and cancel its enrichment process.\n\nUse this tool to remove an item from the specified webset. This will also cancel any ongoing enrichment process associated with the item.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The ID or external ID of the Webset from which the item will be deleted.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "webset_item_id", + "required": true, + "description": "The unique identifier of the item to be deleted from the webset.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset item" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-items-delete'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/items/{id}", + "http_method": "DELETE", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "webset_item_id", + "description": "The id of the Webset item", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset item" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/FindSimilarLinks.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/FindSimilarLinks.json new file mode 100644 index 00000000..6b67606f --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/FindSimilarLinks.json @@ -0,0 +1,104 @@ +{ + "name": "FindSimilarLinks", + "fully_qualified_name": "ExaApi.FindSimilarLinks@0.1.0", + "description": "Find similar links to a given link.\n\nThis tool finds links similar to the provided link and can optionally retrieve their contents. It should be called when a user needs to discover related web pages or resources.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "input_link_details", + "required": true, + "description": "JSON object containing the link to find similarities for. May include optional flags for retrieving content.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'findSimilar'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/findSimilar", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "input_link_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"url\": {\n \"type\": \"string\",\n \"example\": \"https://arxiv.org/abs/2307.06435\",\n \"description\": \"The url for which you would like to find similar links.\"\n }\n },\n \"required\": [\n \"url\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"numResults\": {\n \"type\": \"integer\",\n \"maximum\": 100,\n \"default\": 10,\n \"minimum\": 1,\n \"description\": \"Number of results to return (up to thousands of results available for custom plans)\",\n \"example\": 10\n },\n \"includeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to include in the search. If specified, results will only come from these domains.\",\n \"example\": [\n \"arxiv.org\",\n \"paperswithcode.com\"\n ]\n },\n \"excludeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to exclude from search results. If specified, no results will be returned from these domains.\"\n },\n \"startCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"startPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date after this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date before this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"includeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.\",\n \"example\": [\n \"large language model\"\n ]\n },\n \"excludeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.\",\n \"example\": [\n \"course\"\n ]\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n },\n \"contents\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"title\": \"Simple text retrieval\",\n \"description\": \"If true, returns full page text with default settings. If false, disables text return.\"\n },\n {\n \"type\": \"object\",\n \"title\": \"Advanced text options\",\n \"description\": \"Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit for the full page text. Useful for controlling response size and API costs.\",\n \"example\": 1000\n },\n \"includeHtmlTags\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Include HTML tags in the response, which can help LLMs understand text structure and formatting.\",\n \"example\": false\n }\n }\n }\n ]\n },\n \"highlights\": {\n \"type\": \"object\",\n \"description\": \"Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.\",\n \"properties\": {\n \"numSentences\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of sentences to return for each snippet.\",\n \"example\": 1\n },\n \"highlightsPerUrl\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of snippets to return for each result.\",\n \"example\": 1\n },\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query to direct the LLM's selection of highlights.\",\n \"example\": \"Key advancements\"\n }\n }\n },\n \"summary\": {\n \"type\": \"object\",\n \"description\": \"Summary of the webpage\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query for the LLM-generated summary.\",\n \"example\": \"Main developments\"\n },\n \"schema\": {\n \"type\": \"object\",\n \"description\": \"JSON schema for structured output from summary. \\nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\\n\",\n \"example\": {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Title\",\n \"type\": \"object\",\n \"properties\": {\n \"Property 1\": {\n \"type\": \"string\",\n \"description\": \"Description\"\n },\n \"Property 2\": {\n \"type\": \"string\",\n \"enum\": [\n \"option 1\",\n \"option 2\",\n \"option 3\"\n ],\n \"description\": \"Description\"\n }\n },\n \"required\": [\n \"Property 1\"\n ]\n }\n }\n }\n },\n \"livecrawl\": {\n \"type\": \"string\",\n \"enum\": [\n \"never\",\n \"fallback\",\n \"always\",\n \"preferred\"\n ],\n \"description\": \"Options for livecrawling pages.\\n'never': Disable livecrawling (default for neural search).\\n'fallback': Livecrawl when cache is empty (default for keyword search).\\n'always': Always livecrawl.\\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\\n\",\n \"example\": \"always\"\n },\n \"livecrawlTimeout\": {\n \"type\": \"integer\",\n \"default\": 10000,\n \"description\": \"The timeout for livecrawling in milliseconds.\",\n \"example\": 1000\n },\n \"subpages\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"The number of subpages to crawl. The actual number crawled may be limited by system constraints.\",\n \"example\": 1\n },\n \"subpageTarget\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ],\n \"description\": \"Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.\",\n \"example\": \"sources\"\n },\n \"extras\": {\n \"type\": \"object\",\n \"description\": \"Extra parameters to pass.\",\n \"properties\": {\n \"links\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of URLs to return from each webpage.\",\n \"example\": 1\n },\n \"imageLinks\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of images to return for each result.\",\n \"example\": 1\n }\n }\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": true, + "validate_request_body_schema": true + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GenerateAnswerSummary.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GenerateAnswerSummary.json new file mode 100644 index 00000000..09c62d14 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GenerateAnswerSummary.json @@ -0,0 +1,170 @@ +{ + "name": "GenerateAnswerSummary", + "fully_qualified_name": "ExaApi.GenerateAnswerSummary@0.1.0", + "description": "Retrieve direct answers or detailed summaries with citations.\n\nUse this tool to perform a search based on a query. It generates either a direct answer or a detailed summary with citations, depending on the nature of the query.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "search_query", + "required": true, + "description": "The question or query to be answered or summarized.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The question or query to answer." + }, + "inferrable": true, + "http_endpoint_parameter_name": "query" + }, + { + "name": "enable_streaming_response", + "required": false, + "description": "Return the response as a server-sent events (SSE) stream if set to true.", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "If true, the response is returned as a server-sent events (SSS) stream." + }, + "inferrable": true, + "http_endpoint_parameter_name": "stream" + }, + { + "name": "include_full_text", + "required": false, + "description": "If true, the response includes full text content in the search results.", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "If true, the response includes full text content in the search results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "text" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'answer'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/answer", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "query", + "tool_parameter_name": "search_query", + "description": "The question or query to answer.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The question or query to answer." + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "stream", + "tool_parameter_name": "enable_streaming_response", + "description": "If true, the response is returned as a server-sent events (SSS) stream.", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "If true, the response is returned as a server-sent events (SSS) stream." + }, + "accepted_as": "body", + "required": false, + "deprecated": false, + "default": false, + "documentation_urls": [] + }, + { + "name": "text", + "tool_parameter_name": "include_full_text", + "description": "If true, the response includes full text content in the search results", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "If true, the response includes full text content in the search results" + }, + "accepted_as": "body", + "required": false, + "deprecated": false, + "default": false, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": \"object\",\n \"required\": [\n \"query\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"The question or query to answer.\",\n \"example\": \"What is the latest valuation of SpaceX?\",\n \"minLength\": 1\n },\n \"stream\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"If true, the response is returned as a server-sent events (SSS) stream.\"\n },\n \"text\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"If true, the response includes full text content in the search results\"\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetContentDetails.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetContentDetails.json new file mode 100644 index 00000000..0cab508c --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetContentDetails.json @@ -0,0 +1,104 @@ +{ + "name": "GetContentDetails", + "fully_qualified_name": "ExaApi.GetContentDetails@0.1.0", + "description": "Retrieve details about specific content.\n\nUse this tool to retrieve detailed information about specific content from the EXA service. It should be called when content details are needed for further processing or display.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "content_request_data", + "required": true, + "description": "The JSON data containing parameters to specify which content details to retrieve.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'getContents'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/contents", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "content_request_data", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": \"object\",\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"urls\": {\n \"type\": \"array\",\n \"description\": \"Array of URLs to crawl (backwards compatible with 'ids' parameter).\",\n \"items\": {\n \"type\": \"string\"\n },\n \"example\": [\n \"https://arxiv.org/pdf/2307.06435\"\n ]\n },\n \"ids\": {\n \"type\": \"array\",\n \"deprecated\": true,\n \"description\": \"Deprecated - use 'urls' instead. Array of document IDs obtained from searches.\",\n \"items\": {\n \"type\": \"string\"\n },\n \"example\": [\n \"https://arxiv.org/pdf/2307.06435\"\n ]\n }\n },\n \"required\": [\n \"urls\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"title\": \"Simple text retrieval\",\n \"description\": \"If true, returns full page text with default settings. If false, disables text return.\"\n },\n {\n \"type\": \"object\",\n \"title\": \"Advanced text options\",\n \"description\": \"Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit for the full page text. Useful for controlling response size and API costs.\",\n \"example\": 1000\n },\n \"includeHtmlTags\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Include HTML tags in the response, which can help LLMs understand text structure and formatting.\",\n \"example\": false\n }\n }\n }\n ]\n },\n \"highlights\": {\n \"type\": \"object\",\n \"description\": \"Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.\",\n \"properties\": {\n \"numSentences\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of sentences to return for each snippet.\",\n \"example\": 1\n },\n \"highlightsPerUrl\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of snippets to return for each result.\",\n \"example\": 1\n },\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query to direct the LLM's selection of highlights.\",\n \"example\": \"Key advancements\"\n }\n }\n },\n \"summary\": {\n \"type\": \"object\",\n \"description\": \"Summary of the webpage\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query for the LLM-generated summary.\",\n \"example\": \"Main developments\"\n },\n \"schema\": {\n \"type\": \"object\",\n \"description\": \"JSON schema for structured output from summary. \\nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\\n\",\n \"example\": {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Title\",\n \"type\": \"object\",\n \"properties\": {\n \"Property 1\": {\n \"type\": \"string\",\n \"description\": \"Description\"\n },\n \"Property 2\": {\n \"type\": \"string\",\n \"enum\": [\n \"option 1\",\n \"option 2\",\n \"option 3\"\n ],\n \"description\": \"Description\"\n }\n },\n \"required\": [\n \"Property 1\"\n ]\n }\n }\n }\n },\n \"livecrawl\": {\n \"type\": \"string\",\n \"enum\": [\n \"never\",\n \"fallback\",\n \"always\",\n \"preferred\"\n ],\n \"description\": \"Options for livecrawling pages.\\n'never': Disable livecrawling (default for neural search).\\n'fallback': Livecrawl when cache is empty (default for keyword search).\\n'always': Always livecrawl.\\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\\n\",\n \"example\": \"always\"\n },\n \"livecrawlTimeout\": {\n \"type\": \"integer\",\n \"default\": 10000,\n \"description\": \"The timeout for livecrawling in milliseconds.\",\n \"example\": 1000\n },\n \"subpages\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"The number of subpages to crawl. The actual number crawled may be limited by system constraints.\",\n \"example\": 1\n },\n \"subpageTarget\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ],\n \"description\": \"Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.\",\n \"example\": \"sources\"\n },\n \"extras\": {\n \"type\": \"object\",\n \"description\": \"Extra parameters to pass.\",\n \"properties\": {\n \"links\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of URLs to return from each webpage.\",\n \"example\": 1\n },\n \"imageLinks\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of images to return for each result.\",\n \"example\": 1\n }\n }\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": true, + "validate_request_body_schema": true + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEnrichmentDetails.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEnrichmentDetails.json new file mode 100644 index 00000000..6d9c6563 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEnrichmentDetails.json @@ -0,0 +1,137 @@ +{ + "name": "GetEnrichmentDetails", + "fully_qualified_name": "ExaApi.GetEnrichmentDetails@0.1.0", + "description": "Retrieve detailed information about a specific enrichment.\n\nUse this tool to get detailed information about a specific enrichment in a webset by providing the webset and enrichment IDs.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The ID or external ID of the webset to retrieve enrichment details for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "enrichment_id", + "required": true, + "description": "The unique identifier for the specific enrichment you want to retrieve within the webset.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-enrichments-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "enrichment_id", + "description": "The id of the Enrichment", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Enrichment" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEventById.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEventById.json new file mode 100644 index 00000000..9a5f65bd --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetEventById.json @@ -0,0 +1,104 @@ +{ + "name": "GetEventById", + "fully_qualified_name": "ExaApi.GetEventById@0.1.0", + "description": "Retrieve details of an event using its ID.\n\nUse this tool to obtain information about a specific event by providing its unique identifier.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "event_id", + "required": true, + "description": "The unique identifier of the event to retrieve details for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the event" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'events-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/events/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "event_id", + "description": "The id of the event", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the event" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetResearchById.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetResearchById.json new file mode 100644 index 00000000..4cbe56b1 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetResearchById.json @@ -0,0 +1,170 @@ +{ + "name": "GetResearchById", + "fully_qualified_name": "ExaApi.GetResearchById@0.1.0", + "description": "Retrieve research information using a specific ID.\n\nUse this tool to obtain detailed research information by providing a specific research ID. Supports real-time updates with streaming.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "enable_streaming", + "required": true, + "description": "Set to 'true' to receive real-time streaming updates of the research information.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "stream" + }, + { + "name": "event_filter", + "required": true, + "description": "Specify the events to filter for in the research retrieval. Accepts a comma-separated list of event types.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "events" + }, + { + "name": "research_id", + "required": true, + "description": "A string representing the unique identifier of the research to be retrieved.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "researchId" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'ResearchController_getResearch'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/research/v1/{researchId}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "stream", + "tool_parameter_name": "enable_streaming", + "description": "", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "query", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "events", + "tool_parameter_name": "event_filter", + "description": "", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "query", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "researchId", + "tool_parameter_name": "research_id", + "description": "", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSearchById.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSearchById.json new file mode 100644 index 00000000..32686151 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSearchById.json @@ -0,0 +1,137 @@ +{ + "name": "GetSearchById", + "fully_qualified_name": "ExaApi.GetSearchById@0.1.0", + "description": "Retrieve a search by its ID.\n\nUse this tool to get detailed information about a specific search by providing its ID.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_id", + "required": true, + "description": "The ID of the Webset to retrieve the specific search.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "search_id", + "required": true, + "description": "The ID of the search to retrieve details for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Search" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-searches-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/searches/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_id", + "description": "The id of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "search_id", + "description": "The id of the Search", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Search" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificImport.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificImport.json new file mode 100644 index 00000000..a27f958e --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificImport.json @@ -0,0 +1,104 @@ +{ + "name": "GetSpecificImport", + "fully_qualified_name": "ExaApi.GetSpecificImport@0.1.0", + "description": "Retrieve details of a specific import.\n\nUse this tool to get detailed information about a particular import by providing its ID.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "import_id", + "required": true, + "description": "The unique identifier for the specific import to retrieve details about.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'imports-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/imports/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "import_id", + "description": "The id of the Import", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitor.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitor.json new file mode 100644 index 00000000..103aa2e9 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitor.json @@ -0,0 +1,104 @@ +{ + "name": "GetSpecificMonitor", + "fully_qualified_name": "ExaApi.GetSpecificMonitor@0.1.0", + "description": "Retrieve details of a specific monitor using its ID.\n\nThis tool is used to obtain information about a particular monitor by providing its unique ID. Call this tool when you need to get specific details about a monitor.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "monitor_id", + "required": true, + "description": "The unique identifier of the monitor to retrieve details for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "monitor_id", + "description": "The id of the Monitor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitorRun.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitorRun.json new file mode 100644 index 00000000..71c8b23c --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetSpecificMonitorRun.json @@ -0,0 +1,137 @@ +{ + "name": "GetSpecificMonitorRun", + "fully_qualified_name": "ExaApi.GetSpecificMonitorRun@0.1.0", + "description": "Retrieve details of a specific monitor run.\n\nThis tool retrieves details of a specific monitor run by using the monitor ID and run ID. It should be called when you need to access information about a particular monitor run.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "monitor_id", + "required": true, + "description": "The unique identifier of the monitor to retrieve the run for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor to get the run for" + }, + "inferrable": true, + "http_endpoint_parameter_name": "monitor" + }, + { + "name": "run_id", + "required": true, + "description": "The unique identifier of the specific run to retrieve details for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-runs-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors/{monitor}/runs/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "monitor", + "tool_parameter_name": "monitor_id", + "description": "The id of the Monitor to get the run for", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor to get the run for" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "run_id", + "description": "", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhookInfo.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhookInfo.json new file mode 100644 index 00000000..8c929e67 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhookInfo.json @@ -0,0 +1,104 @@ +{ + "name": "GetWebhookInfo", + "fully_qualified_name": "ExaApi.GetWebhookInfo@0.1.0", + "description": "Retrieve details of a webhook using its ID.\n\nThis tool is used to get details about a specific webhook by providing its ID. It should be called when you need to access information about a particular webhook. The secret associated with the webhook is not included for security reasons.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webhook_id", + "required": true, + "description": "The unique identifier for the webhook you want details about.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'webhooks-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/webhooks/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "webhook_id", + "description": "The id of the webhook", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhooksList.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhooksList.json new file mode 100644 index 00000000..f8398bcf --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebhooksList.json @@ -0,0 +1,137 @@ +{ + "name": "GetWebhooksList", + "fully_qualified_name": "ExaApi.GetWebhooksList@0.1.0", + "description": "Retrieve a paginated list of all webhooks in your account.\n\nUse this tool to get all the webhooks associated with your account, with options to paginate through results using limit and cursor parameters.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "pagination_cursor", + "required": false, + "description": "The cursor used to navigate through pages of results for webhooks.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "results_per_page", + "required": false, + "description": "The number of webhooks to return per page, up to a maximum of 200.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'webhooks-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/webhooks", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "results_per_page", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 25, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetDetails.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetDetails.json new file mode 100644 index 00000000..0354400f --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetDetails.json @@ -0,0 +1,137 @@ +{ + "name": "GetWebsetDetails", + "fully_qualified_name": "ExaApi.GetWebsetDetails@0.1.0", + "description": "Retrieve detailed information about a specific webset.\n\nThis tool is used to obtain the details of a specific webset using its unique identifier. Call this when you need information related to a particular webset.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The unique identifier or external ID for the Webset to retrieve.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset." + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "resources_to_expand", + "required": false, + "description": "A list of resources to include in the response for additional details.", + "value_schema": { + "val_type": "array", + "inner_val_type": "string", + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Expand the response with the specified resources" + }, + "inferrable": true, + "http_endpoint_parameter_name": "expand" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "expand", + "tool_parameter_name": "resources_to_expand", + "description": "Expand the response with the specified resources", + "value_schema": { + "val_type": "array", + "inner_val_type": "string", + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Expand the response with the specified resources" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset." + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetItem.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetItem.json new file mode 100644 index 00000000..87178827 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/GetWebsetItem.json @@ -0,0 +1,137 @@ +{ + "name": "GetWebsetItem", + "fully_qualified_name": "ExaApi.GetWebsetItem@0.1.0", + "description": "Retrieve a specific Webset Item by ID.\n\nThis tool is used to retrieve information about a specific Webset Item using its ID. It should be called when you need detailed information about a particular item associated with a Webset.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The ID or external ID of the Webset to identify the desired Webset from which the item is to be retrieved.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "webset_item_id", + "required": true, + "description": "The unique identifier of the Webset item to retrieve.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset item" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-items-get'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/items/{id}", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "webset_item_id", + "description": "The id of the Webset item", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset item" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListImports.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListImports.json new file mode 100644 index 00000000..dfabaec9 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListImports.json @@ -0,0 +1,137 @@ +{ + "name": "ListImports", + "fully_qualified_name": "ExaApi.ListImports@0.1.0", + "description": "Retrieve all import entries for the Webset.\n\nUse this tool to get a comprehensive list of all imports associated with the Webset, useful for tracking or auditing purposes.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "pagination_cursor", + "required": false, + "description": "String used for paginating through results. Pass it to retrieve the next set of results.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "results_limit", + "required": false, + "description": "Specify the maximum number of import results to return.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'imports-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/imports", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "results_limit", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 25, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListMonitorRuns.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListMonitorRuns.json new file mode 100644 index 00000000..3a1ff046 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListMonitorRuns.json @@ -0,0 +1,104 @@ +{ + "name": "ListMonitorRuns", + "fully_qualified_name": "ExaApi.ListMonitorRuns@0.1.0", + "description": "Lists all runs for a given monitor.\n\nUse this tool to retrieve a list of all runs associated with a specific monitor. It's helpful for tracking and analyzing past monitor activities.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "monitor_id", + "required": true, + "description": "The ID of the monitor to list all associated runs.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor to list runs for" + }, + "inferrable": true, + "http_endpoint_parameter_name": "monitor" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-runs-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors/{monitor}/runs", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "monitor", + "tool_parameter_name": "monitor_id", + "description": "The id of the Monitor to list runs for", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor to list runs for" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListResearchRequests.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListResearchRequests.json new file mode 100644 index 00000000..a716e7a2 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListResearchRequests.json @@ -0,0 +1,137 @@ +{ + "name": "ListResearchRequests", + "fully_qualified_name": "ExaApi.ListResearchRequests@0.1.0", + "description": "Retrieve a paginated list of research requests.\n\nUse this tool to obtain a paginated list of all research requests. Ideal for reviewing or analyzing current research queries.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "pagination_cursor", + "required": false, + "description": "A string representing the position in the paginated results to continue retrieving data from.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "results_limit", + "required": false, + "description": "Specifies the number of research requests to return in the response. Helps manage pagination effectively.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'ResearchController_listResearch'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/research/v1", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "results_limit", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 10, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListSystemEvents.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListSystemEvents.json new file mode 100644 index 00000000..6c45f614 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListSystemEvents.json @@ -0,0 +1,236 @@ +{ + "name": "ListSystemEvents", + "fully_qualified_name": "ExaApi.ListSystemEvents@0.1.0", + "description": "Retrieve a list of all system events.\n\nCall this tool to get a detailed list of events that have occurred within the system. Useful for auditing, monitoring, or reviewing activities. Supports pagination through a cursor parameter.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "pagination_cursor", + "required": false, + "description": "Cursor for paginating through event results. Use it to navigate through pages of events.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "results_limit", + "required": false, + "description": "Specify the number of event results to return. This controls the size of the result set for a single request.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + }, + { + "name": "event_types_filter", + "required": false, + "description": "Filter events by specifying an array of event type names.", + "value_schema": { + "val_type": "array", + "inner_val_type": "string", + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The types of events to filter by" + }, + "inferrable": true, + "http_endpoint_parameter_name": "types" + }, + { + "name": "filter_created_before", + "required": false, + "description": "Filter events created before or at this timestamp (inclusive). Provide a valid ISO 8601 datetime string in UTC.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter events created before or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC." + }, + "inferrable": true, + "http_endpoint_parameter_name": "createdBefore" + }, + { + "name": "created_after", + "required": false, + "description": "Filter events created after or at this timestamp. Use a valid ISO 8601 datetime string in UTC.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter events created after or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC." + }, + "inferrable": true, + "http_endpoint_parameter_name": "createdAfter" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'events-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/events", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "results_limit", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 25, + "documentation_urls": [] + }, + { + "name": "types", + "tool_parameter_name": "event_types_filter", + "description": "The types of events to filter by", + "value_schema": { + "val_type": "array", + "inner_val_type": "string", + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The types of events to filter by" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "createdBefore", + "tool_parameter_name": "filter_created_before", + "description": "Filter events created before or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter events created before or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC." + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "createdAfter", + "tool_parameter_name": "created_after", + "description": "Filter events created after or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter events created after or at this timestamp (inclusive). Must be a valid ISO 8601 datetime string. All times are in UTC." + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebhookAttempts.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebhookAttempts.json new file mode 100644 index 00000000..7e5f8751 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebhookAttempts.json @@ -0,0 +1,276 @@ +{ + "name": "ListWebhookAttempts", + "fully_qualified_name": "ExaApi.ListWebhookAttempts@0.1.0", + "description": "Retrieve and list all webhook attempt records.\n\nThis tool retrieves all attempts made by a specific webhook, ordered in descending order. It is useful for monitoring webhook activity and diagnosing issues.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webhook_id", + "required": true, + "description": "The unique identifier for the webhook to retrieve attempt records for.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The ID of the webhook" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "pagination_cursor", + "required": false, + "description": "A string used to paginate through the webhook attempt results.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "results_limit", + "required": false, + "description": "Specify the maximum number of webhook attempt records to return.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + }, + { + "name": "event_type_filter", + "required": false, + "description": "Filter webhook attempts by specifying the type of event, such as 'webset.created' or 'monitor.run.completed'.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ], + "properties": null, + "inner_properties": null, + "description": "The type of event to filter by" + }, + "inferrable": true, + "http_endpoint_parameter_name": "eventType" + }, + { + "name": "filter_by_successful_attempts", + "required": false, + "description": "Use 'true' to filter for successful webhook attempts and 'false' for unsuccessful ones.", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter attempts by their success status" + }, + "inferrable": true, + "http_endpoint_parameter_name": "successful" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'webhooks-attempts-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/webhooks/{id}/attempts", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "results_limit", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 25, + "documentation_urls": [] + }, + { + "name": "eventType", + "tool_parameter_name": "event_type_filter", + "description": "The type of event to filter by", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": [ + "webset.created", + "webset.deleted", + "webset.paused", + "webset.idle", + "webset.search.created", + "webset.search.canceled", + "webset.search.completed", + "webset.search.updated", + "import.created", + "import.completed", + "webset.item.created", + "webset.item.enriched", + "monitor.created", + "monitor.updated", + "monitor.deleted", + "monitor.run.created", + "monitor.run.completed", + "webset.export.created", + "webset.export.completed" + ], + "properties": null, + "inner_properties": null, + "description": "The type of event to filter by" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "successful", + "tool_parameter_name": "filter_by_successful_attempts", + "description": "Filter attempts by their success status", + "value_schema": { + "val_type": "boolean", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "Filter attempts by their success status" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "webhook_id", + "description": "The ID of the webhook", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The ID of the webhook" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsetItems.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsetItems.json new file mode 100644 index 00000000..c7f597cf --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsetItems.json @@ -0,0 +1,203 @@ +{ + "name": "ListWebsetItems", + "fully_qualified_name": "ExaApi.ListWebsetItems@0.1.0", + "description": "Retrieve a list of items from a specific webset.\n\nThis tool fetches items from a designated webset, allowing pagination with the 'cursor' parameter if needed.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The ID or external ID of the Webset to retrieve items from.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "pagination_cursor", + "required": false, + "description": "A string used to paginate through the results. Pass this to retrieve the next set of items in the webset.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "result_limit", + "required": false, + "description": "Specify the number of results to return. This controls the size of the page in a paginated response.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + }, + { + "name": "source_id", + "required": false, + "description": "The unique identifier for the source from which to retrieve items.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the source" + }, + "inferrable": true, + "http_endpoint_parameter_name": "sourceId" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-items-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/items", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "result_limit", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 20, + "documentation_urls": [] + }, + { + "name": "sourceId", + "tool_parameter_name": "source_id", + "description": "The id of the source", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the source" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "webset", + "tool_parameter_name": "webset_identifier", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsets.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsets.json new file mode 100644 index 00000000..e76390fb --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsets.json @@ -0,0 +1,137 @@ +{ + "name": "ListWebsets", + "fully_qualified_name": "ExaApi.ListWebsets@0.1.0", + "description": "Retrieve a list of available websets.\n\nUse this tool to obtain a list of websets. You can paginate through results using a cursor.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "pagination_cursor", + "required": false, + "description": "A string used to paginate through the list of Websets.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "websets_return_limit", + "required": false, + "description": "Specify the maximum number of Websets to return in the response.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of Websets to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "websets_return_limit", + "description": "The number of Websets to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of Websets to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 25, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsiteMonitors.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsiteMonitors.json new file mode 100644 index 00000000..fc3e7d22 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/ListWebsiteMonitors.json @@ -0,0 +1,170 @@ +{ + "name": "ListWebsiteMonitors", + "fully_qualified_name": "ExaApi.ListWebsiteMonitors@0.1.0", + "description": "Fetch all monitors associated with a website.\n\nUse this tool to retrieve a comprehensive list of all monitoring services set up for a specific website. This is helpful for maintenance, auditing, or upgrading processes.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "pagination_cursor", + "required": false, + "description": "The cursor for paginating through the monitor results.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "inferrable": true, + "http_endpoint_parameter_name": "cursor" + }, + { + "name": "results_limit", + "required": false, + "description": "Specifies the maximum number of monitor results to return. Use for pagination.", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "inferrable": true, + "http_endpoint_parameter_name": "limit" + }, + { + "name": "webset_id", + "required": false, + "description": "The unique identifier for the Webset to retrieve monitors for. This is required to specify which website's monitors you want to list.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset to list monitors for" + }, + "inferrable": true, + "http_endpoint_parameter_name": "websetId" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-list'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors", + "http_method": "GET", + "headers": {}, + "parameters": [ + { + "name": "cursor", + "tool_parameter_name": "pagination_cursor", + "description": "The cursor to paginate through the results", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The cursor to paginate through the results" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "limit", + "tool_parameter_name": "results_limit", + "description": "The number of results to return", + "value_schema": { + "val_type": "number", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The number of results to return" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": 25, + "documentation_urls": [] + }, + { + "name": "websetId", + "tool_parameter_name": "webset_id", + "description": "The id of the Webset to list monitors for", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Webset to list monitors for" + }, + "accepted_as": "query", + "required": false, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/PerformExaSearch.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/PerformExaSearch.json new file mode 100644 index 00000000..7603849a --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/PerformExaSearch.json @@ -0,0 +1,104 @@ +{ + "name": "PerformExaSearch", + "fully_qualified_name": "ExaApi.PerformExaSearch@0.1.0", + "description": "Conduct a search using Exa and retrieve relevant results.\n\nThis tool performs a search using the Exa prompt-engineered query system. It retrieves a list of relevant search results based on the query, with an optional feature to include content details.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "search_query", + "required": true, + "description": "The search query as a JSON object containing parameters for the Exa search. This object can include the main search term and any other required parameters for performing the search.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'search'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/search", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "search_query", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"example\": \"Latest developments in LLM capabilities\",\n \"description\": \"The query string for the search.\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"keyword\",\n \"neural\",\n \"fast\",\n \"auto\"\n ],\n \"description\": \"The type of search. Neural uses an embeddings-based model, keyword is google-like SERP, and auto (default) intelligently combines the two. Fast uses streamlined versions of the neural and keyword models.\",\n \"example\": \"auto\",\n \"default\": \"auto\"\n },\n \"category\": {\n \"type\": \"string\",\n \"enum\": [\n \"company\",\n \"research paper\",\n \"news\",\n \"pdf\",\n \"github\",\n \"tweet\",\n \"personal site\",\n \"linkedin profile\",\n \"financial report\"\n ],\n \"description\": \"A data category to focus on.\",\n \"example\": \"research paper\"\n },\n \"userLocation\": {\n \"type\": \"string\",\n \"description\": \"The two-letter ISO country code of the user, e.g. US.\",\n \"example\": \"US\"\n }\n },\n \"required\": [\n \"query\"\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"numResults\": {\n \"type\": \"integer\",\n \"maximum\": 100,\n \"default\": 10,\n \"minimum\": 1,\n \"description\": \"Number of results to return (up to thousands of results available for custom plans)\",\n \"example\": 10\n },\n \"includeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to include in the search. If specified, results will only come from these domains.\",\n \"example\": [\n \"arxiv.org\",\n \"paperswithcode.com\"\n ]\n },\n \"excludeDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of domains to exclude from search results. If specified, no results will be returned from these domains.\"\n },\n \"startCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled after this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endCrawlDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Crawl date refers to the date that Exa discovered a link. Results will include links that were crawled before this date. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"startPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date after this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-01-01\"\n },\n \"endPublishedDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Only links with a published date before this will be returned. Must be specified in ISO 8601 format.\",\n \"example\": \"2023-12-31\"\n },\n \"includeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words.\",\n \"example\": [\n \"large language model\"\n ]\n },\n \"excludeText\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of strings that must not be present in webpage text of results. Currently, only 1 string is supported, of up to 5 words. Checks from the first 1000 words of the webpage text.\",\n \"example\": [\n \"course\"\n ]\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n },\n \"contents\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"title\": \"Simple text retrieval\",\n \"description\": \"If true, returns full page text with default settings. If false, disables text return.\"\n },\n {\n \"type\": \"object\",\n \"title\": \"Advanced text options\",\n \"description\": \"Advanced options for controlling text extraction. Use this when you need to limit text length or include HTML structure.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit for the full page text. Useful for controlling response size and API costs.\",\n \"example\": 1000\n },\n \"includeHtmlTags\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Include HTML tags in the response, which can help LLMs understand text structure and formatting.\",\n \"example\": false\n }\n }\n }\n ]\n },\n \"highlights\": {\n \"type\": \"object\",\n \"description\": \"Text snippets the LLM identifies as most relevant from each page. We recommend you using context instead of highlights for LLMs.\",\n \"properties\": {\n \"numSentences\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of sentences to return for each snippet.\",\n \"example\": 1\n },\n \"highlightsPerUrl\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"The number of snippets to return for each result.\",\n \"example\": 1\n },\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query to direct the LLM's selection of highlights.\",\n \"example\": \"Key advancements\"\n }\n }\n },\n \"summary\": {\n \"type\": \"object\",\n \"description\": \"Summary of the webpage\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Custom query for the LLM-generated summary.\",\n \"example\": \"Main developments\"\n },\n \"schema\": {\n \"type\": \"object\",\n \"description\": \"JSON schema for structured output from summary. \\nSee https://json-schema.org/overview/what-is-jsonschema for JSON Schema documentation.\\n\",\n \"example\": {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Title\",\n \"type\": \"object\",\n \"properties\": {\n \"Property 1\": {\n \"type\": \"string\",\n \"description\": \"Description\"\n },\n \"Property 2\": {\n \"type\": \"string\",\n \"enum\": [\n \"option 1\",\n \"option 2\",\n \"option 3\"\n ],\n \"description\": \"Description\"\n }\n },\n \"required\": [\n \"Property 1\"\n ]\n }\n }\n }\n },\n \"livecrawl\": {\n \"type\": \"string\",\n \"enum\": [\n \"never\",\n \"fallback\",\n \"always\",\n \"preferred\"\n ],\n \"description\": \"Options for livecrawling pages.\\n'never': Disable livecrawling (default for neural search).\\n'fallback': Livecrawl when cache is empty (default for keyword search).\\n'always': Always livecrawl.\\n'preferred': Always try to livecrawl, but fall back to cache if crawling fails.\\n\",\n \"example\": \"always\"\n },\n \"livecrawlTimeout\": {\n \"type\": \"integer\",\n \"default\": 10000,\n \"description\": \"The timeout for livecrawling in milliseconds.\",\n \"example\": 1000\n },\n \"subpages\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"The number of subpages to crawl. The actual number crawled may be limited by system constraints.\",\n \"example\": 1\n },\n \"subpageTarget\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n ],\n \"description\": \"Keyword to find specific subpages of search results. Can be a single string or an array of strings, comma delimited.\",\n \"example\": \"sources\"\n },\n \"extras\": {\n \"type\": \"object\",\n \"description\": \"Extra parameters to pass.\",\n \"properties\": {\n \"links\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of URLs to return from each webpage.\",\n \"example\": 1\n },\n \"imageLinks\": {\n \"type\": \"integer\",\n \"default\": 0,\n \"description\": \"Number of images to return for each result.\",\n \"example\": 1\n }\n }\n },\n \"context\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"example\": true\n },\n {\n \"type\": \"object\",\n \"description\": \"Return page contents as a context string for LLM. When true, combines all result contents into one string. Context strings often perform better than highlights for LLMs.\",\n \"properties\": {\n \"maxCharacters\": {\n \"type\": \"integer\",\n \"description\": \"Maximum character limit.\",\n \"example\": 10000\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": true, + "validate_request_body_schema": true + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/PreviewSearchDecomposition.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/PreviewSearchDecomposition.json new file mode 100644 index 00000000..c3eff5a4 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/PreviewSearchDecomposition.json @@ -0,0 +1,104 @@ +{ + "name": "PreviewSearchDecomposition", + "fully_qualified_name": "ExaApi.PreviewSearchDecomposition@0.1.0", + "description": "Preview and analyze search query decomposition.\n\nThis tool previews how a search query will be decomposed before creating a webset, showing the detected entity type, generated search criteria, and available enrichment columns. Use it to understand the search interpretation before full webset creation.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "search_query_details", + "required": true, + "description": "A JSON object detailing the search query to preview. It includes elements like the search string and any additional parameters for analysis.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-preview'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/preview", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "requestBody", + "tool_parameter_name": "search_query_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Natural language search query describing what you are looking for.\\n\\nBe specific and descriptive about your requirements, characteristics, and any constraints that help narrow down the results.\",\n \"examples\": [\n \"Marketing agencies based in the US, that focus on consumer products. Get brands worked with and city\",\n \"AI startups in Europe that raised Series A funding in 2024\",\n \"SaaS companies with 50-200 employees in the fintech space\"\n ]\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n }\n },\n \"required\": [\n \"query\"\n ]\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/RemoveWebhook.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/RemoveWebhook.json new file mode 100644 index 00000000..57fb82c2 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/RemoveWebhook.json @@ -0,0 +1,104 @@ +{ + "name": "RemoveWebhook", + "fully_qualified_name": "ExaApi.RemoveWebhook@0.1.0", + "description": "Remove a webhook from your account.\n\nUse this tool to delete a webhook. Once deleted, it stops receiving notifications immediately and cannot be restored. You'll need to create a new webhook if you wish to reinstate it. Use when you need to stop a webhook permanently.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webhook_id", + "required": true, + "description": "The unique identifier of the webhook to remove. This is necessary for specifying which webhook to delete.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'webhooks-delete'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/webhooks/{id}", + "http_method": "DELETE", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "webhook_id", + "description": "The id of the webhook", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": null, + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateImportsConfiguration.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateImportsConfiguration.json new file mode 100644 index 00000000..2489b8cb --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateImportsConfiguration.json @@ -0,0 +1,137 @@ +{ + "name": "UpdateImportsConfiguration", + "fully_qualified_name": "ExaApi.UpdateImportsConfiguration@0.1.0", + "description": "Update an import configuration with new settings.\n\nUse this tool to update an existing import configuration by providing the necessary changes to its settings.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "import_id", + "required": true, + "description": "The identifier for the import configuration to be updated.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "import_configuration_details", + "required": true, + "description": "JSON object containing the new settings for the import configuration. Include all necessary fields that need to be updated.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'imports-update'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/imports/{id}", + "http_method": "PATCH", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "import_id", + "description": "The id of the Import", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Import" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "import_configuration_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"metadata\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ]\n }\n },\n \"title\": {\n \"type\": [\n \"string\"\n ]\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateMonitorConfiguration.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateMonitorConfiguration.json new file mode 100644 index 00000000..c48e9750 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateMonitorConfiguration.json @@ -0,0 +1,137 @@ +{ + "name": "UpdateMonitorConfiguration", + "fully_qualified_name": "ExaApi.UpdateMonitorConfiguration@0.1.0", + "description": "Update the configuration of a monitor.\n\nUse this tool to update the settings of an existing monitor. Provide the monitor ID and new configuration details to modify its setup.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "monitor_id", + "required": true, + "description": "The unique identifier for the monitor to update.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "monitor_configuration_details", + "required": true, + "description": "A JSON object containing the new configuration settings for the monitor.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'monitors-update'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/monitors/{id}", + "http_method": "PATCH", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "monitor_id", + "description": "The id of the Monitor", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the Monitor" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "monitor_configuration_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"status\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"enabled\",\n \"disabled\"\n ],\n \"description\": \"The status of the monitor.\"\n },\n \"metadata\": {\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ]\n }\n },\n \"cadence\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"cron\": {\n \"description\": \"Cron expression for monitor cadence (must be a valid Unix cron with 5 fields). The schedule must trigger at most once per day.\",\n \"type\": [\n \"string\"\n ]\n },\n \"timezone\": {\n \"description\": \"IANA timezone (e.g., \\\"America/New_York\\\")\",\n \"default\": \"Etc/UTC\",\n \"type\": [\n \"string\"\n ]\n }\n },\n \"required\": [\n \"cron\"\n ]\n },\n \"behavior\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"search\",\n \"default\": \"search\"\n },\n \"config\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"query\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 10000,\n \"description\": \"The query to search for. By default, the query from the last search is used.\"\n },\n \"criteria\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 1000\n }\n },\n \"required\": [\n \"description\"\n ]\n },\n \"maxItems\": 5,\n \"description\": \"The criteria to search for. By default, the criteria from the last search is used.\"\n },\n \"entity\": {\n \"oneOf\": [\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"company\",\n \"default\": \"company\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Company\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"person\",\n \"default\": \"person\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Person\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"article\",\n \"default\": \"article\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Article\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"research_paper\",\n \"default\": \"research_paper\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"title\": \"Research Paper\"\n },\n {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"const\": \"custom\",\n \"default\": \"custom\"\n },\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 2,\n \"maxLength\": 200\n }\n },\n \"required\": [\n \"type\",\n \"description\"\n ],\n \"title\": \"Custom\"\n }\n ]\n },\n \"count\": {\n \"type\": [\n \"number\"\n ],\n \"exclusiveMinimum\": 0,\n \"description\": \"The maximum number of results to find\"\n },\n \"behavior\": {\n \"default\": \"append\",\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"override\",\n \"append\"\n ],\n \"description\": \"The behaviour of the Search when it is added to a Webset.\"\n }\n },\n \"required\": [\n \"count\"\n ],\n \"description\": \"Specify the search parameters for the Monitor.\\n\\nBy default, the search parameters (query, entity and criteria) from the last search are used when no parameters are provided.\"\n }\n },\n \"required\": [\n \"type\",\n \"config\"\n ]\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebhookSettings.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebhookSettings.json new file mode 100644 index 00000000..a307d59d --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebhookSettings.json @@ -0,0 +1,137 @@ +{ + "name": "UpdateWebhookSettings", + "fully_qualified_name": "ExaApi.UpdateWebhookSettings@0.1.0", + "description": "Update a webhook's settings for events, URL, and metadata.\n\nUse this tool to modify a webhook's configuration, including the events it tracks, the URL for notifications, and any custom metadata. Changes are applied immediately, and the webhook's status remains the same.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webhook_id", + "required": true, + "description": "The unique identifier of the webhook to be updated.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "webhook_update_request_body", + "required": true, + "description": "JSON object containing webhook updates, such as events list, new URL, and metadata.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'webhooks-update'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/webhooks/{id}", + "http_method": "PATCH", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "webhook_id", + "description": "The id of the webhook", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id of the webhook" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "webhook_update_request_body", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"events\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"webset.created\",\n \"webset.deleted\",\n \"webset.paused\",\n \"webset.idle\",\n \"webset.search.created\",\n \"webset.search.canceled\",\n \"webset.search.completed\",\n \"webset.search.updated\",\n \"import.created\",\n \"import.completed\",\n \"webset.item.created\",\n \"webset.item.enriched\",\n \"monitor.created\",\n \"monitor.updated\",\n \"monitor.deleted\",\n \"monitor.run.created\",\n \"monitor.run.completed\",\n \"webset.export.created\",\n \"webset.export.completed\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 19,\n \"description\": \"The events to trigger the webhook\"\n },\n \"url\": {\n \"type\": [\n \"string\"\n ],\n \"format\": \"uri\",\n \"description\": \"The URL to send the webhook to\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": [\n \"object\"\n ],\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n }\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebset.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebset.json new file mode 100644 index 00000000..e81f6f4e --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebset.json @@ -0,0 +1,137 @@ +{ + "name": "UpdateWebset", + "fully_qualified_name": "ExaApi.UpdateWebset@0.1.0", + "description": "Update details of an existing webset.\n\nUse this tool to update the information of a specific webset identified by its ID. Ideal for modifying webset attributes when changes are needed.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_id", + "required": true, + "description": "The unique id or externalId of the Webset to be updated. Ensure it matches a valid Webset.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "webset_details", + "required": true, + "description": "A JSON object containing the details to update for the webset. This includes any attributes that need to be changed.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-update'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{id}", + "http_method": "POST", + "headers": {}, + "parameters": [ + { + "name": "id", + "tool_parameter_name": "webset_id", + "description": "The id or externalId of the Webset", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "The id or externalId of the Webset" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "webset_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n },\n \"nullable\": true\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebsetEnrichment.json b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebsetEnrichment.json new file mode 100644 index 00000000..682aa3a1 --- /dev/null +++ b/toolkits/exa_api/arcade_exa_api/wrapper_tools/UpdateWebsetEnrichment.json @@ -0,0 +1,170 @@ +{ + "name": "UpdateWebsetEnrichment", + "fully_qualified_name": "ExaApi.UpdateWebsetEnrichment@0.1.0", + "description": "Update an enrichment configuration for a webset.\n\nThis tool updates the enrichment configuration for a specified webset. It should be called when an existing enrichment configuration needs modification.", + "toolkit": { + "name": "ArcadeExaApi", + "description": null, + "version": "0.1.0" + }, + "input": { + "parameters": [ + { + "name": "webset_identifier", + "required": true, + "description": "The identifier of the webset to be updated. Provide the specific name or ID of the webset.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "webset" + }, + { + "name": "enrichment_configuration_id", + "required": true, + "description": "The unique identifier of the enrichment configuration to be updated.", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "id" + }, + { + "name": "enrichment_configuration_details", + "required": true, + "description": "A JSON object containing the details of the enrichment configuration to update.", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "inferrable": true, + "http_endpoint_parameter_name": "requestBody" + } + ] + }, + "output": { + "description": "Response from the API endpoint 'websets-enrichments-update'.", + "available_modes": [ + "value", + "error", + "null" + ], + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": null + } + }, + "requirements": { + "authorization": null, + "secrets": [ + { + "key": "EXA_API_KEY" + } + ], + "metadata": null + }, + "deprecation_message": null, + "metadata": { + "object_type": "api_wrapper_tool", + "version": "1.1.0", + "description": "Tools that enable LLMs to interact directly with the exa API." + }, + "http_endpoint": { + "metadata": { + "object_type": "http_endpoint", + "version": "1.2.0", + "description": "" + }, + "url": "https://api.exa.ai/websets/v0/websets/{webset}/enrichments/{id}", + "http_method": "PATCH", + "headers": {}, + "parameters": [ + { + "name": "webset", + "tool_parameter_name": "webset_identifier", + "description": "", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "id", + "tool_parameter_name": "enrichment_configuration_id", + "description": "", + "value_schema": { + "val_type": "string", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "path", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + }, + { + "name": "requestBody", + "tool_parameter_name": "enrichment_configuration_details", + "description": "", + "value_schema": { + "val_type": "json", + "inner_val_type": null, + "enum": null, + "properties": null, + "inner_properties": null, + "description": "" + }, + "accepted_as": "body", + "required": true, + "deprecated": false, + "default": null, + "documentation_urls": [] + } + ], + "documentation_urls": [], + "secrets": [ + { + "arcade_key": "EXA_API_KEY", + "parameter_name": "Authorization", + "accepted_as": "header", + "formatted_value": "Bearer {authorization}", + "description": "", + "is_auth_token": false + } + ], + "request_body_spec": "{\n \"required\": true,\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"description\": {\n \"type\": [\n \"string\"\n ],\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"Provide a description of the enrichment task you want to perform to each Webset Item.\"\n },\n \"format\": {\n \"type\": [\n \"string\"\n ],\n \"enum\": [\n \"text\",\n \"date\",\n \"number\",\n \"options\",\n \"email\",\n \"phone\",\n \"url\"\n ],\n \"description\": \"Format of the enrichment response.\\n\\nWe automatically select the best format based on the description. If you want to explicitly specify the format, you can do so here.\"\n },\n \"options\": {\n \"type\": [\n \"array\"\n ],\n \"items\": {\n \"type\": [\n \"object\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": [\n \"string\"\n ],\n \"description\": \"The label of the option\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"minItems\": 1,\n \"maxItems\": 150,\n \"description\": \"When the format is options, the different options for the enrichment agent to choose from.\"\n },\n \"metadata\": {\n \"description\": \"Set of key-value pairs you want to associate with this object.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": [\n \"string\"\n ],\n \"maxLength\": 1000\n },\n \"nullable\": true\n }\n }\n }\n }\n }\n}", + "use_request_body_schema_mode": false, + "validate_request_body_schema": false + } +} diff --git a/toolkits/exa_api/pyproject.toml b/toolkits/exa_api/pyproject.toml new file mode 100644 index 00000000..884bab8e --- /dev/null +++ b/toolkits/exa_api/pyproject.toml @@ -0,0 +1,61 @@ +[build-system] +requires = [ "hatchling",] +build-backend = "hatchling.build" + +[project] +name = "arcade_exa_api" +version = "0.1.0" +description = "Tools that enable LLMs to interact directly with the Exa.ai Search API." +requires-python = ">=3.10" +dependencies = [ + "arcade-tdk>=3.0.0,<4.0.0", + "httpx[http2]>=0.27.2,<1.0.0", + "jsonschema>=4.0.0,<5.0.0", +] +[[project.authors]] +email = "support@arcade.dev" + + +[project.optional-dependencies] +dev = [ + "arcade-mcp[all]>=1.2.0,<2.0.0", + "arcade-serve>=3.0.0,<4.0.0", + "pytest>=8.3.0,<8.4.0", + "pytest-cov>=4.0.0,<4.1.0", + "pytest-mock>=3.11.1,<3.12.0", + "pytest-asyncio>=0.24.0,<0.25.0", + "mypy>=1.5.1,<1.6.0", + "pre-commit>=3.4.0,<3.5.0", + "tox>=4.11.1,<4.12.0", + "ruff>=0.7.4,<0.8.0", +] + +# Tell Arcade.dev that this package is a toolkit +[project.entry-points.arcade_toolkits] +toolkit_name = "arcade_exa_api" + +# Use local path sources for arcade libs when working locally +[tool.uv.sources] +arcade-ai = { path = "../../", editable = true } +arcade-serve = { path = "../../libs/arcade-serve/", editable = true } +arcade-tdk = { path = "../../libs/arcade-tdk/", editable = true } +[tool.mypy] +files = [ "arcade_exa_api/**/*.py",] +python_version = "3.10" +disallow_untyped_defs = "True" +disallow_any_unimported = "True" +no_implicit_optional = "True" +check_untyped_defs = "True" +warn_return_any = "True" +warn_unused_ignores = "True" +show_error_codes = "True" +ignore_missing_imports = "True" + +[tool.pytest.ini_options] +testpaths = [ "tests",] + +[tool.coverage.report] +skip_empty = true + +[tool.hatch.build.targets.wheel] +packages = [ "arcade_exa_api",] diff --git a/toolkits/exa_api/tests/__init__.py b/toolkits/exa_api/tests/__init__.py new file mode 100644 index 00000000..e69de29b