Connect Unleashed to AI Agents: Sync Products, BOMs and Purchases
Give your AI agent Unleashed tools.
Connect Unleashed to AI frameworks like LangChain and CrewAI using Truto. This guide covers bypassing Unleashed API quirks, handling rate limits, and orchestrating multi-step supply chain workflows.
In this guide
- 01Authenticate with Unleashed
- 02Fetch Proxy API Tools
- 03Bind Tools to the Agent
- 04Implement Rate Limit Handling
- 05Execute the Multi-Step Workflow
The guide
Learn how to connect Unleashed to AI Agents using Truto's /tools endpoint. Build autonomous workflows for inventory, assemblies, and purchasing.
You want to connect Unleashed to an AI agent so your system can independently monitor stock levels, assemble bill of materials (BOM), and dispatch purchase orders based on historical sales context. Here is exactly how to do it using Truto's /tools endpoint and SDK, bypassing the need to build a custom Unleashed integration from scratch.
Giving a Large Language Model (LLM) read and write access to your inventory management system is an engineering headache. You either spend sprints mapping complex inventory relationships, dealing with legacy date formats, and maintaining auth tokens, or you use an infrastructure layer that handles the boilerplate. If your team uses ChatGPT, check out our guide on connecting Unleashed to ChatGPT, or if you are building on Anthropic's models, read our guide on connecting Unleashed to Claude. For developers building custom autonomous workflows, you need a programmatic way to fetch these tools and bind them to your agent framework.
This guide breaks down exactly how to fetch AI-ready tools for Unleashed, bind them natively to an LLM using frameworks like LangChain, LangGraph, CrewAI, or the Vercel AI SDK, and execute complex supply chain operations. For a deeper look at the architecture behind this approach, refer to our research on architecting AI agents and the SaaS integration bottleneck.
The Engineering Reality of the Unleashed API
Giving an LLM access to an inventory management API sounds simple in a prototype. You write a Node.js function that makes a fetch request and wrap it in an @tool decorator. In production against a strict ERP or inventory system like Unleashed, this approach collapses.
If you hardcode these interactions into your agent, you will spend your sprints writing defensive integration code instead of improving your model's reasoning. Unleashed introduces several specific integration challenges that break standard LLM assumptions.
The Legacy Date Format Trap
LLMs default to standard ISO 8601 date strings (2026-05-14). When fetching records from Unleashed, the API responds with legacy Microsoft WCF/OData date strings formatted like /Date(1620000000000)/.
If an agent reads a record, makes a change, and sends the exact same date format back in a PUT request, Unleashed will reject it. The API demands ISO format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS) on input, despite returning epoch strings on output. Custom tool layers must enforce schema boundaries that force the LLM to output clean ISO strings, shielding the upstream API from invalid dates.
Strict Financial Integrity Constraints
When an LLM generates a purchase order or a sales order, it cannot approximate numbers. Unleashed enforces strict double-entry accounting rules on its API layer. If an agent calls the endpoint to create a purchase order, the Currency must perfectly match the supplier's default currency, and there must be an active exchange rate logged on the Currency Rates settings page.
Furthermore, the TaxCode, TaxRate, SubTotal, TaxTotal, and Total must calculate flawlessly. If the sum of the LineTaxCode fields on the PurchaseOrderLines array diverges from the master TaxTotal by a single cent, the API throws a 400 Bad Request. LLMs are notoriously bad at arbitrary math, meaning your tool descriptions must mandate that the agent utilizes a calculator tool or strictly validates totals before submission.
State-Dependent Transitions and Ghost Deletions
Inventory systems are highly stateful. You cannot delete an assembly that is marked Completed; you can only delete Parked assemblies. If an agent tries to mark a product as obsolete, the API will reject it if there is any stock on hand across any warehouse.
Unleashed also has unique endpoint quirks. For example, if you command the API to delete a customer contact, the API successfully deletes the contact but frequently returns an HTTP 500 internal server error stating: The only supported IsolationLevel is IsolationLevel.Serializable. If your agent interprets the 500 error as a failure and attempts to retry, it will enter an infinite loop trying to delete a contact that no longer exists.
Why a Unified Tool Layer Matters for Agent Safety
Before writing a line of integration code, decide what layer your agent talks to. Truto resolves the integration bottleneck through two primary levels of abstraction: Proxy APIs and Unified APIs.
Every integration on Truto maps to a comprehensive JSON object that represents how the underlying product's API behaves. Integrations have Resources mapping to endpoints, and Methods defined on those resources (e.g., standard CRUD operations like List, Get, Create, Update, Delete).
These methods are provided as Proxy APIs. Truto handles all the messy authentication, OAuth lifecycle management, and query parameter processing. Unified APIs are built on top of Proxy APIs, transforming data to normalize structures across an entire software category.
However, when solving problems agentically, Proxy APIs are highly effective. The agent is intelligent enough to handle the raw data from the underlying product's API, provided the schema is clean. Truto takes the descriptions and schemas for all methods on an integration and generates tools via the /tools endpoint.
This gives you concrete safety wins:
- Deterministic input validation. Every tool has a strict JSON schema. If the agent invents a parameter for a purchase order, the schema validation rejects it before it hits the Unleashed API.
- Reduced attack surface. The LLM only sees the stable function names provided by the
/toolsendpoint, preventing it from hallucinating direct HTTP calls.
Building Multi-Step Workflows
An AI agent managing an Unleashed instance rarely executes a single command. It needs to read stock levels, query suppliers, generate an order, and verify the result. This requires fetching tools dynamically and binding them to the agent.
Fetching Tools and Binding to LangChain
Truto provides a seamless way to load these operations. Below is a framework-agnostic pattern shown using TypeScript and the Truto Langchain.js SDK.
import { ChatOpenAI } from "@langchain/openai";
import { TrutoToolManager } from "truto-langchainjs-toolset";
import { AgentExecutor, createToolCallingAgent } from "langchain/agents";
import { ChatPromptTemplate } from "@langchain/core/prompts";
async function runUnleashedAgent() {
// 1. Initialize the LLM
const llm = new ChatOpenAI({
modelName: "gpt-4o",
temperature: 0,
});
// 2. Fetch the Unleashed Proxy API tools via Truto
const toolManager = new TrutoToolManager({
trutoApiKey: process.env.TRUTO_API_KEY,
integratedAccountId: "your_unleashed_account_id"
});
// Filter for specific methods to reduce context window bloat
const tools = await toolManager.getTools({
methods: ["read", "write", "custom"]
});
// 3. Create the agent prompt
const prompt = ChatPromptTemplate.fromMessages([
["system", "You are a supply chain assistant. You manage Unleashed inventory. Always format dates as YYYY-MM-DD. Ensure all purchase order totals exactly match the sum of their lines. If a request is rate limited, wait and retry."],
["human", "{input}"],
["placeholder", "{agent_scratchpad}"],
]);
// 4. Bind and execute
const agent = createToolCallingAgent({
llm,
tools,
prompt,
});
const executor = new AgentExecutor({
agent,
tools,
maxIterations: 10,
});
const result = await executor.invoke({
input: "Check the stock on hand for product code 'WIDGET-A' across all warehouses. If available quantity is below 50, create a purchase order for 100 more from supplier 'SUP-001'.",
});
console.log(result.output);
}The Reality of Rate Limits
When your agent chains multiple reads and writes, it will inevitably hit API rate limits.
A factual note on rate limits: Truto does not automatically retry, throttle, or apply backoff on rate limit errors. When the upstream Unleashed API returns an HTTP 429 (Too Many Requests), Truto passes that exact error back to the caller. Truto normalizes the upstream rate limit information into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset).
The caller (your agent framework) is fully responsible for reading the ratelimit-reset header, initiating a backoff, and retrying. This is an architectural advantage: it prevents hidden latency spikes in proxy layers and gives your agent explicit control over execution timing.
sequenceDiagram
participant Agent as AI Agent
participant Truto as Truto Proxy API
participant Unleashed as Unleashed API
Agent->>Truto: Call list_all_unleashed_stock_on_hands
Truto->>Unleashed: GET /StockOnHand
alt Rate Limit Exceeded
Unleashed-->>Truto: HTTP 429 Too Many Requests
Truto-->>Agent: Error 429 + ratelimit-reset header
Note over Agent: Agent parses header,<br>pauses execution
Agent->>Agent: Wait (e.g., 60 seconds)
Agent->>Truto: Retry list_all_unleashed_stock_on_hands
Truto->>Unleashed: GET /StockOnHand
Unleashed-->>Truto: HTTP 200 OK
Truto-->>Agent: JSON Response
else Success
Unleashed-->>Truto: HTTP 200 OK
Truto-->>Agent: JSON Response
endHero Tools for Unleashed AI Agents Integration
Instead of dumping fifty endpoints into the LLM context, restrict the agent to high-leverage operations. Here are the hero tools available for Unleashed via Truto.
List All Unleashed Products
list_all_unleashed_products
Retrieves the core product catalog. The agent uses this to find the unique Guid, default prices, and unit of measure required for building orders or assemblies.
"Fetch the full product catalog and find the Guid and DefaultPurchasePrice for the product code 'COFFEE-BEANS-1KG'."
Get Stock On Hand Across All Warehouses
list_all_unleashed_all_warehouses
Retrieves the stock on hand for a specific product across every warehouse. The agent requires the product_guid to execute this. Crucial for triggering replenishment workflows.
"Check the available quantity for product Guid 'abc-123-def' across all warehouses. Tell me which warehouse holds the most stock."
Create a Purchase Order
create_a_unleashed_purchase_order
Generates a new purchase order for a supplier. The agent must strictly validate that the Currency matches the supplier, calculate the Total, and ensure dates are sent as ISO strings.
"Create a purchase order for supplier 'SUP-05' for 50 units of product 'WIDGET-A' at $10 each. Calculate the subtotal and total accurately. Set the delivery date to next Friday formatted as YYYY-MM-DD."
Create an Assembly
create_a_unleashed_assembly
Triggers a manufacturing run based on a Bill of Materials. The agent supplies AssemblyLines denoting the components consumed to create the finished product.
"Create a new assembly run for product 'PREMIUM-BIKE'. Add assembly lines for 1 frame and 2 wheels. Mark the assembly status as 'Parked'."
List Sales Orders
list_all_unleashed_sales_orders
Fetches outbound sales data. The agent can filter by customer, warehouse, status, or date to determine fulfillment priorities or calculate required stock.
"List all sales orders created in the last 7 days that currently have the status 'Placed'. Summarize the total revenue from these orders."
Create a Supplier Return
create_a_unleashed_supplier_return
Initiates reverse logistics by referencing an existing Purchase Order. The agent must provide the PurchaseOrder data to tie the return to historical costs.
"Create a supplier return for purchase order 'PO-00123' returning 5 damaged units of product 'WIDGET-A'. Provide a reason in the return lines."
For the complete tool inventory and granular JSON schema details, visit the Unleashed integration page.
Workflows in Action
When these tools are chained together via an autonomous loop, the agent transforms from a chatbot into a digital supply chain operator.
Scenario 1: Autonomous Stock Replenishment
Persona: Procurement Manager
"Review our current stock for all products in the 'Electronics' group. If any product has an available quantity below 20, find its default supplier and generate a parked purchase order to bring the stock back up to 100 units."
Execution Steps:
- The agent calls
list_all_unleashed_product_groupsto find the Guid for 'Electronics'. - It calls
list_all_unleashed_productsfiltering by the group Guid. - For each product, it calls
list_all_unleashed_all_warehousesto sum the available stock. - Identifying a shortage, it calls
get_single_unleashed_product_by_idto retrieve the default supplier Guid and cost. - It calls
get_single_unleashed_supplier_by_idto confirm the supplier's currency and tax settings. - Finally, it executes
create_a_unleashed_purchase_order, meticulously calculating the line totals, and returns a confirmation to the user with the new PO number.
Scenario 2: Just-In-Time Assembly Orchestration
Persona: Production Planner
"Look at all Placed sales orders from today containing 'Custom Gift Basket'. Check if we have enough stock. If we don't, create an assembly to build the exact shortfall using the required components."
Execution Steps:
- The agent calls
list_all_unleashed_sales_ordersfiltering for today's date and 'Placed' status. - It parses the
SalesOrderLinesto count the required volume of 'Custom Gift Basket'. - It calls
get_single_unleashed_stock_on_hand_by_idfor the basket product. - Realizing there is a deficit of 15 baskets, the agent calls
get_single_unleashed_bill_of_material_by_idto find the recipe for the basket. - It calculates the required components (e.g., 15 boxes, 45 chocolates) and executes
create_a_unleashed_assemblywith the calculatedAssemblyLines. - It informs the planner that the assembly is parked and ready for completion on the warehouse floor.
Moving Supply Chains to Agentic Operations
Connecting Unleashed to AI agents fundamentally changes how revenue operations and supply chain management function. Instead of humans exporting CSVs to calculate shortfalls, an agent orchestrates the entire workflow in real time.
By leveraging Truto's /tools endpoint, you bypass the friction of normalizing legacy date formats, writing custom OAuth flows, and manually mapping fifty complex ERP schemas. You give your agent clean, standardized Proxy APIs, allowing your engineering team to focus on prompt architecture and framework logic rather than integration maintenance.
FAQ
- How do AI agents handle Unleashed rate limits?
- Truto passes HTTP 429 errors directly to the caller, normalizing the rate limit data into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your agent framework must implement the retry and backoff logic.
- Why does Unleashed reject dates sent by the AI agent?
- Unleashed returns dates in a legacy format like /Date(1234567890)/, but rejects this format on input. Agents must be prompted to send dates in ISO 8601 format (YYYY-MM-DD) when executing write operations.
- Can I use these tools with frameworks other than LangChain?
- Yes. The Truto /tools endpoint returns standard JSON schemas that can be bound to any function-calling LLM framework, including CrewAI, Vercel AI SDK, and LangGraph.
- Does Truto store my Unleashed inventory data?
- No. Truto operates as a pass-through infrastructure layer. Proxy APIs map to Unleashed endpoints and handle authentication and schema normalization on the fly without retaining your payload data.