SDK Reference
Every task receives an aisle object injected at runtime. No imports needed — it's just there.
# The full SDK is available as `aisle` inside any task script
result = aisle.ai.raw("Summarize this")
aisle.create_chat("Summary ready", result)
Generated live from the task SDK metadata. Browse the index below — or use the outline on the right — to jump to any method. Each one shows a ready-to-copy example, its parameters, and what it returns.
aisle
Top-level helpers called directly on the aisle object.
aisle.parallel(fn, items, concurrency=5, max_per_minute=None, continue_on_error=False, checkpoint=None, checkpoint_key=None, store_result=False, retry=None)→ParallelResultRun fn(item) for each item using a producer-consumer pool.
Exampleresult = aisle.parallel(
fn=process,
items=items,
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
fn | Callable | yes | — | |
items | Iterable | yes | — | |
concurrency | int | no | 5 | |
max_per_minute | Optional[int] | no | None | |
continue_on_error | bool | no | False | |
checkpoint | Optional[str] | no | None | |
checkpoint_key | Any | no | None | |
store_result | bool | no | False | |
retry | Union[int, bool, RetryPolicy, None] | no | None |
retry: optional retry policy applied to fn(item) calls. retry=3 → up to 3 attempts (2 retries) on transient failures retry=1, retry=0, or retry=<negative int> → single call, no retry retry=False or None → no retry (single call) retry=True → default policy (3 attempts) retry=RetryPolicy(...) → full control Atomicity precondition: fn(item) may be called more than once if retry is enabled OR if checkpoint resume kicks in across runs. Each call's observable side effects MUST be atomic — wrap DB writes in `with db: ...`, or use idempotent statements (INSERT ... ON CONFLICT, MERGE). The SDK does NOT roll back partial state from a failed call. Returns ParallelResult(completed, skipped, errors, results). Results are in input order.
aisle.create_chat(title, content, skip_if_empty=False, files=None, read_only=True, model=None, project_id=None, user_id=None, user_email=None, shared_with=None, share_with_org=None, memory_folder_ids=None, system_message=None)→dict | NoneCreate a chat output message for this task run.
Exampleresult = aisle.create_chat(
title="…",
content={"key": "value"},
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
title | str | yes | — | Chat thread name. |
content | str | dict | list | yes | — | Assistant message body (str, or dict/list which will be JSON-stringified). |
skip_if_empty | bool | no | False | If True and content is falsy, returns None without creating the chat. |
files | list | None | no | None | Optional list of aisle_input_file blobs (from aisle.files.write, aisle.inputs, etc.) to attach. |
read_only | bool | no | True | When True (default), the user cannot reply -- the chat renders as a system notification. When False, the user can follow up; requires either model= or a project_id whose project has a default_llm_model. |
model | str | None | no | None | LLM model id to use for the user's follow-up replies. Only meaningful when read_only=False. Required when read_only=False and project_id is not set. Must NOT be passed when project_id is set -- the project's default_llm_model is used so follow-ups behave like any other chat inside that project. |
project_id | str | None | no | None | Optional project to associate the chat with. The chat owner must have access to this project. When set, the project's default_llm_model is used for follow-up replies and project tools (MCP, prompts, knowledge bases) are available. |
user_id | str | None | no | None | Optional override for the chat owner. Must be a user in the same company as the task with an active membership. |
user_email | str | None | no | None | Optional override for the chat owner by email address — convenient when an external caller knows the user by their account email rather than their Aisle UUID. Same validation envelope as user_id (must resolve to a user in the same company with an active membership). If both user_id and user_email are passed, user_id wins. |
shared_with | list | None | no | None | Optional list of additional org members to grant access to the new chat. Each entry is either an email string (defaults to read-only / "view") or a dict shaped like {"user_email": "...", "role": "view"} or {"user_id": "<uuid>", "role": "chat"}. Role aliases: "view" = read-only viewer, "chat" = full participant who can reply. Each recipient must be an active member of the task's company. All entries are validated up front — if any fails, no chat is created. |
share_with_org | str | None | no | None | Optionally share the chat with EVERY active member of the task's company. "view" = whole org can read (read-only), "chat" = whole org can read and reply. None (default) = not shared org-wide. Unlike shared_with, this is a single org-level grant — membership is resolved live, so members added later automatically gain access and removed members lose it. Combine with shared_with to give specific people a different role than the org default. |
memory_folder_ids | list[str] | None | no | None | Optional list of memory-folder UUIDs to expose as vector-search tools on follow-up replies (e.g. the folder the task summarized). Each folder must have AI search enabled and the chat owner must have a memory MCP connection for it. Ignored when read_only=True or project_id is set (a project already supplies its own memory and tool configuration). |
system_message | str | None | no | None | Optional system message to seed follow-up replies with (sets the assistant's tone/role). Same precedence as memory_folder_ids -- ignored when read_only=True or project_id is set. |
Chat ownership: by default the chat is owned by whoever pressed Run (aisle.run.user). For runs without a user (schedule, webhook, system triggers) the chat falls back to the task author (aisle.run.creator). Pass user_id= to override and force a specific owner; the user must belong to the same company as the task and have an active membership.
aisle.output(value, type=None)Set the definitive return value for this task run.
Exampleaisle.output(
value="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
value | any | yes | — | |
type | str | None | no | None |
Accepts any JSON-serializable value (None, bool, int, float, str, list, dict). The value is persisted on the AutomatedTaskExecution row, returned in the sync API entrypoint response body, and emitted as a `task_output` push_log event for the live feed. Project Pages: when this task is bound as the generator of a page (project home -> Pages -> New page), this value also produces the page's next edition after every successful run: * ``aisle.output(html_string, type="html")`` — the value must be a complete HTML document string; it is published verbatim as the page's next edition. You own the page's design. Scripts are stripped and a strict CSP is enforced (no external URLs; inline CSS/SVG and data: images only). * ``aisle.output(markdown_string, type="markdown")`` — rendered deterministically (no AI pass) into the Aisle-branded page shell. Inline HTML blocks inside the markdown pass through, so you can mix prose with hand-built HTML charts. Same script/CSP rules. * ``aisle.output(anything_else)`` (no type) — dict, list, str — the platform renders it into a branded HTML page automatically with an AI pass. Content is never interpreted as HTML or markdown unless the type is passed explicitly. If a bound task never calls aisle.output, the page falls back to the run's output preview; runs with no usable output publish nothing. May only be called once per run; a second call raises RuntimeError. Thread-safe under aisle.parallel.run (workers share this namespace).
aisle.log(message)Append a message to the task run log.
Exampleaisle.log(
message="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
message | str | yes | — |
aisle.sleep(seconds)Pause execution for the given number of seconds (max 900).
Exampleaisle.sleep(
seconds="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
seconds | any | yes | — |
aisle.ai
AI tools — raw, run_prompt, and provider-native web/search tools.
aisle.ai.raw(instruction, files=None, system=None, model=None, temperature=None, max_tokens=None, output_schema=None, tools=None, key=None)→str | dictCall an LLM with the given instruction.
Exampleresult = aisle.ai.raw(
instruction="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
instruction | str | yes | — | The user-facing instruction for the model. |
files | list | None | no | None | Optional list of aisle_input_file blobs to attach. |
system | str | None | no | None | Optional system message. Defaults to a generic helpful-assistant prompt. |
model | str | None | no | None | Optional model slug (e.g. "claude-haiku-4-5"). Falls back to the company's default model if omitted or invalid. |
temperature | float | None | no | None | Optional sampling temperature (0.0-2.0). |
max_tokens | int | None | no | None | Optional cap on response tokens. |
output_schema | dict | None | no | None | Optional JSON Schema dict. When present, the model is constrained to produce JSON matching the schema and this method returns a dict instead of a string. |
tools | list[dict] | None | no | None | Optional list of native tool providers to attach. Each entry is a dict with: - provider (required, str): integration slug (e.g. "opensearch") - credential (optional, str): credential name or UUID; omit to use the task's default credential for that provider - allowed_tools (optional, list[str]): tool name filter; omit or pass [] for all tools from that provider |
key | str | None | no | None |
Returns: The model's text response as a string, or a dict if output_schema was provided.
aisle.ai.run_prompt(prompt_ref=None, variables=None, files=None, slug=None)→strRun a saved prompt by UUID or slug.
Exampleresult = aisle.ai.run_prompt(
prompt_ref="…",
variables={"key": "value"},
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt_ref | str | None | no | None | UUID or slug identifying the prompt. |
variables | dict | None | no | None | Template variables as a dict. |
files | list | None | no | None | Optional list of aisle_input_file blobs to attach. |
slug | str | None | no | None | Alternative keyword form for slug (same as passing a slug as prompt_ref). |
Returns: The rendered output (string, or a dict when the prompt has a structured_output schema).
aisle.ai.anthropic_web_search(query)→listSearch the web using Anthropic's built-in search tool.
Exampleresult = aisle.ai.anthropic_web_search(
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | yes | — |
aisle.ai.anthropic_web_fetch(url)→strFetch and extract the text content of a URL using Anthropic.
Exampleresult = aisle.ai.anthropic_web_fetch(
url="https://…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url | str | yes | — |
aisle.ai.openai_web_search(query)→listSearch the web using OpenAI's built-in search tool.
Exampleresult = aisle.ai.openai_web_search(
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | yes | — |
aisle.ai.gemini_google_search(query)→listSearch Google using Gemini's grounding tool.
Exampleresult = aisle.ai.gemini_google_search(
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | yes | — |
aisle.ai.gemini_url_context(urls)→strFetch and summarise one or more URLs using Gemini URL context.
Exampleresult = aisle.ai.gemini_url_context(
urls=[...],
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
urls | list | str | yes | — |
aisle.ai.xai_x_search(query)→listSearch X (Twitter) using xAI's live search tool.
Exampleresult = aisle.ai.xai_x_search(
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | yes | — |
aisle.chats
Chat history search — search, read, and search within threads.
aisle.chats.search(query='', project_id=None, task_id=None, prompt_id=None, after=None, before=None, limit=10, offset=0)→dictSearch the executing user's chat threads.
Exampleresult = aisle.chats.search(
query="search terms",
project_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | no | '' | Search term (matches thread names and message content). Can be empty to browse with filters only. |
project_id | str | None | no | None | Filter to threads within a specific project (UUID). |
task_id | str | None | no | None | Filter to threads that ran a specific automated task (UUID). |
prompt_id | str | None | no | None | Filter to threads that used a specific prompt (UUID). |
after | str | None | no | None | ISO 8601 datetime — only return threads created after this. |
before | str | None | no | None | ISO 8601 datetime — only return threads created before this. |
limit | int | no | 10 | Max results (default 10, max 25). |
offset | int | no | 0 | Number of results to skip (default 0). Use with limit for pagination when has_more is true. |
Full-text search across thread names and message content. Supports optional filters that can be combined freely — including with an empty query to browse by filters alone. Returns: dict with keys: threads (list), count, total, offset, has_more. Each thread has: id, name, project_id, project_name, updated_at, inserted_at, and optionally task_id.
aisle.chats.read(thread_id, limit=50, offset=0)→dictRead messages from a specific chat thread.
Exampleresult = aisle.chats.read(
thread_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
thread_id | str | yes | — | The chat thread UUID (from search results). |
limit | int | no | 50 | Max messages to return (default 50, max 100). |
offset | int | no | 0 | Number of messages to skip from the start (default 0). Use for pagination — e.g. offset=50, limit=50 for page 2. |
Returns messages in chronological order with pagination support. Only works for threads owned by the executing user. Returns: dict with keys: thread_id, thread_name, project_id, total_messages, offset, limit, returned, has_more, messages. Each message has: id, role, content, model, sent_at.
aisle.chats.search_in_thread(thread_id, query, limit=10)→dictSearch for specific content within a single chat thread.
Exampleresult = aisle.chats.search_in_thread(
thread_id="…",
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
thread_id | str | yes | — | The chat thread UUID. |
query | str | yes | — | Search term to find within the conversation. |
limit | int | no | 10 | Max matching messages to return (default 10, max 30). |
More efficient than paginating through a long conversation when looking for specific messages. Only works for threads owned by the executing user. Returns: dict with keys: thread_id, thread_name, query, matches, messages. Each message has: id, role, content, model, sent_at.
aisle.memories
Memory operations — search, store, get, update, query, list, propositions.
aisle.memories.search(query, limit=5, folder=None, folder_id=None)→listKeyword search over memory records. Returns a list of matching records.
Exampleresult = aisle.memories.search(
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | yes | — | |
limit | int | no | 5 | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.memories.get(name, folder=None, folder_id=None)→dictFetch a single memory record by name.
Exampleresult = aisle.memories.get(
name="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | str | yes | — | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.memories.store(name, content=None, metadata=None, file=None, await_embedding=False, embedding_timeout=None, folder=None, folder_id=None)→dictCreate a memory record.
Exampleresult = aisle.memories.store(
name="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | str | yes | — | |
content | str | None | no | None | |
metadata | dict | None | no | None | |
file | dict | None | no | None | |
await_embedding | bool | no | False | |
embedding_timeout | int | None | no | None | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
Exactly one of ``content`` or ``file`` must be provided. - content: inline text (the doc's ``content`` field is set directly). - file: an aisle_input_file blob (as returned by ``aisle.files.write`` or a Drive ``download_files`` call). The memories pipeline extracts text from the file and stores it as content. When ``await_embedding=True``, blocks until the doc's embedding is generated (or fails), polling every 15s. ``embedding_timeout`` seconds caps the wait; ``None`` polls indefinitely (Lambda runtime is the cap). Raises :class:`EmbeddingFailedError` if the doc reaches a terminal failed state; raises :class:`TimeoutError` if the timeout elapses without reaching a terminal status.
aisle.memories.archive(memory_id, folder=None, folder_id=None)→dictMark a memory as archived. Idempotent — archiving an
Exampleresult = aisle.memories.archive(
memory_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
memory_id | str | yes | — | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
already-archived memory is a no-op success. Archived memories are excluded by default from vector_search, find_memory, query_memories, list_records, and get_propositions on the agent-facing MCP path.
aisle.memories.unarchive(memory_id, folder=None, folder_id=None)→dictRestore an archived memory to active status. Idempotent.
Exampleresult = aisle.memories.unarchive(
memory_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
memory_id | str | yes | — | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
Embeddings are preserved across archive/unarchive — restored memories are immediately searchable again.
aisle.memories.await_embedding(memory_id, timeout=None, folder=None, folder_id=None)→dictBlock until the memory's embeddings finish (or fail).
Exampleresult = aisle.memories.await_embedding(
memory_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
memory_id | str | yes | — | |
timeout | int | None | no | None | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
Polls every 15 seconds — background-task cadence, no need for tight polling. Returns the doc's status fields when ``embedding_status`` reaches ``"completed"``. Raises :class:`EmbeddingFailedError` when status is ``"failed"``. Treats ``None``/``"pending"``/``"processing"`` as "keep waiting". ``timeout=None`` polls indefinitely.
aisle.memories.vector_search(query, limit=5, threshold=0.3, folder=None, folder_id=None)→listSemantic search returning [{id, name, content, similarity}].
Exampleresult = aisle.memories.vector_search(
query="search terms",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | str | yes | — | |
limit | int | no | 5 | |
threshold | float | no | 0.3 | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.memories.update(memory_id, content, metadata=None, merge=True, folder=None, folder_id=None)→dictUpdate an existing memory record by ID.
Exampleresult = aisle.memories.update(
memory_id="…",
content="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
memory_id | str | yes | — | |
content | str | yes | — | |
metadata | dict | None | no | None | |
merge | bool | no | True | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.memories.query(name=None, metadata=None, folder=None, folder_id=None)→listFilter records by name or metadata key-value pairs.
Exampleresult = aisle.memories.query(
name="…",
metadata={"key": "value"},
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | str | None | no | None | |
metadata | dict | None | no | None | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.memories.list_all(folder=None, folder_id=None)→listList all memory records (lightweight: id, name, created_at).
Exampleresult = aisle.memories.list_all(
folder="my-folder",
folder_id="my-folder",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.memories.get_propositions(memory_id, folder=None, folder_id=None)→listGet semantic proposition chunks for a record.
Exampleresult = aisle.memories.get_propositions(
memory_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
memory_id | str | yes | — | |
folder | str | None | no | None | |
folder_id | str | None | no | None |
aisle.http
HTTP tool — outbound requests proxied through Elixir for URL validation.
aisle.http.request(method, url, headers=None, body=None, auth=None)→dictMake an HTTP request. Returns {status, headers, body}.
Exampleresult = aisle.http.request(
method="…",
url="https://…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
method | str | yes | — | |
url | str | yes | — | |
headers | dict | None | no | None | |
body | dict | str | None | no | None | |
auth | dict | None | no | None |
aisle.files
Files tool — write, read, metadata, split, and convert operations.
aisle.files.open(ref, mode='rt', encoding='utf-8', errors='strict')→anyOpen a file as a streaming file-like object.
Exampleresult = aisle.files.open(
ref="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ref | any | yes | — | |
mode | any | no | 'rt' | |
encoding | any | no | 'utf-8' | |
errors | any | no | 'strict' |
mode='rb' yields a binary stream backed by a presigned S3 GET. mode='rt' yields a text stream (utf-8 decoded by default).
aisle.files.write(content, name, content_type='text/plain')→dictWrite content as a named file. Returns an aisle_input_file blob.
Exampleresult = aisle.files.write(
content="…",
name="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
content | any | yes | — | |
name | str | yes | — | |
content_type | str | no | 'text/plain' |
content: str, bytes, or file-like object with .read() name: filename (e.g. "report.csv") content_type: MIME type (e.g. "text/csv", "application/pdf") Files ≤ 10 MB are embedded in the RPC. Larger files use a two-phase presigned S3 upload automatically. The returned blob can be passed to `aisle.ai.raw(files=[ref])` or `aisle.create_chat(files=[ref])`.
aisle.files.begin_upload(name, content_type='application/octet-stream', byte_size=None)→dictRequest a presigned S3 upload URL for a large file.
Exampleresult = aisle.files.begin_upload(
name="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | str | yes | — | |
content_type | str | no | 'application/octet-stream' | |
byte_size | int | None | no | None |
Returns {"upload_url": str, "file_upload_id": str}. After uploading to the URL, call complete_upload(file_upload_id). Most callers should prefer write(), which routes to begin/complete automatically.
aisle.files.complete_upload(file_upload_id)→dictConfirm a large file upload and get the aisle_input_file blob.
Exampleresult = aisle.files.complete_upload(
file_upload_id="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
file_upload_id | str | yes | — |
Call this after a successful PUT to the upload_url from begin_upload().
aisle.files.read(ref, encoding='text')→anyRead a file's contents by reference.
Exampleresult = aisle.files.read(
ref="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ref | any | yes | — | |
encoding | str | no | 'text' |
encoding="text" -> str (UTF-8 decoded). Raises UnicodeDecodeError on invalid UTF-8; use "bytes" for binary files. encoding="bytes" -> bytes. encoding="base64" -> str (base64-encoded content). Raises ValueError if the file is larger than 10 MB. For larger files, use aisle.files.download_url(ref) and stream from S3 directly.
aisle.files.download_url(ref)→strReturn a presigned S3 URL for the file (8 hour expiry).
Exampleresult = aisle.files.download_url(
ref="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ref | any | yes | — |
Useful for streaming large files (>10 MB) or passing a URL to another service. Blocks until the file's malware scan has cleared so the URL is immediately usable.
aisle.files.metadata(ref, include_url=False)→dictReturn file metadata. With include_url=True, also includes a
Exampleresult = aisle.files.metadata(
ref="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ref | any | yes | — | |
include_url | bool | no | False |
presigned download_url and waits for the file's scan to clear. Returns {file_upload_id, filename, content_type, byte_size, scan_status, processing_status} when include_url=False (fast peek — does not block on scan). Returns the same fields plus download_url when include_url=True (blocks on scan completion so the URL is immediately usable).
aisle.files.split_pdf(ref)→listSplit a PDF into individual pages.
Exampleresult = aisle.files.split_pdf(
ref="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ref | any | yes | — |
Returns a list of aisle_input_file blobs, one per page. Each blob can be passed directly to aisle.ai.raw(files=[page]).
aisle.files.convert(ref)→dictConvert a file to a simpler format.
Exampleresult = aisle.files.convert(
ref="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ref | any | yes | — |
Output format is determined by input type: .doc/.docx/.rtf/.odt -> txt; .xlsx/.ods -> csv; .pptx/.ppt/.odp -> pdf. Returns {file_upload_id, filename, content_type, download_url}. Note: to pass a converted file to aisle.ai.raw, use the ORIGINAL ref — the LLM automatically handles conversion for supported formats.
aisle.files.zip(entries)→anyCreate a zip archive from a list of (filename, content_bytes) tuples.
Exampleresult = aisle.files.zip(
entries="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
entries | any | yes | — |
aisle.files.zip([("a.pptx", bytes1), ("b.csv", bytes2)]) -> bytes Filenames are sanitized (path components stripped). Duplicate names after sanitization get a _1, _2, etc. suffix.
aisle.files.writer(name, content_type='text/plain')→StreamingWriterOpen a streaming file writer for incremental writes.
Exampleresult = aisle.files.writer(
name="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | str | yes | — | |
content_type | str | no | 'text/plain' |
Returns a StreamingWriter. Call .write(data) to append, .close() to finalize and get the aisle_input_file blob.
aisle.files.download(url, filename, content_type=None, headers=None, auth=None, timeout=None)→dictDownload a file from a URL and upload it to S3 server-side.
Exampleresult = aisle.files.download(
url="https://…",
filename="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url | str | yes | — | URL to download from (http or https). |
filename | str | yes | — | Name for the stored file (e.g. "report.pdf"). |
content_type | str | None | no | None | Override content type. Auto-detected from the response Content-Type header if not provided. |
headers | dict | None | no | None | Optional request headers dict. |
auth | dict | None | no | None | Optional auth dict (same format as aisle.http.request). |
timeout | int | None | no | None | Download timeout in milliseconds (default: 60000). |
Returns an aisle_input_file content part blob (same as aisle.files.write). The file is downloaded on the server — binary data never transits the RPC channel.
aisle.inputs
Inputs accessor — read-only view over merged trigger + user inputs.
aisle.inputs.get(name, default=None)→AnyReturn the value for input param `name`, or `default` if absent.
Exampleresult = aisle.inputs.get(
name="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | str | yes | — | |
default | Any | no | None |
aisle.inputs.all()→dictReturn all input params as a dict.
Exampleresult = aisle.inputs.all()
aisle.checkpoint
aisle.checkpoint — run-scoped key/value store (DynamoDB-backed, no RPC).
aisle.checkpoint.done(key)→boolReturn True if this key has been marked or set.
Exampleresult = aisle.checkpoint.done(
key="my-key",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — |
aisle.checkpoint.mark(key)→anyRecord completion with no stored value.
Exampleresult = aisle.checkpoint.mark(
key="my-key",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — |
aisle.checkpoint.get(key)→Optional[Any]Return stored value, or None if absent or mark-only.
Exampleresult = aisle.checkpoint.get(
key="my-key",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — |
aisle.checkpoint.set(key, value)→anyStore a JSON-serializable value (also marks as done).
Exampleresult = aisle.checkpoint.set(
key="my-key",
value="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — | |
value | Any | yes | — |
aisle.checkpoint.get_or_set(key, fn)→AnyReturn cached value if present; otherwise call fn(), store, and return.
Exampleresult = aisle.checkpoint.get_or_set(
key="my-key",
fn=process,
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — | |
fn | Callable | yes | — |
Not appropriate when fn() can return None — use explicit get/set instead.
aisle.checkpoint.query_prefix(prefix)→dict[str, Any]Return all key-value pairs where key starts with prefix.
Exampleresult = aisle.checkpoint.query_prefix(
prefix="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prefix | str | yes | — |
Uses DynamoDB Query with begins_with on the sort key. All keys share the same partition key (exec:{scope}). Handles pagination for result sets exceeding 1 MB.
aisle.cache
aisle.cache — task-scoped key/value store with required TTL.
aisle.cache.get(key)→Optional[Any]Return stored value if present and not expired, else None.
Exampleresult = aisle.cache.get(
key="my-key",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — |
aisle.cache.set(key, value, ttl)→anyStore value with TTL. ttl: int seconds or '1h'/'1d' string.
Exampleresult = aisle.cache.set(
key="my-key",
value="…",
ttl="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — | |
value | Any | yes | — | |
ttl | any | yes | — |
aisle.cache.get_or_set(key, fn, ttl)→AnyReturn cached value if present; otherwise call fn(), store, and return.
Exampleresult = aisle.cache.get_or_set(
key="my-key",
fn=process,
ttl="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — | |
fn | Callable | yes | — | |
ttl | any | yes | — |
Not appropriate when fn() can return None — use explicit get/set instead.
aisle.cache.delete(key)→anyExplicitly evict a cached value.
Exampleresult = aisle.cache.delete(
key="my-key",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
key | str | yes | — |
aisle.run
aisle.run — runtime metadata for the current task invocation.
| Property | Type | Description |
|---|---|---|
aisle.run.execution_id | str | Unique id for this run; correlate against logs and execution records. |
aisle.run.task_id | str | None | The AutomatedTask id this run belongs to; None for unsaved test runs. |
aisle.run.is_test | bool | True when invoked as an unsaved draft from the task editor. |
aisle.run.started_at | datetime | UTC timestamp of when this run was enqueued (tz-aware). |
aisle.run.last_run_at | datetime | None | UTC timestamp of the previous successful run; None on first run. |
aisle.run.user | dict | None | {"id": uuid} of the human who pressed Run; None for schedule/webhook/system. |
aisle.run.creator | dict | None | {"id": uuid} of the task author; the authorization subject for credentials and memory. |
aisle.run.company | dict | None | {"id": uuid} of the company this task runs under; None when unscoped. |
aisle.run.project | dict | None | {"id": uuid} of the project bound to this task; None when standalone. |
aisle.dates
aisle.dates — date and datetime utilities for task scripts.
aisle.dates.today()→dateReturn today's UTC date.
Exampleresult = aisle.dates.today()
Use this instead of date.today(), which returns the lambda container's local date — undefined in practice.
aisle.dates.now()→datetimeReturn the current UTC datetime (tz-aware).
Exampleresult = aisle.dates.now()
aisle.dates.parse(value)→datetimeParse a value into a tz-aware UTC datetime.
Exampleresult = aisle.dates.parse(
value="…",
)| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
value | any | yes | — |
Accepts: - datetime -> returned as-is if tz-aware; if naive, assumed UTC - date -> midnight UTC of that date - str -> parsed via dateutil; assumed UTC if no tz - None -> raises ValueError Raises: - ValueError if value is None, empty, or unparseable - TypeError if value is not str/date/datetime
aisle.integrations
Connected services, called as aisle.integrations.<provider>.<method>(). Expand a provider to see its methods.
active_campaignActiveCampaign13 methods
active_campaign.list_campaigns(limit=None, offset=None, status=None, orders_sdate=None)List campaigns with their engagement stats (opens, clicks, bounces, unsubscribes).active_campaign.get_campaign(campaign_id)Get a single campaign by ID with full engagement stats.active_campaign.list_campaign_links(campaign_id)List the trackable links in a campaign (URL, name, ref, tracking flags).active_campaign.get_campaign_revenue(campaign_id)Get aggregate revenue attributed to a campaign.active_campaign.list_contacts(limit=None, offset=None, email=None, list_id=None, tag_id=None, status=None, search=None)List or search contacts with optional filters.active_campaign.get_contact(contact_id)Get a single contact by ID with bounce + activity counters.active_campaign.list_contact_activities(contact_id, after=None, limit=None, offset=None, include=None)List engagement activities for a contact (opens, clicks, automation events).active_campaign.list_contact_tags(contact_id)List the contact-tag association records for a contact.active_campaign.list_lists(limit=None, offset=None)List all lists in the account.active_campaign.list_tags(limit=None, offset=None, search=None)List all tags in the account.active_campaign.add_tag_to_contact(contact_id, tag_id)Apply a tag to a contact.active_campaign.remove_tag_from_contact(contact_id, tag_id)Remove a tag from a contact. Looks up the contactTag association and deletes it.active_campaign.track_event(event, eventdata=None, email=None)Send a custom event to ActiveCampaign site tracking. Uses event_key + actid credentials, not the API token.affinityAffinity4 methods
affinity.search_persons(term=None, page_size=None, page_token=None, with_interaction_dates=False, with_opportunities=False, with_current_organizations=False)Search for persons in Affinity by name or email.affinity.get_person(personId, with_interaction_dates=False, with_opportunities=False, with_current_organizations=False)Get detailed information for a specific Affinity person by ID.affinity.search_organizations(term=None, exact_match=False, page_size=None, page_token=None, with_interaction_dates=False, with_interaction_persons=False)Search for organizations in Affinity by domain or name.affinity.get_organization(organizationId, with_interaction_dates=False, with_interaction_persons=False)Get detailed information for a specific Affinity organization by ID.ahrefsAhrefs8 methods
ahrefs.domain_rating(target, date=None)Get Domain Rating and Ahrefs Rank for a domain.ahrefs.site_metrics(target, date=None, country=None, target_mode=None)Get overall SEO metrics: traffic, keywords, backlinks.ahrefs.backlinks(target, limit=100, offset=0, target_mode=None, order_by=None)List backlinks pointing to a domain.ahrefs.referring_domains(target, limit=100, offset=0, order_by=None)Get referring domains with their metrics.ahrefs.organic_keywords(target, country="us", limit=100, offset=0, order_by=None)Get organic keywords a domain ranks for.ahrefs.top_pages(target, country="us", limit=100, offset=0)Get top pages by organic traffic.ahrefs.organic_competitors(target, country="us", limit=100)Get organic competitors in SERPs.ahrefs.keyword_overview(keywords, country="us")Get keyword metrics: volume, difficulty, CPC.airtableAirtable16 methods
airtable.list_bases()List all accessible Airtable bases.airtable.list_tables(base_id, detail_level="full")List tables in an Airtable base.airtable.describe_table(base_id, tableId, detail_level="full")Get schema and metadata for a specific Airtable table.airtable.list_records(base_id, tableId, filterByFormula=None, maxRecords=None, view=None, offset=None, pageSize=None)List records from an Airtable table. Returns up to 100 records per page. Use the returned offset to fetch subsequent pages.airtable.search_records(base_id, tableId, searchTerm, fieldIds=None, maxRecords=None, offset=None, pageSize=None)Search records in an Airtable table by text. When fieldIds is omitted, automatically searches all text fields.airtable.get_record(base_id, tableId, recordId)Get a specific Airtable record by ID.airtable.create_record(base_id, tableId, fields)Create a new record in an Airtable table.airtable.batch_create_records(base_id, tableId, records)Create up to 10 records in an Airtable table.airtable.batch_update_records(base_id, tableId, records)Update up to 10 existing records in an Airtable table.airtable.batch_delete_records(base_id, tableId, recordIds)Delete up to 10 records from an Airtable table by ID.airtable.get_base_schema(base_id)Get the full schema for an Airtable base (all tables and fields).airtable.list_field_types()Reference list of all Airtable field types organised by category.airtable.get_table_views(base_id, tableId)List views configured on an Airtable table.airtable.create_table(base_id, name, tableFields, description=None)Create a new table in an Airtable base.airtable.create_field(base_id, tableId, fieldConfig)Create a new field in an existing Airtable table.airtable.update_field(base_id, tableId, fieldId, updates)Update an existing Airtable field's name, description, or options.algoliaAlgolia5 methods
algolia.list_indices(hits_per_page=100, page=0)List Algolia indices visible to the configured API key.algolia.search_index(index_name, query=None, hits_per_page=20, page=0, filters=None, facet_filters=None, numeric_filters=None, attributes_to_retrieve=None, restrict_searchable_attributes=None, get_ranking_info=False, typo_tolerance=None)Search a single Algolia index and return matching hits.algolia.multi_search(requests)Run multiple Algolia index searches in one request.algolia.browse_index(index_name, query=None, cursor=None, hits_per_page=20, filters=None, attributes_to_retrieve=None)Browse records from an Algolia index with cursor pagination.algolia.get_object(index_name, object_id, attributes_to_retrieve=None)Fetch one Algolia object by object ID.apolloApollo.io8 methods
apollo.people_search(person_titles=None, person_seniorities=None, person_locations=None, q_keywords=None, q_organization_domains_list=None, organization_ids=None, organization_num_employees_ranges=None, page=1, per_page=25)Search Apollo's database for people. No credits consumed. Returns obfuscated previews — use person_enrich to reveal contact info.apollo.person_enrich(first_name=None, last_name=None, name=None, email=None, hashed_email=None, organization_name=None, domain=None, id=None, linkedin_url=None, reveal_personal_emails=False, reveal_phone_number=False, webhook_url=None, run_waterfall_email=False, run_waterfall_phone=False)Enrich a single person. Consumes credits when a match is found. Pass any combination of identifiers (email, linkedin_url, name+domain).apollo.bulk_person_enrich(people, reveal_personal_emails=False, reveal_phone_number=False, webhook_url=None, run_waterfall_email=False, run_waterfall_phone=False)Enrich up to 10 people in one call. Pass a list of person identifier maps (first_name/last_name/email/domain/linkedin_url).apollo.org_enrich(domain=None, linkedin_url=None, name=None, website=None)Enrich a single organization. Provide at least one of domain / linkedin_url / name / website.apollo.bulk_org_enrich(orgs)Enrich up to 10 organizations by domain.apollo.org_jobs(organization_id, page=1, per_page=25)List active job postings for an Apollo organization. Strong signal for growth and AI-team building.apollo.org_news(organization_ids, categories=None, published_at_min=None, published_at_max=None, page=1, per_page=25)Search Apollo's news index for events about given organizations (funding, hires, acquisitions, layoffs, etc.).apollo.usage_stats()View per-endpoint Apollo API usage and rate-limit headroom. Requires a master API key.asanaAsana20 methods
asana.list_workspaces()List all accessible Asana workspaces.asana.list_users(workspace_gid, limit=50)List users in a workspace.asana.list_projects(workspace_gid, limit=50)List projects in a workspace.asana.get_project(project_gid)Get details of a specific project.asana.list_sections(project_gid)List sections in a project.asana.list_tasks(project_gid=None, section_gid=None, limit=50, completed_since=None, offset=None)List tasks in a project or section.asana.list_subtasks(task_gid, limit=50)List subtasks of a task.asana.get_task(task_gid)Get full details of a specific task.asana.list_task_stories(task_gid, limit=50, offset=None)List comments and activity on a task.asana.search_tasks(workspace_gid, text, limit=20, completed=None)Search tasks by keyword in a workspace.asana.create_task(name, workspace_gid=None, project_gid=None, notes=None, due_on=None, assignee=None)Create a new task.asana.create_subtask(task_gid, name, notes=None, due_on=None, assignee=None)Create a subtask under a parent task.asana.update_task(task_gid, name=None, notes=None, due_on=None, assignee=None, completed=None)Update an existing task.asana.move_task_to_section(task_gid, section_gid)Move a task into a section.asana.set_task_dependencies(task_gid, dependency_gids)Set tasks that a task depends on.asana.delete_task(task_gid)Delete a task.asana.add_comment(task_gid, text)Add a comment to a task.asana.bulk_create_tasks(tasks)Create multiple tasks at once. Returns results for each task.asana.bulk_update_tasks(updates)Update multiple tasks at once. Returns results for each task.asana.create_project(name, workspace_gid, team_gid=None, notes=None, color=None)Create a new project in a workspace.awsAmazon Web Services1 method
aws.knowledge_base(knowledgeBaseId, queries, contentTypeFilters=None, slugs=None, awsRegion=None, resultsLength=10, fetchAllResults=False)Search an AWS Bedrock knowledge base with one or more queries.bugsnagBugsnag8 methods
bugsnag.list_organizations()List organizations for the authenticated user.bugsnag.list_projects(organization_id)List projects for an organization.bugsnag.list_errors(project_id, sort=None, direction=None, per_page=None)List errors for a project with optional sorting.bugsnag.get_error(project_id, error_id)Get a single error by ID.bugsnag.get_error_events(project_id, error_id, per_page=None)List events (occurrences) for an error.bugsnag.get_event(project_id, event_id)Get a single event (error occurrence) by ID.bugsnag.get_error_trend(project_id, error_id, buckets_count=None)Get error event count over time buckets.bugsnag.get_project_stability(project_id)Get project stability trend data.dataforseoDataForSEO4 methods
dataforseo.keyword_volume(keywords, location_code=2840, language_code="en", include_monthly_searches=False)Look up search volume, CPC, and competition for a known list of keywords.dataforseo.keyword_ideas(keywords, location_code=2840, language_code="en", limit=100)Generate keyword ideas from seed keywords. Returns related keywords with volume and CPC.dataforseo.keyword_suggestions(keyword, location_code=2840, language_code="en", limit=100, offset=0, include_seed_keyword=True)Long-tail keyword discovery from a single seed keyword. Returns suggestions with difficulty and volume.dataforseo.related_keywords(keyword, location_code=2840, language_code="en", limit=100, offset=0, depth=1)Expand a seed keyword via Google's "searches related to" graph.fathomFathom3 methods
fathom.list_meetings(cursor=None, recorded_by=None, created_after=None, created_before=None, teams=None, meeting_type=None, include_transcript=None, include_summary=None, include_action_items=None)List recent meetings with optional date range and recorder filters.fathom.search_meetings(search_term, cursor=None, recorded_by=None, created_after=None, created_before=None, teams=None, meeting_type=None)Search meetings by title keyword with optional date and recorder filters.fathom.get_transcript(recording_id)Get the full transcript for a specific recording.firefliesFireflies.ai8 methods
fireflies.list_transcripts(limit=10, skip=0)Get a list of meeting transcripts.fireflies.get_transcript(transcript_id)Get full transcript details and AI summary.fireflies.search_transcripts(search_term, limit=100, skip=0)Search for transcripts by keywords.fireflies.get_analytics(user_id=None, start_date=None, end_date=None)Retrieve conversation analytics.fireflies.add_bot_to_meeting(meeting_url, title=None, attendee_email=None)Add Fireflies bot to a live meeting.fireflies.update_meeting(transcript_id, title=None, channel_id=None, privacy=None)Update meeting metadata.fireflies.delete_transcript(transcript_id)Permanently delete a transcript.fireflies.ask_fred(question, transcript_ids=None, thread_id=None)Ask AI questions about transcripts.githubGitHub13 methods
github.list_repos()List repositories accessible to the authenticated user.github.list_pull_requests(owner, repo, state=None)List pull requests in a repository.github.get_pull_request(owner, repo, pr_number)Get details of a specific pull request.github.comment_on_pull_request(owner, repo, pr_number, body)Post a comment on a pull request.github.list_pr_comments(owner, repo, pr_number)List comments on a pull request.github.list_pr_files(owner, repo, pr_number)List files changed in a pull request.github.get_file_contents(owner, repo, path, ref=None)Get the contents of a file in a repository.github.list_commits(owner, repo, sha=None)List commits in a repository.github.get_commit(owner, repo, sha)Get details of a specific commit, including files changed and patch.github.compare_commits(owner, repo, base, head)Compare two commits, branches, or tags. Returns ahead/behind counts and changed files with patches.github.search_code(query, sort=None, order=None, per_page=None)Search for code across repositories. Returns matching file paths and text fragments.github.get_repo(owner, repo)Get repository metadata including default branch, description, visibility, and language.github.get_issue(owner, repo, issue_number)Get details of a specific issue, including title, body, labels, assignees, and state.gmailGmail17 methods
gmail.get-email(email_id)Fetch a Gmail message by ID.gmail.get-profile()Get the authenticated Gmail user's profile.gmail.search-messages(query=None, max_results=10)Search Gmail messages using a query string.gmail.download-attachment(attachment)Download a single Gmail attachment.gmail.download-all-attachments(email)Download all attachments from a Gmail message.gmail.modify-message(message_id, add_label_ids=None, remove_label_ids=None)Add or remove labels on a Gmail message.gmail.add-labels(message_id, add_label_ids)Add labels to a Gmail message.gmail.remove-labels(message_id, remove_label_ids)Remove labels from a Gmail message.gmail.mark-as-read(message_id)Mark a Gmail message as read.gmail.mark-as-unread(message_id)Mark a Gmail message as unread.gmail.archive(message_id)Archive a Gmail message (remove from Inbox).gmail.star(message_id)Star a Gmail message.gmail.unstar(message_id)Remove the star from a Gmail message.gmail.trash-message(message_id)Move a Gmail message to trash.gmail.setup-watch(topic_name)Set up Gmail push notifications via Google Cloud Pub/Sub.gmail.list-user-history(history_id)List changes to the user's mailbox since a given history ID.gmail.poll-messages(start_history_id)Poll for new Gmail messages since a given history ID.godaddyGoDaddy4 methods
godaddy.check_availability(domain)Check if a domain name is available to register.godaddy.bulk_check_availability(domains)Check availability of multiple domain names at once (up to 500).godaddy.get_suggestions(query, limit=20, tlds=None)Get domain name suggestions based on a keyword or phrase.godaddy.list_tlds()List all TLDs supported and enabled for sale (name and type only — GoDaddy does not return per-TLD pricing; use check_availability for prices).gongGong.io9 methods
gong.transcript(dateFrom=None, dateTo=None, workspaceId=None, callIds=None, limit=100)Fetch call transcripts from Gong.gong.get_extensive(call_id)Fetch detailed call metadata from Gong for a single call — parties (with name/email/affiliation) and CRM context (Account name, website, …). Pair with `transcript` to label speakerIds. Returns the call dict, or nil if Gong has no match.gong.list_calls(fromDateTime=None, toDateTime=None, workspaceId=None, cursor=None, limit=100)List calls from Gong with optional date range and workspace filtering. Supports cursor-based pagination.gong.list_users(cursor=None, include_avatars=false, limit=100)List users in the Gong account. Supports cursor-based pagination.gong.get_highlights(call_ids, from_date_time=None, to_date_time=None)Fetch AI-generated highlights (Next Steps) for one or more Gong calls.gong.get_scorecards(call_from_date=None, call_to_date=None, reviewed_user_ids=None, scorecard_ids=None, cursor=None)Fetch scorecard results from Gong for reviewed calls.gong.list_library_folders(workspace_id=None)List Gong library folders, optionally filtered by workspace.gong.get_library_content(folder_id, cursor=None)Get the calls and content inside a specific Gong library folder.gong.list_trackers(workspace_id=None)List smart tracker definitions configured in Gong, optionally filtered by workspace.google-driveGoogle Drive10 methods
google-drive.find-folder(name, parent_id=None, drive_id=None, page_size=None, page_token=None)Find a folder in Google Drive by name.google-drive.create-folder(name, parent_id=None)Create a new folder in Google Drive.google-drive.delete-folder(name, parent_id=None, drive_id=None)Delete a folder from Google Drive.google-drive.find-files(parent_id=None, query=None, file_type="all", drive_id=None, page_size=None, page_token=None)List files in Google Drive, optionally filtered by folder.google-drive.delete-files(file_name, parent_id=None, drive_id=None)Delete files from Google Drive by name.google-drive.copy-files(file_name, destination_file_name, source_folder_id=None, destination_folder_id=None, drive_id=None)Copy a file to a new location in Google Drive.google-drive.move-files(file_name, source_folder_id=None, destination_folder_id=None, destination_file_name=None, drive_id=None)Move a file to a different folder in Google Drive.google-drive.download-files(file_id=None, file_name=None, output_format="base64")Download a file from Google Drive.google-drive.create-files(file_name, create_type="content", content=None, parent_id=None, content_format="plain_text")Create a new file in Google Drive.google-drive.upload-files(file, parent_id=None)Upload a local file to Google Drive.google-mapsGoogle Maps6 methods
google-maps.geocode(address)Convert an address, city/state, or zip code to lat/lng coordinates.google-maps.reverse_geocode(lat, lng)Convert lat/lng coordinates to a human-readable address.google-maps.distance_matrix(origin, destination, travel_mode="driving", units="metric")Calculate travel time and distance between two points.google-maps.nearby_search(lat, lng, radius=1000, type=None, keyword=None, max_results=20)Find places near a location by type or keyword.google-maps.place_details(place_id, fields=None)Get detailed info about a specific place by place_id.google-maps.timezone(lat, lng, timestamp=None)Get timezone information for a lat/lng location.grok-searchXAI Grok Search1 method
grok-search.model_search(query, model="grok-4.20-0309-non-reasoning")Search X posts using Grok AI via the xAI Responses API.hackernewsHacker News5 methods
hackernews.search(query=None, tags=None, numeric_filters=None, hits_per_page=20, page=0, restrict_searchable_attributes=None, typo_tolerance=None)Search Hacker News by relevance.hackernews.search_by_date(query=None, tags=None, numeric_filters=None, hits_per_page=20, page=0, restrict_searchable_attributes=None, typo_tolerance=None)Search Hacker News by newest items first.hackernews.front_page(hits_per_page=30, page=0)List current Hacker News front-page stories.hackernews.get_item(id)Fetch a Hacker News item and its nested children.hackernews.get_user(username)Fetch Hacker News user metadata.hubspotHubSpot16 methods
hubspot.list_contacts(limit=50, after=None, properties=None, archived=False)List contacts with cursor pagination.hubspot.get_contact(id, id_property=None, properties=None)Fetch a single contact by ID, or by email when id_property="email".hubspot.create_contact(email=None, firstname=None, lastname=None, phone=None, company=None, properties=None, company_ids=None)Create a contact. Pass standard fields directly or use `properties` for custom fields.hubspot.update_contact(id, properties)Patch properties on an existing contact by ID.hubspot.search_contacts(filter_groups, properties=None, sorts=None, query=None, limit=10, after=None)Search contacts using HubSpot filterGroups syntax.hubspot.list_companies(limit=50, after=None, properties=None, archived=False)List companies with cursor pagination.hubspot.create_company(name=None, domain=None, industry=None, properties=None)Create a company.hubspot.search_companies(filter_groups, properties=None, sorts=None, query=None, limit=10, after=None)Search companies using filterGroups syntax.hubspot.list_deals(limit=50, after=None, properties=None, archived=False)List deals with cursor pagination.hubspot.create_deal(dealname, amount=None, pipeline=None, dealstage=None, closedate=None, properties=None, contact_ids=None, company_ids=None)Create a deal. Optionally associate with existing contacts and companies.hubspot.update_deal(id, properties)Patch properties on an existing deal by ID.hubspot.search_deals(filter_groups, properties=None, sorts=None, query=None, limit=10, after=None)Search deals using filterGroups syntax.hubspot.create_note(body, timestamp=None, owner_id=None, contact_ids=None, company_ids=None, deal_ids=None)Create a note engagement, optionally associated with CRM records.hubspot.create_task(subject, body=None, due_timestamp=None, status="NOT_STARTED", priority="MEDIUM", task_type="TODO", owner_id=None, contact_ids=None, company_ids=None, deal_ids=None)Create a task engagement (to-do for a user) with associations.hubspot.list_owners(limit=100, after=None, email=None)List workspace users (owners) for record ownership lookups.hubspot.list_pipelines()List deal pipelines and their stage IDs (required for create_deal).jiraJIRA5 methods
jira.get_ticket(ticket_id)Get a JIRA ticket by ID.jira.get_tickets_by_time_span(query_type="date_range", start_date=None, end_date=None, start_ticket=None, end_ticket=None, max_results=None)List JIRA tickets filtered by date range or ticket number range.jira.update_ticket(ticket_id, field_id, tag_name)Update fields and labels on a JIRA ticket.jira.add_comment(ticket_id, comment_body, is_internal=False)Add a comment to a JIRA ticket.jira.transition_ticket(ticket_id, transition_name="Done", resolution_name=None)Transition a JIRA ticket to a new workflow status.linkedinLinkedIn6 methods
linkedin.get_profile()Get the authenticated user's LinkedIn profile.linkedin.get_organization(organization_id)Get a LinkedIn company/organization page by numeric ID.linkedin.list_posts(author_urn=None, count=10, start=0)List recent posts by a person or organization.linkedin.create_post(text, visibility="PUBLIC", author_urn=None)Publish a text post on LinkedIn as the authenticated user.linkedin.get_post_analytics(organization_urn, count=10)Get engagement analytics for an organization's posts.linkedin.get_follower_count(organization_id)Get follower count for a LinkedIn organization.massiveMassive13 methods
massive.aggregates(ticker, multiplier, timespan, from, to, adjusted=True, sort=None, limit=None)OHLCV aggregate bars for a ticker over a date range. Multiplier + timespan (e.g. 5/minute, 1/day). `from`/`to` accept YYYY-MM-DD or unix-millis.massive.previous_close(ticker, adjusted=True)Previous-day OHLCV bar for a ticker.massive.last_quote(ticker)Most recent NBBO quote (bid/ask) for a ticker. Requires a paid plan for real-time.massive.last_trade(ticker)Most recent trade for a ticker.massive.ticker_details(ticker, date=None)Descriptive metadata for a ticker (name, market cap, description, branding, etc.).massive.list_tickers(ticker=None, ticker_gte=None, ticker_gt=None, ticker_lte=None, ticker_lt=None, type=None, market=None, exchange=None, cusip=None, cik=None, date=None, search=None, active=True, order=None, limit=None, sort=None)Paginated reference list of tickers. Filter by exchange, type, market, CIK/CUSIP, or search.massive.ticker_news(ticker=None, published_utc_gte=None, published_utc_gt=None, published_utc_lte=None, published_utc_lt=None, order=None, limit=None, sort=None)News articles index. Filter by ticker and publish-time range.massive.options_chain(underlying_asset, strike_price_gte=None, strike_price_gt=None, strike_price_lte=None, strike_price_lt=None, expiration_date_gte=None, expiration_date_gt=None, expiration_date_lte=None, expiration_date_lt=None, contract_type=None, order=None, limit=None, sort=None)Snapshot of all options contracts for an underlying asset, with greeks and last quote. Use strike_price_gte/lte and expiration_date_gte/lte to filter.massive.option_contract_snapshot(underlying_asset, option_contract)Snapshot of one specific options contract (e.g. O:AAPL250620C00200000).massive.list_option_contracts(underlying_ticker=None, contract_type=None, expiration_date=None, expiration_date_gte=None, expiration_date_gt=None, expiration_date_lte=None, expiration_date_lt=None, strike_price_gte=None, strike_price_gt=None, strike_price_lte=None, strike_price_lt=None, as_of=None, expired=False, order=None, limit=None, sort=None)Reference list of historical and active option contracts.massive.market_status()Current US market status (open/closed, after-hours, exchanges).massive.exchanges(asset_class=None, locale=None)Reference list of exchanges Massive tracks.massive.grouped_daily(date, adjusted=True, include_otc=False)Daily OHLCV bars for the entire US equities market on a single date. Returns ~8,000+ records in one call — ideal for market-wide scans.microsoft_onedriveMicrosoft OneDrive19 methods
microsoft_onedrive.list-files(folder_path=None)List files in a folder.microsoft_onedrive.search-files(query)Search for files by name or content.microsoft_onedrive.upload-file(file_path, content, content_type=None)Upload a new file to OneDrive.microsoft_onedrive.download-file(item_id=None, file_path=None)Download a file from OneDrive.microsoft_onedrive.delete-file(item_id=None, file_path=None)Delete a file from OneDrive.microsoft_onedrive.copy-file(item_id=None, file_path=None, destination_path)Copy a file to a new location.microsoft_onedrive.move-file(item_id=None, file_path=None, new_name=None, destination_path=None)Move a file to a new location.microsoft_onedrive.create-folder(folder_name, parent_path=None)Create a new folder in OneDrive.microsoft_onedrive.get-metadata(item_id=None, file_path=None)Get file or folder metadata.microsoft_onedrive.create-sharing-link(item_id=None, file_path=None)Create a sharing link for a file.microsoft_onedrive.create-document(file_name, content, folder_path=None)Create a document from text content.microsoft_onedrive.list-worksheets(workbook_id=None, workbook_path=None)List all worksheets in a workbook.microsoft_onedrive.read-range(workbook_id=None, workbook_path=None, worksheet_name, range)Read a range of cells from a worksheet.microsoft_onedrive.write-range(workbook_id=None, workbook_path=None, worksheet_name, range, values)Write values to a range of cells.microsoft_onedrive.add-table-row(workbook_id=None, workbook_path=None, table_name, values, worksheet_name=None)Add a row to an existing table.microsoft_onedrive.list-tables(workbook_id=None, workbook_path=None)List all tables in a workbook.microsoft_onedrive.read-table(workbook_id=None, workbook_path=None, table_name)Read all rows from a table.microsoft_onedrive.get-cell-value(workbook_id=None, workbook_path=None, worksheet_name, cell)Read a single cell value.microsoft_onedrive.create-workbook(file_path)Create a new Excel workbook.microsoft_teamsMicrosoft Teams8 methods
microsoft_teams.list-teams()List teams you have joined.microsoft_teams.list-channels(team_id=None, team_name=None)List channels in a team.microsoft_teams.send-channel-message(team_id=None, team_name=None, channel_id=None, channel_name=None, content)Send a message to a team channel.microsoft_teams.send-chat-message(chat_id, content)Send a message to a 1:1 or group chat.microsoft_teams.list-chats()List your chats.microsoft_teams.create-channel(team_id=None, team_name=None, display_name, description=None)Create a new channel in a team.microsoft_teams.list-channel-messages(team_id=None, team_name=None, channel_id=None, channel_name=None)List messages in a channel.microsoft_teams.reply-to-message(team_id=None, team_name=None, channel_id=None, channel_name=None, message_id, content)Reply to a message in a channel.mixpanelMixpanel11 methods
mixpanel.list_events(projectId)List all event names in a Mixpanel project.mixpanel.list_event_properties(projectId, eventName, propertyName, fromDate, toDate, type="general", unit="day", limit=255)List properties for a specific Mixpanel event.mixpanel.get_event_property_values(projectId, eventName, propertyName, limit=255)Get unique values for a Mixpanel event property.mixpanel.run_segmentation_query(projectId, event, fromDate, toDate, type="unique", unit="day", where=None, on=None)Run a segmentation query to get event counts and unique users.mixpanel.run_funnel_query(projectId, fromDate, toDate, funnelId=None, unit="day")Run a funnel query to analyze conversion across user journeys.mixpanel.run_retention_query(projectId, fromDate, toDate, retention_type="birth", unit="day", born_event=None, event=None)Run a retention query to track user engagement over time.mixpanel.query_profiles(projectId, where=None, page_size=1000, session_id=None, page=None)Query Mixpanel user profiles using the Engage API.mixpanel.track_event(eventName, distinctId="anonymous", properties={})Track a single event in Mixpanel.mixpanel.track_batch_events(events)Track multiple events in a single Mixpanel API call.mixpanel.set_user_profile(distinctId, properties, operation="set")Update Mixpanel user profile properties.mixpanel.increment_user_property(distinctId, properties)Increment numeric properties on a Mixpanel user profile.mssqlAzure SQL1 method
mssql.execute_query(query, output_format="json_rows", query_timeout=30000, retry_attempts=4)Execute a SQL query against an Azure SQL database.namecheapNamecheap3 methods
namecheap.check_availability(domains)Check availability of up to 50 domain names at once.namecheap.get_tld_pricing(action="REGISTER", product_category=None)Get registration pricing for all TLDs or a specific category.namecheap.get_domain_info(domain)Get registration details for a domain in your account.namecheap_aftermarketNamecheap Aftermarket4 methods
namecheap_aftermarket.list_sales(cursor=None, order_by=None, direction=None, ids=None, name=None, price=None, tld=None, start_date=None, end_date=None, keywords=None, age=None, backlinks_count=None, bid_count=None, extensions_taken=None, name_length=None, cloudflare_ranking=None, no_hyphens=None, no_numbers=None, only_numbers=None, nsfw=None)List auction sales with cursor-based pagination and rich filtering (price range, TLD, age, backlinks, rankings).namecheap_aftermarket.get_sale(sale_id)Fetch a single auction sale by its opaque sale ID (returned by list_sales).namecheap_aftermarket.list_my_bids(page=None, page_size=None, sale=None)List the authenticated user's bids with page-based pagination.namecheap_aftermarket.place_bid(sale_id, max_amount)Place a proxy bid on a sale. The system automatically bids the minimum needed to win, up to max_amount.opensearchOpenSearch3 methods
opensearch.search(index, query, size=10, request_timeout=30000)Execute a search query against an OpenSearch index.opensearch.list_indices()List all indices in the OpenSearch cluster.opensearch.get_mapping(index)Get the field mapping for an OpenSearch index.outlook_mailMicrosoft Outlook Mail14 methods
outlook_mail.get-message(message_id)Get a specific Outlook message by ID.outlook_mail.list-messages(folder_id=None, filter=None, top=None)List messages in the user's Outlook mailbox.outlook_mail.send-message(to_recipients, subject, body=None, cc_recipients=None)Send an email via Outlook.outlook_mail.create-draft(to_recipients, subject, body=None)Create a draft email in Outlook.outlook_mail.delete-message(message_id)Delete an Outlook message by ID.outlook_mail.download-attachment(message_id, attachment_id)Download an attachment from an Outlook message.outlook_mail.list-attachments(message_id)List attachments on an Outlook message.outlook_mail.move-message(message_id, destination_folder_id)Move an Outlook message to a different folder.outlook_mail.mark-as-read(message_id, is_read)Mark an Outlook message as read or unread.outlook_mail.update-message(message_id, categories=None)Update properties of an Outlook message.outlook_mail.list-categories()List available Outlook message categories.outlook_mail.list-folders(parent_folder_id=None)List mail folders in the user's Outlook mailbox.outlook_mail.get-initial-delta(folder_id)Get initial delta state for tracking Outlook message changes.outlook_mail.poll-delta(delta_link)Poll for Outlook message changes using a delta link.pipedrivePipedrive14 methods
pipedrive.get_deal(deal_id)Get a single deal by ID.pipedrive.search_deals(term="", limit=10)Search deals by term.pipedrive.get_deals(limit=None, cursor=None, status=None, sort_by=None, sort_direction=None)List deals with filtering.pipedrive.create_deal(title, person_id=None, org_id=None, value=None, currency=None, stage_id=None, status=None)Create a new deal.pipedrive.update_deal(deal_id, title=None, person_id=None, org_id=None, value=None, status=None)Update an existing deal.pipedrive.get_person(person_id)Get a single person by ID.pipedrive.search_persons(term="", limit=10)Search persons by term.pipedrive.create_person(name, email=None, phone=None, org_id=None)Create a new person.pipedrive.get_organization(organization_id)Get a single organization by ID.pipedrive.search_organizations(term="", limit=10)Search organizations by term.pipedrive.create_organization(name)Create a new organization.pipedrive.get_activities(limit=None, cursor=None, deal_id=None, person_id=None, org_id=None)List activities.pipedrive.create_activity(subject, type=None, due_date=None, note=None, deal_id=None, person_id=None, org_id=None)Create a new activity.pipedrive.create_note(content, deal_id=None, person_id=None, org_id=None)Create a note on a deal, person, or organization.postgresPostgreSQL1 method
postgres.execute_query(query, output_format="json_rows", query_timeout=30000)Execute a SQL query against a PostgreSQL database.redditReddit10 methods
reddit.subreddit(subredditName, filterType="hot", timeFilter="all", limit=10, after=None, before=None, flair=None)Fetch posts from a subreddit.reddit.comment(postId, limit=100, sort="top", context=0)Fetch comments from a Reddit post.reddit.search(query, sort="relevance", timeFilter="all", limit=25, after=None, before=None)Search across all of Reddit.reddit.search_subreddit(subredditName, query, sort="relevance", timeFilter="all", limit=25, after=None, before=None)Search within a specific subreddit.reddit.user_info(username)Get public profile information for a Reddit user.reddit.user_posts(username, sort="new", timeFilter="all", limit=25, after=None, before=None)Get posts submitted by a Reddit user.reddit.user_comments(username, sort="new", timeFilter="all", limit=25, after=None, before=None)Get comments submitted by a Reddit user.reddit.subreddit_info(subredditName)Get metadata and statistics for a subreddit.reddit.subreddit_rules(subredditName)Get the rules for a subreddit.reddit.subreddit_flairs(subredditName)List available post flairs for a subreddit.serpSERP1 method
serp.search(search_string, search_engine="google", location=None, time_period=None)Search the web via SerpAPI and return structured results.sftpSFTP / FTP6 methods
sftp.list_files(path="/", timeoutSeconds=30)List directory entries on the SFTP/FTP server.sftp.get_file_size(path, timeoutSeconds=30)Return the byte size of a remote file.sftp.get_row_count(path, hasHeader=True, chunkSize=1000, timeoutSeconds=30)Count data rows in a remote CSV file.sftp.read_chunk(path, startRow, rowCount, hasHeader=True, timeoutSeconds=30)Read a bounded slice of rows from a remote CSV file.sftp.download_file(path, contentType=None, timeoutSeconds=120)Download a remote file and return it as an aisle_input content part.sftp.read_lines(path, lineCount, offset=0, timeoutSeconds=30)Read raw text lines from a remote file.slackSlack11 methods
slack.create_message(channel, text)Send a message to a channel.slack.reply_to_thread(channel, text, thread_ts)Reply to a message thread.slack.get_user_profile(user_id)Get a user's profile information.slack.look_up_user_by_email(email)Find a user by their email address.slack.download_file(file)Download a file shared in Slack.slack.get_conversation_history(channel, oldest=None, latest=None, limit=100, cursor=None, inclusive=False)Fetch messages from a channel within a date range.slack.get_conversation_replies(channel, thread_ts, oldest=None, latest=None, limit=100, cursor=None, inclusive=False)Fetch all replies in a thread.slack.list_users(limit=100, cursor=None, include_locale=False)List all users in the workspace.slack.list_conversations(types="public_channel", limit=100, cursor=None, exclude_archived=False)List all channels/conversations accessible to the bot.slack.get_conversation_info(channel, include_locale=False, include_num_members=False)Get detailed information about a specific channel.slack.get_conversation_members(channel, limit=100, cursor=None)List all member user IDs in a channel.supabaseSupabase14 methods
supabase.list_projects()List all accessible Supabase projects.supabase.get_project(projectRef)Get details for a specific Supabase project.supabase.list_organizations()List organizations the user is a member of.supabase.get_organization(orgId)Get details for a specific Supabase organization.supabase.list_tables(projectRef=None, schema="public")List tables in a Supabase database schema.supabase.list_extensions(projectRef=None)List installed PostgreSQL extensions for a Supabase project.supabase.list_migrations(projectRef=None)List database migration history for a Supabase project.supabase.apply_migration(migrationName, statements, projectRef=None)Apply a SQL migration to a Supabase database.supabase.execute_sql(query, projectRef=None)Execute a raw SQL query against a Supabase database.supabase.get_logs(projectRef=None, isoTimestampStart=None, isoTimestampEnd=None)Retrieve project logs from Supabase for debugging.supabase.list_storage_buckets()List all storage buckets in a Supabase project.supabase.create_storage_bucket(bucketName, public=False, fileSizeLimit=None, allowedMimeTypes=None)Create a new storage bucket in Supabase.supabase.get_storage_bucket(bucketId)Get details about a specific Supabase storage bucket.supabase.list_storage_files(bucketId, prefix=None, limit=None, offset=None)List files in a Supabase storage bucket.supadataSupadata.ai4 methods
supadata.scrape_web(url)Scrape content from a single web page.supadata.map_website(url)Map an entire website to discover all URLs and structure.supadata.scrape_youtube_transcript(videoId, lang=None, text=None, chunkSize=None)Extract the transcript from a YouTube video.supadata.scrape_youtube_channel(channelId, limit=None, channelType=None)Get videos from a YouTube channel.telegramTelegram17 methods
telegram.send_message(chat_id, text, parse_mode=None, disable_web_page_preview=None, disable_notification=None, reply_to_message_id=None, reply_markup=None)Send a text message to a chat.telegram.send_photo(chat_id, photo, caption=None, parse_mode=None, disable_notification=None, reply_to_message_id=None)Send a photo to a chat.telegram.send_document(chat_id, document, caption=None, parse_mode=None, disable_notification=None, reply_to_message_id=None)Send a document to a chat.telegram.edit_message(chat_id, message_id, text, parse_mode=None, reply_markup=None)Edit a previously sent message.telegram.delete_message(chat_id, message_id)Delete a message from a chat.telegram.send_poll(chat_id, question, options, is_anonymous=None, type=None, correct_option_id=None)Send a poll to a chat.telegram.get_updates(offset=None, limit=100, timeout=0, allowed_updates=None)Poll for new incoming updates.telegram.get_chat(chat_id)Get detailed info about a chat.telegram.get_chat_member_count(chat_id)Get the member count of a chat.telegram.set_webhook(url, max_connections=None, allowed_updates=None, secret_token=None)Configure a webhook URL for receiving updates.telegram.get_me()Get basic info about the bot (test connection).telegram.pin_message(chat_id, message_id, disable_notification=None)Pin a message in a chat.telegram.unpin_message(chat_id, message_id=None)Unpin a message in a chat.telegram.set_chat_title(chat_id, title)Set the title of a chat.telegram.set_chat_description(chat_id, description="")Set the description of a chat.telegram.leave_chat(chat_id)Leave a group, supergroup, or channel.telegram.send_chat_action(chat_id, action)Send a chat action like typing indicator.xX11 methods
x.get_me()Return the authenticated user's profile (requires OAuth user context).x.create_tweet(text, reply_to_tweet_id=None)Publish a new tweet (requires OAuth user context).x.get_user(username)Look up a public user profile by username.x.get_tweet(tweet_id)Fetch a single tweet with public engagement metrics.x.get_tweet_metrics(tweet_id)Fetch a tweet with extended metrics including non_public_metrics and organic_metrics for tweets authored by the authenticated user.x.list_user_tweets(user_id, max_results=10, pagination_token=None, start_time=None, end_time=None)List recent tweets from a user by their numeric user ID.x.search(query, max_results=10, allowed_x_handles=None, excluded_x_handles=None, from_date=None, to_date=None)Search recent posts on X using the X API v2.x.user_mentions(username, max_results=10)Fetch recent @mentions of a user by username.x.tweet_counts(query, granularity="hour")Get recent tweet volume counts for a search query.x.user_timeline(username, max_results=10, exclude=None)Fetch recent posts from a user's timeline by username.x.trends(woeid=1)Get trending topics for a location by WOEID.xeroXero21 methods
xero.create_invoice(contact_id, line_items=None, due_date=None, invoice_number=None, reference=None)Create a new sales invoice.xero.update_invoice(invoice_id, status=None, due_date=None)Update an existing invoice.xero.get_invoice(invoice_id)Get a single invoice by ID.xero.list_invoices(status=None, contact_id=None, page=None)List invoices with optional filters.xero.void_invoice(invoice_id)Void an existing invoice.xero.send_invoice(invoice_id)Email an invoice to the contact.xero.create_bill(contact_id, line_items=None, due_date=None, status=None)Create a new bill (accounts payable).xero.list_bills(page=None)List all bills.xero.create_contact(name, email_address=None, phone=None, is_customer=None, is_supplier=None)Create a new contact.xero.update_contact(contact_id, name=None, email_address=None)Update an existing contact.xero.get_contact(contact_id)Get a single contact by ID.xero.list_contacts(where=None, page=None)List contacts with optional filters.xero.create_payment(invoice_id, account_id, amount, date=None, reference=None)Record a payment against an invoice.xero.list_payments(status=None, page=None)List payments.xero.create_credit_note(contact_id, line_items=None, type=None)Create a credit note.xero.list_credit_notes(status=None)List credit notes.xero.create_purchase_order(contact_id, line_items=None, delivery_date=None)Create a purchase order.xero.get_purchase_order(purchase_order_id)Get a purchase order by ID.xero.create_item(code, name, description=None, sales_unit_price=None, purchase_unit_price=None)Create a new item/product.xero.list_items()List all items.xero.list_accounts(account_type=None)List chart of accounts.zoomZoom8 methods
zoom.search_meetings(from_date, to_date, topic=None, limit=30)Search past Zoom meetings by date range and optional topic keyword.zoom.get_meeting(meeting_id)Get details for a specific past Zoom meeting (topic, duration, host, time).zoom.list_participants(meeting_id, limit=100)List participants of a past Zoom meeting with join/leave times.zoom.get_transcript(meeting_id, format=text)Fetch the transcript of a recorded Zoom meeting. Returns speaker-labeled text by default, or raw VTT with format='vtt'.zoom.get_meeting_chat(meeting_id)Fetch the in-meeting chat log from a recorded Zoom meeting.zoom.get_meeting_polls(meeting_id)Get poll questions and participant responses from a past Zoom meeting.zoom.get_meeting_qa(meeting_id)Get Q&A questions and answers from a past Zoom meeting or webinar.zoom.get_meeting_summary(meeting_id)Get the Zoom AI-generated meeting summary (requires AI Companion enabled in Zoom settings).zoominfoZoomInfo7 methods
zoominfo.search_contacts(firstName=None, lastName=None, email=None, jobTitle=None, companyName=None, department=None, managementLevel=None, country=None, state=None, page=1)Search for B2B contacts by name, title, company, or location.zoominfo.search_companies(companyName=None, industry=None, country=None, state=None, page=1)Search for B2B companies by name, industry, revenue, or location.zoominfo.search_intent(topics, page=1)Search for buyer intent signals by topic.zoominfo.enrich_contact(email=None, firstName=None, lastName=None, companyName=None)Enrich a contact with full details including email, phone, and social profiles.zoominfo.enrich_company(companyName=None, companyId=None)Enrich a company with full firmographic details.zoominfo.enrich_intent(companyId, topics)Get buyer intent signals for a specific company and topics.zoominfo.get_usage()Check ZoomInfo API usage and remaining credits.