Connect Aspire to AI Agents: Automate service tracking and CRM data
Give your AI agent Aspire tools.
Connect Aspire to AI agents to automate field service workflows and CRM data. This guide covers bypassing API quirks, fetching tools via Truto, and handling rate limits.
In this guide
- 01Connect Aspire Account
- 02Fetch Proxy API Tools
- 03Bind Tools to LLM
- 04Implement Rate Limit Handling
- 05Orchestrate Agent Workflows
The guide
Learn how to connect Aspire to AI agents using Truto's /tools endpoint. Build autonomous workflows for field ops and CRM data without brittle code.
You want to connect Aspire to an AI agent so your system can autonomously dispatch field crews, track equipment allocations, manage work tickets, and sync property CRM data based on real-time service conditions. Here is exactly how to do it using Truto's /tools endpoint and SDK, bypassing the need to build and maintain a custom Aspire integration from scratch.
Giving a Large Language Model (LLM) read and write access to a complex field service management (FSM) platform like Aspire is an engineering headache. You either spend sprints building, hosting, and maintaining a custom connector, or you use a managed infrastructure layer that handles the boilerplate for you. If your team uses ChatGPT, check out our guide on connecting Aspire to ChatGPT, or if you are building on Anthropic's models, read our guide on connecting Aspire to Claude. For developers building custom autonomous workflows, you need a programmatic way to fetch these tools and bind them directly to your agent framework.
This guide breaks down exactly how to fetch AI-ready tools for Aspire, bind them natively to an LLM using frameworks like LangChain, LangGraph, CrewAI, or the Vercel AI SDK, and execute complex field service workflows. For a deeper look at the architecture behind this approach, refer to our research on architecting AI agents and the SaaS integration bottleneck.
Why a Unified Tool Layer Matters for Agent Safety
Before writing a line of integration code, you must decide what layer your agent talks to. This choice fundamentally determines how safe your production system will be when interacting with physical world logistics and financial data.
Direct API tools - writing one Python or TypeScript function per raw Aspire endpoint - look convenient in a local prototype. However, this approach pushes vendor-specific API quirks directly into the LLM's context window. The model has to remember exactly how Aspire handles pagination cursors, that ID fields must be passed in the request body for certain bulk updates, and that custom fields require a two-step definition-then-value lookup. Every one of those quirks is a hallucination waiting to happen.
A unified tool layer collapses these complexities behind a standardized schema. Your agent sees create_a_aspire_issue, list_all_aspire_work_tickets, and create_a_aspire_opportunity - not fragmented raw HTTP requests. Truto maps Aspire's underlying API into REST-based Proxy APIs, which are then exposed as fully described tools for LLMs.
This architecture gives you concrete safety wins:
- Smaller attack surface for hallucination. The LLM only ever chooses from stable function names with explicitly defined JSON schemas. It never invents query parameter strings or guesses at object relationships.
- Deterministic input validation. Every tool is backed by a strict schema. Invalid arguments are rejected by the framework before they ever hit the Aspire API, ensuring a broken tool call fails safely.
- Decoupled authentication. The agent does not handle access tokens, client secrets, or refresh cycles. It operates purely on business logic.
The Engineering Reality of the Aspire API
Giving an LLM access to external data sounds simple until you hit the realities of enterprise FSM software. Aspire is a robust, highly relational system designed to run complex field operations, landscaping businesses, and construction crews. Its API reflects that complexity.
If you hardcode these interactions into your agent, you will spend your sprints writing defensive integration code instead of improving your model's reasoning capabilities.
The Body-Bound ID Trap for Updates
Standard REST principles dictate that when you update a resource, you send the unique identifier in the URL path (e.g., PUT /companies/{id}). Aspire frequently breaks this convention for bulk updates and certain modifications. For endpoints like modifying existing catalog items or updating companies, Aspire requires the target ID to be placed strictly inside the request body, not in the URL path.
If an LLM expects standard REST patterns, it will hallucinate paths like /companies/12345/bulk_update and fail repeatedly. Truto's tool layer abstracts this constraint. The tool schema explicitly defines the ID as a required parameter in the payload, forcing the LLM to format the request exactly as Aspire demands.
Custom Field Definition Segregation
In Aspire, physical properties, equipment, and contacts rely heavily on custom fields to track localized data (like gate codes or specific vehicle maintenance requirements). However, the API splits this data model. You cannot simply fetch a property and see "gate_code": "1234".
You must first query custom field definitions to retrieve the schema, and then map those definitions to custom field values. Expecting an agent to hold this relational map in its working memory across multiple chain-of-thought steps leads to rapid token exhaustion and errors. By wrapping these as distinct, described tools, the agent is guided on exactly how to resolve custom data without guessing the underlying database schema.
Strict Pagination and Limit Enforcement
Aspire uses a rigid $pageNumber and $limit system for returning list data, typically capping at 1,000 records per page. An agent attempting to "fetch all work tickets for the month" via a single generic query will either receive a truncated dataset or hit a payload limit.
Truto handles query parameter processing at the Proxy API level. While the agent dictates the semantic filters, the underlying tool layer provides clear parameters for iterating through $pageNumber, ensuring the LLM can paginate through historical work tickets systematically.
Handling Aspire Rate Limits in AI Agents
AI agents are notoriously aggressive API consumers. A LangGraph loop executing a planning step might attempt to fetch catalog items, check property availability, and list work tickets in rapid succession.
Factual note on rate limits: Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream Aspire API returns an HTTP 429 Too Many Requests error, Truto passes that exact error back to the caller.
However, Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) conforming to the IETF specification.
As the developer, you must implement retry and backoff logic within your agent's execution loop. You cannot assume the infrastructure will magically absorb these spikes. By reading the standardized ratelimit-reset header returned by Truto, your framework can explicitly instruct the agent to sleep or yield until the window resets, preventing cascading failures in long-running autonomous tasks.
Essential AI Agent Tools for Aspire
Truto provides a comprehensive suite of dynamically generated tools for Aspire. Here are six high-leverage hero tools that unlock autonomous FSM workflows.
List Work Tickets
Retrieves a list of work tickets, which represent the actual work performed related to scheduled services once an opportunity is won.
Contextual usage notes: This is the foundational tool for field operations agents. Agents use this to check the status of jobs, audit completed work against open invoices, or identify backlog. Because lists can be massive, agents should be prompted to use the paging parameters to navigate historical data.
"Fetch the first page of work tickets with a limit of 100 to check which jobs are currently open for the North Branch."
Create an Opportunity
Adds a new opportunity, representing potential or actual work performed by the company in the form of a work order or contract.
Contextual usage notes: Used by revenue-focused agents. When a lead comes in via email or SMS, an agent can autonomously draft the opportunity, categorize the OpportunityType, and stage it for a human estimator to review.
"Create a new opportunity named 'Spring Cleanup - Evergreen Estates' and set the opportunity type to maintenance."
Add Clock Time
Adds a time entry record (clock times) for a crew member or employee.
Contextual usage notes: Essential for payroll and cost-tracking automation. If a field worker texts a central AI number saying "I finished at 123 Main St at 4 PM", the agent can parse the natural language and translate it into a structured clock time entry.
"Log a clock time entry for contact ID 5542. The start time was today at 08:00 AM and the end time was 04:00 PM."
Create an Issue
Records a conflict or problem associated with a property, opportunity, or work ticket.
Contextual usage notes: This tool gives your agent the ability to escalate problems. If an agent analyzing field visit notes detects a broken irrigation pipe, it can automatically generate an issue, assign it to the repair team, and append the relevant context.
"Create a new issue assigned to user ID 88. The subject is 'Broken Sprinkler Head' and include notes detailing the location at the south gate."
List Catalog Items
Retrieves labor, material, equipment, subcontractors, kits, or other inventory items that can be sourced to an opportunity.
Contextual usage notes: Agents use this as a lookup table. Before an agent can build a quote or allocate materials to a work ticket, it must query the catalog to ensure the item exists, is active, and is available to bid.
"Search the catalog items to find the current active listing and pricing for premium mulch."
Update Work Ticket Partial Occurrences
Updates specific partial occurrences of a work ticket associated with scheduled services.
Contextual usage notes: When work spans multiple days or requires splitting due to weather delays, agents use this bulk update tool to modify the scheduling reality without deleting the parent work ticket.
"Update the work ticket partial occurrence for ticket ID 992 to reflect that only 4 hours of the allocated 8 hours were completed today."
To view the complete inventory of available Aspire tools, schema requirements, and query parameters, visit the Aspire integration page.
Workflows in Action
Providing an LLM with tools is only the first step. The real value emerges when you chain these tools together into autonomous workflows. Here are two concrete examples of how an AI agent interacts with Aspire in production.
Scenario 1: The Autonomous Field Escalation
User Prompt:
"Review the field notes submitted by Crew A this morning. If they reported any broken equipment on site, log an issue in Aspire, assign it to the maintenance manager, and cross-reference our catalog to see if we have replacement parts in stock."
Agent Execution Steps:
- The agent parses the inbound field notes and identifies a broken water pump at a specific property.
- The agent calls
list_all_aspire_catalog_itemsto search the inventory for "water pump" to confirm availability. - The agent calls
create_a_aspire_issuewith the subject "Broken Water Pump at Property X", assigns it to the designated manager ID, and includes the catalog availability in theNotesfield.
Result: The maintenance manager receives a fully contextualized issue in Aspire instantly, complete with inventory status, bypassing manual data entry by the field crew.
Scenario 2: Opportunity-to-Execution Handoff
User Prompt:
"The prospect for the 'Oakwood HOA Landscaping' deal just signed the contract via email. Mark their opportunity as won and draft the initial work tickets for the first month of service."
Agent Execution Steps:
- The agent calls
list_all_aspire_opportunitiesto find the specific "Oakwood HOA" record. - The agent uses the relevant update tool (via the unified Proxy API layer) to change the opportunity status to won.
- The agent calculates the required service dates for the first month based on the contract terms.
- The agent calls
create_a_aspire_quick_ticketorcreate_a_aspire_work_ticket(depending on the required complexity) to stage the upcoming visits for the scheduling team.
Result: The sales motion smoothly transitions into field operations without a human project manager needing to manually copy data from an inbox into the FSM system.
Building Multi-Step Workflows
To build these workflows, you need to bind Truto's tools to your agent framework. Below is a detailed architectural diagram showing how the TrutoToolManager orchestrates this process.
sequenceDiagram
participant User as "User Application"
participant Agent as "AI Agent Framework"
participant Truto as "Truto API Layer"
participant Aspire as "Aspire API"
User->>Agent: "Log a clock time for employee 42"
Agent->>Truto: Fetch /tools for Aspire Account
Truto-->>Agent: Returns JSON tool schemas
Agent->>Agent: LLM selects create_a_aspire_clock_time
Agent->>Truto: Execute tool with JSON payload
Truto->>Aspire: POST to Aspire endpoints
alt Rate Limit Exceeded
Aspire-->>Truto: 429 Too Many Requests
Truto-->>Agent: 429 with ratelimit-reset header
Agent->>Agent: Sleep until reset time
Agent->>Truto: Retry tool execution
end
Aspire-->>Truto: 200 OK Response
Truto-->>Agent: Standardized success JSON
Agent-->>User: "Clock time logged successfully"Here is how you implement this in TypeScript using the truto-langchainjs-toolset. This example demonstrates fetching the tools, binding them to an OpenAI model, and explicitly handling rate limits passed through by Truto.
import { ChatOpenAI } from "@langchain/openai";
import { TrutoToolManager } from "truto-langchainjs-toolset";
import { HumanMessage } from "@langchain/core/messages";
async function runAspireAgent() {
// 1. Initialize the Truto Tool Manager with your Integrated Account ID
const toolManager = new TrutoToolManager({
trutoApiKey: process.env.TRUTO_API_KEY,
integratedAccountId: "your-aspire-account-id",
});
// 2. Fetch the tools dynamically via the Truto API
const tools = await toolManager.getTools();
console.log(`Loaded ${tools.length} Aspire tools.`);
// 3. Initialize the LLM and bind the tools natively
const llm = new ChatOpenAI({
modelName: "gpt-4o",
temperature: 0,
}).bindTools(tools);
const userMessage = new HumanMessage(
"Find the catalog item for 'Premium Fertilizer' and tell me if it is active."
);
let attempt = 0;
const maxRetries = 3;
// 4. Agent Execution Loop with explicit 429 handling
while (attempt < maxRetries) {
try {
const response = await llm.invoke([userMessage]);
// Log the model's tool call decisions
console.log("Agent decision:", response.tool_calls);
// In a full LangGraph implementation, you would execute the tool call here
// and return the result to the model for final synthesis.
break;
} catch (error: any) {
if (error.response && error.response.status === 429) {
// Truto passes the 429 and standardized IETF rate limit headers through
const resetTimeSecs = parseInt(error.response.headers.get('ratelimit-reset') || '60', 10);
console.warn(`Rate limit hit. Sleeping for ${resetTimeSecs} seconds...`);
await new Promise(resolve => setTimeout(resolve, resetTimeSecs * 1000));
attempt++;
} else {
console.error("Agent execution failed:", error);
throw error;
}
}
}
}
runAspireAgent();This pattern allows the agent to reason about Aspire's complex data model while maintaining the resilience required for production FSM operations.
Strategic Wrap-up
Building AI agents that safely interact with field service software requires more than just passing an API key to an LLM. Aspire's highly relational data model, strict pagination rules, and complex custom field definitions will rapidly overwhelm standard agent frameworks if exposed directly.
By leveraging Truto's /tools endpoint, you abstract away the API mechanics and provide your agent with deterministic, schema-backed functions. This allows your engineering team to focus on building sophisticated dispatch, payroll, and CRM automation logic, rather than maintaining brittle point-to-point integration code.
FAQ
- Does Truto automatically handle Aspire rate limits for my AI agent?
- No. Truto passes HTTP 429 errors directly to the caller. However, Truto standardizes the rate limit headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) so your agent framework can easily implement retry and backoff logic.
- Can I use Truto's tools with frameworks other than LangChain?
- Yes. While Truto provides a LangChain SDK, the /tools endpoint returns standard JSON schemas that can be parsed and bound to any modern AI framework, including LangGraph, CrewAI, and the Vercel AI SDK.
- How does Truto handle Aspire's authentication lifecycle?
- Truto manages the entire OAuth and API key lifecycle on your behalf. For Aspire, Truto utilizes the Client ID and Secret to automatically refresh tokens every 12 hours, ensuring continuous access without agent intervention.
- Are all Aspire endpoints supported as tools?
- Truto supports a comprehensive list of Aspire Proxy APIs mapped as tools, covering work tickets, CRM records, catalog items, payroll codes, and custom fields. You can also customize tool definitions directly in the Truto UI.