Partner Integrations
AVX exposes integration points across six partner domains. In each case the pattern is the same: an agent tool wraps a partner API call and returns a structured result; the supervisor synthesizes the spoken or written response from that result. The tool signature is thin and deterministic — the LLM never constructs API calls directly.
| Domain | Example partner types | Integration pattern |
|---|---|---|
|
Digital commerce |
CRM and e-commerce platforms |
REST webhook from |
|
Payments |
Payment processors, open-banking APIs |
Agent tool for payment initiation; tool validates amount and reference before making the API call; never passes raw card data through the LLM |
|
Document processing |
Repair order and invoice platforms |
Lambda invoked from |
|
Contract management |
Warranty and contract platforms |
Agent tool for warranty and contract lookup; returns coverage summary
that the supervisor narrates; used by |
|
Credit decisioning |
Credit bureaus and scoring platforms |
API call from a finance persona tool; result is a pre-qualification summary, never raw bureau data; gated on explicit customer consent |
|
Subscription management |
Connected-service subscription platforms |
Webhook from |
Implementing a partner tool
The following example shows a payment-initiation tool. The same structure applies to any partner domain — replace the API call and return shape:
# agents/supervisor/tools/payment_initiation.py import logging import httpx from strands import tool from agents.supervisor.session import SessionContext from agents.supervisor.config import Config log = logging.getLogger(__name__) def make_payment_initiation_tool(ctx: SessionContext, config: Config): @tool def payment_initiation( amount_usd: float, description: str, service_request_number: str, ) -> dict: """Initiate a payment for an approved service estimate. Only call this after the customer has explicitly confirmed the amount and given consent. Never call speculatively. """ if amount_usd <= 0: return {"error": "amount_usd must be positive"} # Partner API call — replace with actual endpoint and auth try: resp = httpx.post( config.payment_api_endpoint, json={ "amount": int(amount_usd * 100), # cents "currency": "USD", "description": description, "reference": service_request_number, "tenant_id": ctx.tenant_id, }, headers={"Authorization": f"Bearer {config.payment_api_key}"}, timeout=5.0, ) resp.raise_for_status() data = resp.json() return { "status": "initiated", "payment_id": data.get("id"), "amount_usd": amount_usd, "redirect_url": data.get("redirect_url"), } except httpx.HTTPError as exc: log.warning("payment_initiation failed: %s", exc) return {"error": "Payment initiation failed — please try again"} return payment_initiation
Key constraints that apply to all partner tools:
-
Latency budget: if the partner API may take more than one second, return a pending reference immediately and poll asynchronously. Nova 2 Sonic will go silent on tool calls that exceed the bidi window. See Nova 2 Sonic latency constraint.
-
Never pass raw sensitive data through the LLM: card numbers, SSNs, and credentials are handled exclusively in the tool function, not in the prompt or the model turn.
-
Tenant gating: check
configor the tenant config record before making the API call. Tools in thePERSONA_TOOL_FACTORIESlist are registered for every session of a given persona; a partner integration that is not universally available should guard at call time using the tenant’sfeaturesflags.