Connect Brex to AI Agents: Automate transfers, vendors, and users
Give your AI agent Brex tools.
Connect Brex to AI Agents safely using Truto's /tools endpoint. This guide covers how to bind Brex tools to frameworks like LangChain, handle API quirks, and execute multi-step financial workflows.
In this guide
- 01Fetch Configured Brex Tools
- 02Bind Tools to the Agent Framework
- 03Define the System Prompt
- 04Execute the Agent Loop and Handle 429s
The guide
Learn how to connect Brex to AI agents using Truto. Programmatically fetch Brex API tools to build autonomous workflows for transfers, vendors, and corporate cards.
You want to connect Brex to an AI agent so your system can autonomously issue corporate cards, reconcile expenses, provision users, and route ACH transfers based on real-time financial context. Here is exactly how to do it using Truto's /tools endpoint and SDK, bypassing the need to hand-roll custom financial integrations that break on edge cases.
Giving a Large Language Model (LLM) read and write access to your corporate spend management platform is a high-stakes engineering challenge. If your team uses ChatGPT, check out our guide on connecting Brex to ChatGPT, or if you are building on Anthropic's models, read our guide on connecting Brex to Claude. For developers building custom autonomous workflows, you need a programmatic way to fetch stable tools, enforce schema validation, and bind them to your agent framework.
This guide breaks down exactly how to fetch AI-ready tools for Brex, bind them natively to an LLM using frameworks like LangChain, LangGraph, CrewAI, or the Vercel AI SDK, and safely execute complex financial operations. For a deeper dive into the architectural design behind this integration approach, refer to our research on architecting AI agents and the SaaS integration bottleneck.
The Engineering Reality of the Brex API
Giving an AI agent access to external APIs sounds straightforward in a prototype. You write a Node.js function that makes a fetch request and wrap it in an @tool decorator. In production against complex financial infrastructure like Brex, this naive approach collapses.
The Brex API introduces specific integration challenges that break standard REST assumptions. If you hardcode raw HTTP calls into your agent's context, you will spend your sprints writing defensive integration wrappers instead of improving your model's reasoning capabilities.
The Idempotency Trap for Money Movement
Standard AI agents often retry tool calls if a network connection drops or if they receive an unexpected timeout. In a CRM, retrying a GET request is harmless. In Brex, retrying a POST to /v1/transfers without managing idempotency keys will result in double-funding a vendor.
The Brex API enforces strict rules around money movement. Incoming and outgoing transfers (ACH, wires, cheques) require explicit Idempotency-Key headers to ensure operations are safely retriable. Exposing the raw Brex API to an LLM forces the model to invent and manage these keys. If the model hallucinates a new UUID on a retry, Brex will execute the transfer a second time.
Nested Relational Dependencies
Brex does not rely on flat data structures. Creating a functional corporate card requires satisfying a web of relational dependencies. You cannot simply instruct Brex to "create a card with a $500 limit."
Instead, the API requires a nested structure. Cards are bound to limit_type rules, and only cards with a limit type of CARD can carry a spend_controls object. If the LLM requests a physical card, it must also provide a rigidly validated mailing_address (where the first two lines must be under 60 characters, and the user cannot exceed 10 active physical cards). Exposing this raw validation logic to the LLM drastically increases the hallucination attack surface.
Financial Lookback Windows and Pagination
When an AI agent needs to reconcile settled transactions using list_all_brex_card_primaries, the data is highly time-sensitive. Regular users only see their own PURCHASE, REFUND, and CHARGEBACK transactions. Furthermore, due to the nature of credit card processing, settled transactions often experience delayed postings.
An AI agent querying this raw endpoint must know to implement a lookback window (typically 1+ days) to catch delayed postings, while simultaneously navigating cursor-based pagination with a strict maximum of 100 records per page. An LLM cannot reliably manage cursor state across a multi-turn conversation without dropping data.
Why a Unified Tool Layer Matters for Financial Agents
A unified tool layer collapses these Brex-specific constraints behind a stable schema. Instead of dealing with the raw /v1/transfers endpoint, your agent interacts with a standardized Proxy API layer. Truto handles the pagination, authentication, and parameter processing.
Every integration on Truto is represented as a comprehensive JSON object mapping the underlying API. Truto groups endpoints into Resources with defined Methods (List, Get, Create, Update, Delete, and custom operations). By calling Truto's /integrated-account/<id>/tools endpoint, you instantly pull a formatted schema of these Proxy APIs into your agent framework.
This provides immediate architectural wins:
- Deterministic validation: Every tool has a strict JSON schema. If the LLM attempts to pass an invalid
spend_controlsobject, the Proxy API rejects it before it hits the Brex API, failing fast. - Stable abstraction: The LLM only sees high-level function names like
create_a_brex_transferorlist_all_brex_users, shielding it from raw HTTP headers and edge-case pagination logic.
6 Hero Tools for Brex Automation
To build highly capable financial agents, you need to expose the right operations. Here are six high-leverage Brex tools available via Truto, how they work, and the exact prompts that trigger them.
1. List and Filter Brex Users
Tool name: list_all_brex_users
Before taking any financial action on behalf of an employee, the agent must resolve their identity. This tool lists Brex users and supports filtering by status, email, name, department, and location. It returns granular metadata including manager IDs, cost center IDs, and legal entity assignments.
"Find the active Brex user profile for sarah.connor@example.com and check who her assigned manager is."
2. Create a Brex Vendor
Tool name: create_a_brex_vendor
Accounts Payable (AP) automation requires maintaining a clean vendor database. This tool provisions a new vendor in Brex, returning the vendor ID, company name, contact information, and linked payment accounts.
"We just signed a new contract with Acme Corp. Create them as a new vendor in Brex and attach their billing email address, billing@acmecorp.com."
3. Execute Brex Transfers
Tool name: create_a_brex_transfer
This is the core money movement operation. It creates a new Brex transfer (supporting ACH, domestic wire, cheque, and international wire rails). It requires a counterparty, amount, description, external memo, and originating account.
Usage note: Truto validates the payload structure, but your framework must ensure business-logic approval before execution.
"Initiate an ACH transfer of $4,500 to the vendor ID we just created for Acme Corp to cover Invoice #9932. Use the description 'Q3 Software Licensing'."
4. Create and Provision Brex Cards
Tool name: create_a_brex_card
Agents can autonomously provision virtual or physical cards for employees. This tool requires the owner ID, card name, card type, and limit type. If the limit type is set to CARD, it enforces the inclusion of a spend_controls object to restrict usage.
"Issue a new virtual Brex card for David in Marketing. Name the card 'Q4 Digital Ad Spend' and set the spend limit type to CARD with a strict $10,000 control."
5. Enforce Spend Limits
Tool name: create_a_brex_spend_limit
Instead of tying limits to individual cards, mature organizations use Spend Limits. This tool creates a broader budget constraint, requiring parameters like recurrence types, expense visibility, limit increase settings, and policy IDs. It returns the current period balance.
"Create a new recurring monthly Spend Limit called 'Engineering Cloud Infrastructure' set to $50,000, and assign it to the core engineering expense policy."
6. Audit Expense Records
Tool name: list_all_brex_expenses
For reconciliation and anomaly detection, the agent needs to read expense data. This tool lists expenses filterable by user, expense type, status, budget, and date ranges. It returns deep context including merchant data, locations, and payment status.
"Pull the last 30 days of expenses assigned to the 'Engineering Cloud Infrastructure' spend limit and flag any transactions from unauthorized merchants."
For a complete list of all available Brex endpoints—including accounting integrations, receipt matching, and webhook management—visit the Brex integration page.
Workflows in Action
Connecting these tools transforms a reactive LLM into an autonomous financial operations system. Here are two concrete workflows illustrating how an agent chains these operations together.
Workflow 1: Autonomous Employee Provisioning
IT and HR administrators spend hours provisioning access when a new employee joins. By connecting Brex to an AI agent, you can orchestrate financial onboarding completely via natural language.
"Onboard our new senior engineer, Marcus. Add him to Brex, set up his software subscription spend limit, and issue him a virtual card for immediate use."
- The agent calls
create_a_brex_userto invite Marcus to the Brex workspace as an employee. - The agent calls
create_a_brex_spend_limitto generate a "Software Subscriptions" budget tied to Marcus's profile. - The agent calls
create_a_brex_cardto provision a virtual card, linking it to the newly created spend limit.
The user receives a confirmation that Marcus is fully provisioned, saving the admin from navigating three separate Brex UI screens.
flowchart TD
A["User Request:<br>Onboard Marcus"] --> B["Agent determines<br>required actions"]
B --> C["Call: create_a_brex_user"]
C --> D{"Success?"}
D -- Yes --> E["Call: create_a_brex_spend_limit"]
E --> F["Call: create_a_brex_card"]
F --> G["Agent returns<br>success confirmation"]
D -- No --> H["Agent reports<br>creation failure"]Workflow 2: AP Invoice Resolution
FinOps teams frequently context-switch between vendor emails, ERPs, and Brex to pay invoices. An agent can automate this reconciliation and payment flow.
"I just received a $1,200 invoice from Datadog for August. Please verify their vendor record and initiate the ACH payment."
- The agent calls
list_all_brex_vendorsfiltering by the company name "Datadog" to retrieve the correct counterparty ID. - The agent validates the payment amount against internal rules.
- The agent calls
create_a_brex_transferto push a $1,200 ACH payment to the resolved vendor ID. - The agent calls
list_all_brex_expensesto verify the transfer registered correctly against the ledger.
The FinOps manager gets an immediate confirmation that the invoice is paid and logged, completely eliminating manual data entry.
Building Multi-Step Workflows
To execute these multi-step sequences safely, your application must fetch the tool schemas from Truto and bind them to your LLM. Because Truto's /tools endpoint serves standard JSON Schema, this pattern is completely framework-agnostic.
Here is how to implement this using TypeScript and LangChain (via the @trutohq/truto-langchainjs-toolset), incorporating robust error handling.
Handling API Rate Limits
CRITICAL FACTUAL NOTE ON RATE LIMITS: When working with enterprise APIs, rate limits are inevitable. Truto does not retry, throttle, or apply backoff on rate limit errors.
If the upstream Brex API returns an HTTP 429 (Too Many Requests), Truto passes that exact error down to your application. Truto normalizes the upstream rate limit data into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). Your agent framework or execution loop is strictly responsible for inspecting these headers and applying exponential backoff.
Example: Agent Execution Loop
import { ChatOpenAI } from "@langchain/openai";
import { AgentExecutor, createToolCallingAgent } from "langchain/agents";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { TrutoToolManager } from "@trutohq/truto-langchainjs-toolset";
async function runBrexAgent(prompt: string, tenantId: string) {
// 1. Initialize the LLM
const llm = new ChatOpenAI({
modelName: "gpt-4o",
temperature: 0
});
// 2. Fetch all configured Brex tools for this specific tenant
const toolManager = new TrutoToolManager({
trutoApiKey: process.env.TRUTO_API_KEY,
});
const tools = await toolManager.getTools(tenantId);
// 3. Define the agent instructions
const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "You are a financial operations agent managing Brex. You can create users, issue cards, and initiate transfers. Always verify vendor details before initiating transfers."],
["human", "{input}"],
["placeholder", "{agent_scratchpad}"],
]);
// 4. Bind the Brex tools to the agent
const agent = createToolCallingAgent({
llm,
tools,
prompt: promptTemplate,
});
const agentExecutor = new AgentExecutor({
agent,
tools,
maxIterations: 5,
});
// 5. Execute the workflow with rate limit awareness
try {
const result = await agentExecutor.invoke({
input: prompt,
});
console.log("Agent Action Complete:", result.output);
} catch (error: any) {
// Inspect Truto's normalized rate limit headers if a 429 occurs
if (error.status === 429) {
const resetTime = error.headers?.['ratelimit-reset'];
console.warn(`Brex API rate limit hit. Agent must wait until: ${resetTime} before retrying.`);
// Implement your application-level retry/backoff queue here
} else {
console.error("Workflow failed:", error.message);
}
}
}
// Example execution
runBrexAgent("Find the vendor profile for DataDog and initiate a $1,200 ACH transfer for Invoice 9932.", "integrated_account_123");In this architecture, your LLM is safely constrained. It cannot hallucinate random HTTP methods or guess API endpoints. It is forced to conform to the parameters defined by Truto's Proxy API schema, and your application retains full control over the execution state and network retries.
Wrapping Up
Giving AI agents direct access to financial infrastructure requires an uncompromised approach to API stability, schema validation, and error handling. By routing your agent's intentions through Truto's unified tool layer, you eliminate the risk of the model hallucinating complex Brex dependencies or bypassing mandatory validation rules.
Whether you are building autonomous AP reconciliation, automated employee provisioning, or intelligent spend auditing, a robust tool abstraction is what separates a brittle AI demo from a production-ready financial workflow.
FAQ
- Can AI agents execute wire transfers via the Brex API?
- Yes. Using the create_a_brex_transfer tool, agents can initiate ACH and wire transfers, provided your framework handles idempotency and the Brex account has sufficient funds.
- Does Truto automatically handle Brex rate limits?
- No. Truto passes HTTP 429 errors directly to your application and normalizes the headers (e.g., ratelimit-reset). Your agent application must implement its own retry and backoff logic.
- Can I use these Brex tools with Vercel AI SDK or CrewAI?
- Yes. Truto's tools are framework-agnostic. They export standard JSON Schemas that can be consumed by .bindTools() in any modern AI agent framework.