Plain connects to a Nagent workspace with an API key. Once it is connected, agents can call 23 Plain actions, such as "Add Customer To Group", "Create Customer Group" and "Create Thread". Nothing is enabled on connect: each action is allowed one at a time, and an action with side effects runs or waits for a person according to the agent's level.
Every operation an agent can call against Plain, with input parameters and output schema.
PLAIN_ADD_CUSTOMER_TO_GROUPTool to add a customer to one or more customer groups. Use when you have a customer and groups ready.
Input parameters
ID of the customer to add to groups.
List of customer group identifiers. Must contain at least one identifier.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_CREATE_CUSTOMER_GROUPCreates a new customer group in Plain for organizing and segmenting customers. Customer groups allow you to categorize customers (e.g., by pricing tier, feature access, or support level) and manage them more effectively in your support workflow. Each group has a unique key, display name, and visual color for easy identification. Use this when you need to create a new customer segment for organization or filtering purposes.
Input parameters
Unique identifier key for the customer group. Must be unique across all customer groups in your workspace. Use lowercase with underscores (e.g., 'vip_customers').
Display name of the customer group (e.g., 'VIP Customers', 'Free Tier'). Used for organization and display purposes.
Hex color code for the group (e.g., #FF5733). Must be a valid 6-digit hex color starting with #.
Optional external ID to link this customer group with an identifier from your system (e.g., Stripe plan ID, internal database ID).
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_CREATE_THREADTool to create a new thread. Use after obtaining valid customer identifier.
Input parameters
Title of the new thread
Optional user assignment for the thread
Optional list of content components for the thread
Optional list of label type IDs to assign
Identifier object for the customer
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_DELETE_CUSTOMERTool to delete a customer from the system. Use when you need to remove a customer by their ID.
Input parameters
Unique identifier of the customer to delete, as returned by the Plain API.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_DELETE_USERTool to delete a user from the system. Use when you need to remove a user by their ID after confirming existence.
Input parameters
Unique identifier of the user to delete, as returned by the Plain API.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_FETCH_COMPANYTool to fetch company details by ID. Use when you need the full profile of a company, including name, domain, contract value, owner info, and timestamps.
Input parameters
Plain's internal ID of the company to fetch, e.g., 'cmp_01H1P4TE62AS5KZ4CZFC0578ED'.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_FETCH_ISSUESFetches external issue tracker links (Jira, Linear, GitHub, etc.) associated with a customer's threads. Returns a flattened list of all issue links across the customer's threads, including the thread context for each issue. Useful for getting a complete view of all external issues related to a customer. With defaults, returns up to threadFirst×linkFirst (2,500) total issue links; results are truncated if limits are exceeded, so reduce threadFirst or linkFirst for large datasets.
Input parameters
Maximum number of issue links to fetch per thread. Must be between 1-100. Defaults to 50.
The unique identifier of the customer whose external issue tracker links (Jira, Linear, etc.) are to be retrieved.
Maximum number of customer threads to fetch. Must be between 1-100. Defaults to 50.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_FETCH_TIERTool to fetch a tier by its ID. Use when you have a tier ID and need its metadata before proceeding. Example: "Fetch tier with ID tier_123".
Input parameters
The unique identifier of the tier to fetch (e.g., 'tier_123')
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_GET_CUSTOMER_BY_EMAILFetch customer details by email address. Returns customer information if found, or null if no customer exists with that email.
Input parameters
Email address of the customer to fetch
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_GET_CUSTOMER_BY_IDTool to retrieve details of a specific customer by their unique ID. Use after obtaining the customer's ID to fetch their complete record.
Input parameters
The unique identifier of the customer to retrieve.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_GET_CUSTOMERSTool to fetch a list of customers. Use when retrieving multiple customer records with pagination, filtering, or sorting.
Input parameters
Number of customers to fetch before the 'before' cursor. Must be ≥ 1.
Cursor for forward pagination. Use with 'first'.
Number of customers to fetch after the 'after' cursor. Must be ≥ 1.
Cursor for backward pagination. Use with 'last'.
Sorting instructions for the customers list.
Filters to apply when fetching customers.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_GET_THREAD_BY_IDFetches comprehensive details of a specific thread by ID, including customer info, status, priority, labels, and assignments. Returns null if thread not found.
Input parameters
Unique thread identifier in format: prefix_26chars (e.g., th_01ABC...). Use LIST_THREADS or CREATE_THREAD to obtain valid IDs.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_GET_USER_BY_IDFetch workspace user/team member by ID. Returns detailed information about a workspace team member including their name, email, status, and avatar. Note: This fetches workspace users (team members), not customers. Use GET_CUSTOMER_BY_ID for customer data.
Input parameters
Unique identifier of the workspace user/team member to fetch (format: u_XXXXXX)
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_LIST_CUSTOMER_GROUPSTool to list all customer groups. Use when you need to retrieve group metadata with optional pagination or filters.
Input parameters
Number of groups to fetch before the 'before' cursor. Must be ≥ 1.
Cursor for forward pagination. Use with 'first'.
Number of groups to fetch after the 'after' cursor. Must be ≥ 1.
Cursor for backward pagination. Use with 'last'.
Filters to apply when fetching customer groups.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_LIST_THREADSDEPRECATED: Use PLAIN_PLAIN_QUERY_THREADS instead. Lists all threads (support conversations) in Plain. Returns thread summaries including ID, reference, title, status, and priority. Use this action to: - Get an overview of all threads in the system - Fetch threads with pagination for large datasets - Find threads by browsing through the list Pagination: Use 'first' for forward pagination (newest first) or 'last' for backward pagination (oldest last). For paginated results, use the cursors from pageInfo (endCursor/startCursor) with 'after'/'before' parameters. If no pagination parameters are provided, returns all threads.
Input parameters
Number of threads to fetch in backward direction. Use for fetching the last N threads or N threads before 'before' cursor. Cannot be used with 'first'.
Cursor for forward pagination. Get threads after this cursor. Use with 'first'. Obtain from pageInfo.endCursor of previous response.
Number of threads to fetch in forward direction. Use for fetching the first N threads or N threads after 'after' cursor. Cannot be used with 'last'.
Cursor for backward pagination. Get threads before this cursor. Use with 'last'. Obtain from pageInfo.startCursor of previous response.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_LIST_TIERSTool to retrieve a list of tiers with pagination. Use when you need to browse available tiers after determining pagination cursors. Example: 'List tiers with first=25'.
Input parameters
Number of items to fetch in backward pagination; must be ≥ 1.
Cursor for forward pagination, used together with 'first'.
Number of items to fetch in forward pagination; must be ≥ 1.
Cursor for backward pagination, used together with 'last'.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_QUERY_THREADSTool to retrieve a paginated list of threads. Use when you need to list threads with optional status filtering.
Input parameters
Cursor for pagination returned by a previous call. Omit for first page. Use the cursor from each response to fetch the next page; omitting it resets to the first page.
Filter threads by status. Supported values: TODO, SNOOZED, DONE.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_REMOVE_CUSTOMER_FROM_GROUPRemoves a customer from one or more customer groups in Plain. Use this action to revoke customer group memberships. The customer must be a member of the specified group(s) - attempting to remove a customer from a group they're not in will result in an error. Groups can be identified by either their Plain internal ID (customerGroupId) or their unique key (customerGroupKey). Common use cases: - Downgrade customer tier (e.g., remove from premium_tier group) - Remove customer from beta access groups - Clean up group memberships after customer status changes
Input parameters
Plain customer ID (format: 'c_01ABC...') of the customer to remove from groups.
List of customer group identifiers to remove the customer from. Must contain at least one identifier. Each identifier must specify either customerGroupId or customerGroupKey.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_RUN_GRAPHQL_QUERYExecute any GraphQL query or mutation against Plain API. Use when no specific action exists or for complex operations like thread timelines, advanced filtering, and custom data retrieval. Supports queries, mutations, fragments, and variables.
Input parameters
A valid GraphQL query or mutation string for Plain API. Use this for any operation not covered by specific actions. Supports queries, mutations, inline fragments, and variables. DateTime fields (e.g., createdAt, updatedAt) are objects requiring subfield selection: use createdAt { iso8601 } — omitting subfields causes GRAPHQL_VALIDATION_FAILED. For paginated connections, request pageInfo { hasNextPage endCursor } and pass endCursor as the cursor argument in subsequent queries.
Variables for the GraphQL operation. Keys must match variable names in the query (without '$'). Use empty dict {} if no variables needed. Date range filter values must be UTC-normalized; non-UTC timestamps in createdAt or updatedAt filters silently exclude boundary records.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_SEND_MESSAGETool to send a new message within a thread. Use after identifying the thread and preparing message content.
Input parameters
Unique identifier of the thread to reply to
Plain text content of the message. If you want to send markdown-formatted content, provide the same content here and in markdownContent.
Impersonate a customer when sending the message
Optional markdown-formatted content of the message. If provided, textContent should contain the plain text version of the same content.
Channel-specific options such as email CC/BCC recipients
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_UPDATE_COMPANYUpserts (creates or updates) a company in Plain. Provide either companyId (for updating an existing company by ID) or companyDomainName (for upserting by domain). Use this to create new companies, update existing company details (name, domain, contract value), or assign account owners.
Input parameters
Name for the company.
Existing company ID to update (format: 'co_...'). Provide either companyId OR companyDomainName.
Domain name for the company (e.g., 'acme.com').
Optional contract value in cents. Must be non-negative.
Company domain name for lookup/upsert (e.g., 'acme.com'). Provide either companyId OR companyDomainName.
ID of the user to assign as account owner.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_UPDATE_THREADTool to update a thread's title. Use when renaming a thread after confirming its ID.
Input parameters
New title for the thread
Unique identifier of the thread to update
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
PLAIN_UPSERT_CUSTOMERTool to upsert (create or update) a customer. Use when syncing or ensuring a customer record exists before subsequent actions.
Input parameters
Details for creation if not found.
Details for update if found.
Selector for existing customer.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
Agents can call 23 Plain actions on Nagent, including "Add Customer To Group", "Create Customer Group" and "Create Thread". Add Customer To Group: Add a customer to one or more customer groups. Each action is listed on this page with its input parameters and its output.
Plain connects with an API key, under your workspace's own connection. Nothing is enabled on connect: each action is allowed one at a time and can be scoped to the agents that need it.
Add Customer To Group takes 2 required inputs: customerId and customerGroupIdentifiers. It returns data, error and successful.