Skip to content

Integration Patterns

Overview

Agents are most powerful when integrated with existing systems—databases, APIs, tools, workflows.

Integration patterns determine deployment success.

-

API & Webhook Integration

RESTful Agent Endpoints

from fastapi import FastAPI
from pydantic import BaseModel

class AgentAPI:
 """REST API for agent"""

 def __init__(self):
 self.app = FastAPI()
 self.agent = Agent()

 @self.app.post("/agent/process")
 async def process(request: ProcessRequest):
 """Run agent on input"""

 try:
 # Validate input
 if not self.validate(request):
 return {"error": "Invalid input"}

 # Execute agent
 result = self.agent.execute(request.input)

 # Validate output
 if not self.validate_output(result):
 return {"error": "Invalid output"}

 return {
 'status': 'success',
 'result': result,
 'execution_time': result.latency
 }

 except Exception as e:
 return {
 'status': 'error',
 'error': str(e)
 }

 def validate(self, request):
 """Validate input"""

 # Length check
 if len(request.input) > 10000:
 return False

 # Required fields
 if not request.task_id:
 return False

 return True

-

Database Integration

Reading/Writing Data

class DatabaseAgent:
 """Agent with database access"""

 def __init__(self, db_connection):
 self.db = db_connection

 def query_database(self, query_text):
 """Agent-written SQL queries"""

 # Agent generates SQL
 generated_sql = self.agent.generate_sql(query_text)

 # Validate SQL (safety!)
 if not self.validate_sql(generated_sql):
 return {"error": "Unsafe SQL"}

 # Execute
 try:
 results = self.db.execute(generated_sql)
 return results
 except Exception as e:
 return {"error": str(e)}

 def validate_sql(self, sql):
 """Prevent SQL injection"""

 # Check for dangerous operations
 dangerous = ['DROP', 'DELETE', 'TRUNCATE']

 for word in dangerous:
 if word in sql.upper():
 return False

 # Parse SQL to check structure
 try:
 parse_sql(sql)
 return True
 except:
 return False

-

Workflow Automation Integration

Zapier/Make Integration

class WorkflowAgent:
 """Agent as part of workflow"""

 def handle_webhook(self, webhook_data):
 """Process webhook from automation tool"""

 # Extract data
 trigger = webhook_data['trigger']
 data = webhook_data['data']

 # Process with agent
 result = self.agent.execute(data)

 # Trigger next steps
 if result.success:
 self.trigger_webhook(
 webhook_data['next_step'],
 {
 'input': data,
 'output': result.output
 }
)
 else:
 self.trigger_error_handling(result.error)

-

Slack/Teams Integration

Chat Bot Integration

class ChatBotAgent:
 """Agent in chat application"""

 def handle_slack_message(self, message):
 """Process Slack message"""

 # Parse message
 user_id = message['user']
 text = message['text']
 channel = message['channel']

 # Check permissions
 if not self.user_has_permission(user_id):
 return self.send_message(
 channel,
 "You don't have permission to use this agent"
)

 # Process
 try:
 result = self.agent.execute(text)

 # Send response
 self.send_message(channel, result.output)

 # Log for audit
 self.log_interaction(user_id, text, result.output)

 except Exception as e:
 self.send_message(channel, f"Error: {str(e)}")

Email Integration

Email-Triggered Agent

class EmailAgent:
 """Agent triggered by email"""

 def handle_incoming_email(self, email):
 """Process incoming email"""

 sender = email['from']
 subject = email['subject']
 body = email['body']

 # Check if sender is whitelisted
 if not self.is_whitelisted_sender(sender):
 return self.send_reply(
 sender,
 "Unknown sender"
)

 # Process with agent
 result = self.agent.execute(body)

 # Send reply
 self.send_reply(sender, result.output)

-

3 Warnings

Warning 1: No Rate Limiting

# WRONG
@app.post("/agent")
async def process(request):
 result = agent.execute(request)
 return result

# No rate limiting!
# Attacker hammers endpoint
# System overwhelmed

# RIGHT
@app.post("/agent")
@rate_limit(requests=100, period=3600)
async def process(request):
 result = agent.execute(request)
 return result

# Protected against abuse

Warning 2: No Input Validation

# WRONG
result = agent.execute(request.input)
# No validation!

# User passes dangerous input
# Agent does harmful action

# RIGHT
if not validate_input(request.input):
 return error()

result = agent.execute(request.input)

Warning 3: Leaking Sensitive Data

# WRONG
result = agent.execute(request)
return result # Full output

# Exposes database contents
# Reveals internal structure

# RIGHT
result = agent.execute(request)
sanitized = sanitize_output(result)
return sanitized # Safe output

-

Last Updated: August 9, 2026