Build Filter
Build a validated filter for any object type. Returns a serialized filter_json string to pass into create_view, edit_view, create_chart, or any other tool that accepts filter_json.
Workflow:
1. Discover valid fields: call get_filter_attributes for the directory, then the per-object tool it points to for your object_type (e.g. get_issue_filter_attributes). The per-object tool returns fields, operators, and reference_type annotations. If you need values for a dynamic status property, also call the matching status tool (e.g. get_issue_statuses, get_task_statuses). Status filters accept the label or slug value returned by those tools (e.g. "open" is the default New status). To match active/non-closed items, use operator not_any_of with the closed/completed status value (e.g. not_any_of ["closed"]).
2. When a property's reference_type is set ("team", "user", "account"), resolve names to UUIDs via search_teams / search_users / search_accounts before using them as values.
3. Call build_filter with the conditions. It validates fields, operators, references, and known status values. The returned filter_json has already been validated — pass it through unchanged to downstream tools.
Each condition has a field (built-in property name or custom field slug), operator, and value/values. Text, Number, and URL fields (e.g. from_email, issue_title) accept a single value per condition — the filter editor renders them as one input and cannot show more. To exclude several values from one of those fields, pass one single-value not_any_of condition per value; conditions are ANDed, which is what exclusion needs. Matching any of several values is the opposite: build_filter cannot express it, because everything it returns is ANDed — ask for a separate trigger branch per value instead (see build_trigger). Most conditions filter the object's own fields (e.g. an issue's from_email or source) — leave related_object_type unset for those. Only set related_object_type to hop to a DIFFERENT related object (e.g. an issue's account); never set it equal to object_type.
AI conditions: for a natural-language condition the AI evaluates per issue (e.g. "the email is a spam sales solicitation"), set type="ai" and prompt=<the condition in plain language>, and omit field/operator/value. AI conditions are only supported for object_type "issue" and are intended for trigger branch conditions (build_trigger) — do not use them in views, charts, or other filter consumers.
Returns a validated serialized filter object suitable for trigger conditions and other filter-aware APIs.
Create Attachment
Upload a base64-encoded file to Pylon and return its attachment ID and URL. The upload is not attached to an issue or message. Files are limited to 5 MB decoded.
Create Issue
Create a new issue/ticket in the authenticated Pylon organization. Requires an account ID, title, and body HTML. Optionally specify requester, priority, assignee, team, and tags.
Create Milestone
Create a milestone within a project.
Create Project
Create a project for an account. Set project_template_id to scaffold milestones, tasks, and subtasks from a project template; otherwise name is required.
Create Project From Template
Create a project from a project template for an account. The template's milestones, tasks, and subtasks are copied into the new project, with optional top-level overrides.
Create Task
Create a new task. Requires a title. Optionally specify account, project, milestone, assignee, due date, status, and visibility settings. Tasks can be associated with accounts and projects.
Create Trigger
Create a disabled trigger in a custom trigger group with one or more non-recurring, non-phone kickoffs and flat action/time-delay/condition steps. The trigger is always disabled so a teammate can review and enable it in Pylon. Call get_trigger_examples for canonical patterns, then use list_trigger_groups, kickoff/action discovery, and build_filter to resolve the live values. Call validate_trigger with the completed payload before creating it. Actions must be compatible with every kickoff. Use a standalone conditions step as a checkpoint that stops the rest of its branch when the filter no longer matches. When describe_trigger_kickoff reports supports_front_delay, set its returned front_delay_condition.condition_key inside that kickoff's condition using the matching condition_schema. Default/special groups, recurring schedules, phone/IVR triggers, nested branches, and background-agent investigation actions are intentionally unsupported.
Delete Task
Delete a task by ID. This will also delete all subtasks of the task. This action cannot be undone.
Describe Trigger Action
Get one trigger action's canonical variables_key, exact variables schema, and compatible kickoff types. Call this before adding the action to create_trigger or update_trigger.
Describe Trigger Kickoff
Get one kickoff's supported condition variants and action types. For recurring_schedule, pass object_type to discover actions for that scheduled object.
Get Account
Get full details for a Pylon customer account. Pass either the account ID (UUID) or external ID. Returns account details including name, domain, owner, tags, custom fields, and linked channels.
Get Account Filter Attributes
List the fields available when building an account filter, plus the org's custom account fields. Properties with a static value space (account_state, account_source, is_disabled) include allowed_values inline. Reference-typed properties (team_id → team, owner_id → user, parent_account_id → account) require UUIDs — resolve via search_teams / search_users / search_accounts first.
Get Agent Issue
Get an AI agent's full event/action timeline on a specific real issue — kickoff, tool calls, runbook steps, reassignments/escalations, messages, and outcomes. The live-issue analog of get_playground; use it to diagnose what the agent did on a real issue. Both agent_id and issue_id are required (use list_agents and get_agent_issue_logs to discover them).
Get Contact
Get full details for a Pylon contact (customer). Pass the contact ID (UUID). Returns contact details including name, email, account, and custom fields.
Get Contact Filter Attributes
List the fields available when building a contact filter, plus the org's custom contact fields. contact_portal_role includes allowed_values inline. contact_account_id references an account — resolve via search_accounts before passing a UUID.
Get Custom Fields
Get custom field definitions for an object type in Pylon. Returns the list of custom fields configured for the given object type, including their slugs, labels, types, and options. Supports opportunities, accounts, issues, contacts, tasks, and projects.
Get Feature Request Filter Attributes
List the fields available when building a feature request filter, plus the org's custom feature request fields.
Get Feature Request Statuses
List every active feature request status configured for this organization, including built-in and custom statuses. Use the returned value as request_status in update_feature_request.
Get Filter Attributes
Entry point for filter field discovery. Returns a directory of per-object tools — call the one matching your object type (issue / account / contact / task / project / opportunity / feature_request) to get its fields, operators, and reference types. For value spaces on dynamic properties (issue state, task_status), call the matching status tool (get_issue_statuses, get_task_statuses) in addition. Call this when you don't know which specific tool to use; skip straight to the specific one when you do.
Get Issue
Get full details for a Pylon support issue/ticket. Pass either the issue ID (UUID) or issue number. Returns title, body, state, metadata, custom fields, and nested account/assignee/requester info.
Get Issue Filter Attributes
List the fields available when building an issue filter, plus the org's custom issue fields. Properties with a static value space (source, issue_type, booleans, last_message_from) include allowed_values inline. For state — the one dynamic, org-configured enum — call get_issue_statuses; this tool does not fetch statuses automatically. Properties with reference_type="team" or "user" (e.g. team_id, assignee_id, owner_id) require UUIDs: resolve names via search_teams / search_users before passing values to build_filter.
Get Issue Messages
Get the full message history for a Pylon issue. Pass either the issue ID (UUID) or issue number. Returns all messages in chronological order with author info.
Get Issue Statuses
List every issue status configured for this org: the five default categories (open, in_progress, on_hold, waiting_on_action, closed) plus any custom statuses the admin has added. Call this when you need values for the issue state property in build_filter — pass value=<slug> to equals / values=[...slugs] to includes_any_of. The value "open" is the slug of the default New status (it matches only New, not every non-closed status). To filter for active/non-closed issues, use operator not_any_of with value "closed".
Get Me
Get the currently authenticated user's details. Returns the user's name, email, and role. No parameters required.
Get Milestone
Get full details for a milestone by ID.
Get Milestones
List milestones, optionally filtered by project_id and/or account_id.
Get Opportunity Filter Attributes
List the fields available when building an opportunity filter, plus the org's custom opportunity fields. opportunity_account_id references an account — resolve via search_accounts.
Get Project
Get full details for a specific project. Returns project information including description, owner, and progress counts. Use get_milestones with project_id to retrieve its milestones.
Get Project Filter Attributes
List the fields available when building a project filter, plus the org's custom project fields. project_status and project_is_archived include allowed_values inline. project_owner references a user, project_account_id references an account — resolve via search_users / search_accounts.
Get Project Templates
List project templates in the organization by name and ID. Use a listed project_template_id with create_project_from_template or create_project.
Get Projects
Get up to 100 projects, optionally filtered by account. Without account_id, searches organization projects. Returns a lightweight list with project metadata including name, status, dates, and progress counts. Use limit to request between 1 and 100 results (default 50). Projects are a Plus plan feature.
Get Tag
Look up a single tag by its exact value. The lookup is case-sensitive and scoped to the organization's default tag key for the given object_type. Returns a not-found error if no tag matches — use list_tags for fuzzy or prefix discovery.
Get Task
Get full details for a single task by ID, including its parent task ID and immediate subtasks.
Get Task Filter Attributes
List the fields available when building a task filter, plus the org's custom task fields. For the task_status property's allowed values (default + org-custom statuses), call get_task_statuses — this tool stays cheap and does not fetch them automatically. task_assignee references a user, task_account_id references an account — resolve via search_users / search_accounts.
Get Task Statuses
List every task status configured for this org: the default categories (not_started, in_progress, completed) plus any custom task statuses the admin has added. Call this when you need values for the task_status property in build_filter — pass value=<slug> to equals / values=[...slugs] to includes_any_of. To filter for active/non-completed tasks, use operator not_any_of with value "completed".
Get Tasks
Get tasks filtered by account and/or project. At least one of account_id or project_id is required. Returns a lightweight list of tasks with their details including title, status, assignee, due date, and project information.
Get Trigger
Get one trigger's complete stored configuration, including kickoff metadata, branches, conditions, action/time-delay steps, and stable branch/step IDs.
Get Trigger Examples
Return canonical input-shaped examples for common trigger patterns. Call this before create_trigger or update_trigger when constructing branches, delays, condition checkpoints, multiple kickoffs, or front delays. Examples intentionally omit triggerID, groupID, title, and description; resolve those fields separately and use live discovery tools for action variables, kickoff conditions, filters, and entity IDs.
Get User
Get full details for a Pylon user (team member). Pass the user ID (UUID). Returns user details including name, email, and role.
List Tags
List tags defined in the organization. Filter by object_type to get only issue tags or only account tags. Use this to resolve a tag's value to its ID before calling add_issue_tags, remove_issue_tags, update_tag, or to check whether a tag already exists before calling create_tag.
List Teams
List all teams in the organization. Returns each team's ID and name. Useful for discovering team IDs to pass to other tools (e.g. the team_id filter on search_issues).
List Trigger Actions
List every trigger action type and the kickoff types that support it. Call describe_trigger_action for each action you intend to use before building its variables payload.
List Trigger Groups
List trigger groups in the current Pylon organization, including each group's ID, title, icon, and default status.
List Trigger Kickoffs
List every trigger kickoff type and whether it takes a condition. Call describe_trigger_kickoff for the selected type before building kickoffMetadata.
List Triggers
List triggers in the current Pylon organization with their kickoff/action structure and firing statistics. Condition trees and large action bodies are omitted; use get_trigger for one complete configuration.
Search Accounts
Search for customer accounts in Pylon. Returns a lightweight summary of accounts matching the specified filters. Supports filtering by custom fields using the custom_field_filters parameter - pass the custom field slug as the field name. For user-type custom fields (e.g. Salesforce AE owner), you can pass a Pylon user name or user ID as the value. Supports cursor-based pagination - use the returned cursor to fetch additional pages. Pass a returned account ID to get_account for full details including custom fields, external IDs, and linked channels.
Search Contacts
Search for contacts in Pylon. Returns a lightweight summary of contacts matching the specified filters. Supports filtering by name (fuzzy search), email, account, and custom fields. Use the get_custom_fields tool with object_type 'contact' to discover available custom field slugs. Supports cursor-based pagination - use the returned cursor to fetch additional pages. To get full contact details including custom fields, use the get_contact tool.
Search Issues
Search for issues/tickets in Pylon. Returns a lightweight summary of issues matching the specified filters. Supports cursor-based pagination - use the returned cursor to fetch additional pages. Pass a returned issue ID to get_issue for full details including body, custom fields, and nested account/assignee/requester info.
Search Projects
Search projects across the organization by project name, account, owner, status, and archive state.
Search Tasks
Search tasks across the organization. Unlike get_tasks, this does not require account_id or project_id. Supports filtering by account, project, assignee, statuses, and full-text search.
Search Teams
Look up teams in the current organization by name (case-insensitive substring match). Returns team IDs and names. Use this whenever a filter, chart, or other tool requires a team ID — never pass a raw team name (e.g. "CS") as a team_id value.
Search Users
Search for Pylon users (team members) by name. Returns matching users with their ID, name, and email.
Update Account
Update an existing customer account in Pylon. You can update the name, owner, tags, and custom fields. Custom field keys must be configured account-field slugs. Use get_account to read the full account details before updating.
Update Issue
Update an existing issue/ticket in Pylon. You can update the state, assignee, team, tags, and custom fields. Custom field keys must be configured issue-field slugs. Use get_issue to read the full issue details before updating.
Update Milestone
Update milestone fields. Pass empty string for due_date to clear it.
Update Project
Update project fields. Pass empty string for nullable date fields or owner_id to clear them.
Update Task
Update an existing task. Specify the task_id and any fields to update. Pass empty string for nullable fields (due_date, account_id, project_id, milestone_id, assignee_id) to clear them.
Update Trigger
Fully replace the editable configuration of an existing enabled or disabled V1-compatible trigger. The trigger stays in its current custom group and keeps its enabled/disabled state. Call get_trigger_examples for canonical patterns, then get_trigger and preserve useful branch/step IDs while replacing the complete editable configuration. Call validate_trigger with the completed payload before updating it. One or more non-recurring, non-phone kickoffs and flat action/time-delay/condition steps may be used across multiple branches. Actions must be compatible with every kickoff. A failed standalone conditions step stops the rest of its branch. Front delays use the condition key and schema returned by describe_trigger_kickoff. Updates are rejected for default groups, recurring schedules, phone/IVR triggers, nested branches, or background-agent investigations.
Upload Account Files
Upload one or more files (e.g. PDFs) into the Files tab of an account. Files with a matching filename are overwritten. Max 5 files per call, max 10 MB per file.
Validate Trigger
Validate a complete create_trigger or update_trigger payload without writing a trigger or creating a version. Use groupID for a create proposal or triggerID for a full replacement update, but not both. Call this while iterating, then pass the same payload to the corresponding write tool when valid is true. Validation uses the same supported V1 shape, organization-scoped lookups, kickoff/action compatibility checks, and persisted trigger rules as the write tools.