Skip to content

Connect Brex to AI Agents: Automate transfers, vendors, and users

Uday Gajavalli Uday Gajavalli 9 min read AI & Agents
TrutoFor teams building AI agents

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

  1. 01Fetch Configured Brex Tools
  2. 02Bind Tools to the Agent Framework
  3. 03Define the System Prompt
  4. 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:

  1. Deterministic validation: Every tool has a strict JSON schema. If the LLM attempts to pass an invalid spend_controls object, the Proxy API rejects it before it hits the Brex API, failing fast.
  2. Stable abstraction: The LLM only sees high-level function names like create_a_brex_transfer or list_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."

  1. The agent calls create_a_brex_user to invite Marcus to the Brex workspace as an employee.
  2. The agent calls create_a_brex_spend_limit to generate a "Software Subscriptions" budget tied to Marcus's profile.
  3. The agent calls create_a_brex_card to 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."

  1. The agent calls list_all_brex_vendors filtering by the company name "Datadog" to retrieve the correct counterparty ID.
  2. The agent validates the payment amount against internal rules.
  3. The agent calls create_a_brex_transfer to push a $1,200 ACH payment to the resolved vendor ID.
  4. The agent calls list_all_brex_expenses to 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.

Two ways to put Brex to work

Truto

For product teams

Give your agent Brex tools

Your customers connect their own Brex accounts. Your product gets one API and MCP tools for Brex, through Truto.

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.
Brex BrexAI agent tools Get a sandbox

More from our Blog