Seven specialized agents that handle the full product compliance lifecycle. Each maps to a real-world regulatory affairs role, uses scoped MCP tools, and escalates to humans when confidence drops.
Inlet's agent framework provides seven autonomous regulatory affairs (RA) agents that mirror the roles on a real compliance team. Agents run via the Claude API with scoped MCP tool access, enabling them to read and write platform data while respecting permission boundaries.
Agents execute in a defined sequence, with each stage feeding the next.
Each agent only sees the MCP tools relevant to its role -- no over-permissioning.
Escalation triggers pause the pipeline and surface issues for human review.
Agents can invoke other agents when the task crosses role boundaries.
All agent actions are scoped to the requesting company -- no data leakage.
Every action, delegation, and escalation is logged with timestamps and rationale.
POST /api/v1/agents/pipeline/run with a SKU ID and target markets.The default pipeline runs agents in sequence. Market Intelligence and Regulatory Strategist agents run independently or are invoked on-demand by other agents.
Independent / On-demand
Monitors regulatory databases continuously. Can be scheduled on a cron or invoked by the Regulatory Strategist when assessing a new market.
Independent / On-demand
Advises on market entry sequencing and regulatory pathways. Invoked ad-hoc or by the Compliance Analyst when multi-market strategy is needed.
Click any agent to expand its full profile, including allowed MCP tools, pipeline stages, task types, escalation triggers, and delegation targets.
All agent endpoints require a valid API key with the Growth or Enterprise plan. Requests are scoped to your company.
/api/v1/agents/profilesReturns all agent profiles with their capabilities, allowed tools, pipeline stages, and escalation triggers.
curl https://api.inlet.run/api/v1/agents/profiles \
-H "Authorization: Bearer ink_live_your_key_here"/api/v1/agents/pipeline/runRuns the complete autonomous RA pipeline for a SKU across one or more target markets. Returns a run ID you can use to poll for status.
curl -X POST https://api.inlet.run/api/v1/agents/pipeline/run \
-H "Authorization: Bearer ink_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"sku_id": "550e8400-e29b-41d4-a716-446655440000",
"target_markets": ["US", "EU"],
"skip_stages": []
}'{
"run_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "running",
"actions_taken": 0,
"escalations": 0,
"current_agent": "formulation_analyst",
"started_at": "2026-04-13T10:30:00Z"
}/api/v1/agents/runRun a single agent ad-hoc outside the pipeline. Useful for targeted checks, re-running a specific stage, or building custom workflows.
curl -X POST https://api.inlet.run/api/v1/agents/run \
-H "Authorization: Bearer ink_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"agent_role": "compliance_analyst",
"sku_id": "550e8400-e29b-41d4-a716-446655440000",
"instruction": "Check this SKU against EU cosmetics regulation",
"target_markets": ["EU"]
}'/api/v1/agents/pipeline/runs/{run_id}Poll for the status of a pipeline run. Returns the current agent, actions taken, escalations, and completion status.
curl https://api.inlet.run/api/v1/agents/pipeline/runs/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
-H "Authorization: Bearer ink_live_your_key_here"{
"run_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"actions_taken": 12,
"escalations": 0,
"current_agent": null,
"started_at": "2026-04-13T10:30:00Z",
"completed_at": "2026-04-13T10:32:15Z",
"stages_completed": [
"formulation_analyst",
"compliance_analyst",
"label_reviewer",
"submission_coordinator",
"quality_assurance"
],
"results": {
"compliance_status": "compliant",
"markets_checked": ["US", "EU"],
"tasks_created": 3,
"labels_reviewed": 1
}
}runningPipeline is actively executing agentscompletedAll stages finished successfullyawaiting_humanPaused for HITL review (escalation triggered)failedAn unrecoverable error occurredescalatedEscalation sent to team, awaiting resolutionConfigure API access, HITL checkpoints, and custom instructions for agent runs.
agents:run scope. Keys are prefixed with ink_live_.By default, escalation triggers pause the pipeline and notify your team. You can configure which triggers require human review and which should auto-resolve.
{
"hitl_config": {
"pause_on": [
"novel_ingredient",
"regulatory_ambiguity",
"approval_gate"
],
"auto_resolve": [
"confidence_below_threshold"
],
"notify_channels": ["slack", "email"],
"timeout_hours": 48,
"fallback_action": "escalate_to_owner"
}
}Pass custom instructions to any agent to override default behavior. Instructions are appended to the agent's system prompt for that run only.
resp = requests.post(
"https://api.inlet.run/api/v1/agents/run",
headers={"Authorization": "Bearer ink_live_your_key_here"},
json={
"agent_role": "label_reviewer",
"sku_id": "550e8400-...",
"instruction": (
"Focus on EU allergen disclosure requirements. "
"Flag any missing INCI names for fragrance components. "
"Apply strict interpretation of Regulation 1223/2009 Annex III."
),
"target_markets": ["EU"],
},
)Common patterns for embedding agents into your existing workflows.
Use a webhook listener to automatically run the full pipeline whenever a new SKU is created or moves to "active" status.
# When you receive a sku.activated webhook, trigger the pipeline:
curl -X POST https://api.inlet.run/api/v1/agents/pipeline/run \
-H "Authorization: Bearer ink_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"sku_id": "550e8400-e29b-41d4-a716-446655440000",
"target_markets": ["US", "EU"]
}'Run the Market Intelligence agent on a schedule to monitor regulatory changes and generate proactive alerts.
# Using APScheduler or any cron-compatible scheduler
from apscheduler.schedulers.blocking import BlockingScheduler
import requests
API_KEY = "ink_live_your_key_here"
def run_market_intelligence():
requests.post(
"https://api.inlet.run/api/v1/agents/run",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"agent_role": "market_intelligence",
"instruction": "Scan all monitored markets for regulatory changes in the last 24 hours.",
"target_markets": ["US", "EU", "UK", "CA", "MY", "SG"],
},
)
scheduler = BlockingScheduler()
scheduler.add_job(run_market_intelligence, "cron", hour=6, minute=0)
scheduler.start()Use the MCP tool endpoints directly to build your own agent logic. This gives you full control over tool orchestration while leveraging Inlet's compliance data.
import anthropic
import requests
INLET_API = "https://api.inlet.run/api/v1"
API_KEY = "ink_live_your_key_here"
# Fetch available MCP tools
tools_resp = requests.get(
f"{INLET_API}/mcp/tools",
headers={"Authorization": f"Bearer {API_KEY}"},
)
inlet_tools = tools_resp.json()["tools"]
# Use tools with Claude
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
system="You are a regulatory compliance assistant.",
tools=inlet_tools,
messages=[{
"role": "user",
"content": "List all SKUs that are non-compliant in the EU market.",
}],
)
# Execute tool calls via Inlet MCP
for block in response.content:
if block.type == "tool_use":
result = requests.post(
f"{INLET_API}/mcp/execute",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"tool": block.name, "arguments": block.input},
)
print(result.json())Inlet's Slack integration automatically posts agent escalations and pipeline completions to your configured channel. Install via Settings → Integrations → Slack.
Pipeline completed for Hydrating Serum SPF30 across US, EU. 12 actions taken, 0 escalations. Status: compliant.
When an agent encounters a situation outside its confidence bounds, it fires an escalation trigger. The pipeline pauses and your team is notified.
| Trigger | Description | Agents |
|---|---|---|
novel_ingredient | Ingredient not found in master database or has no regulatory data | formulation_analyst |
confidence_below_threshold | Agent confidence score falls below the role-specific threshold | formulation_analystcompliance_analystquality_assurance |
regulatory_ambiguity | Regulation text is ambiguous or multiple interpretations are possible | compliance_analystregulatory_strategistlabel_reviewer |
conflicting_regulations | Two or more regulations contradict each other for the same ingredient or claim | compliance_analystmarket_intelligencequality_assurance |
high_risk_market | Target market has strict or rapidly changing regulatory requirements | regulatory_strategistmarket_intelligence |
approval_gate | Pipeline stage requires explicit human sign-off before proceeding | submission_coordinatorquality_assurance |
customer_request | Customer has specifically requested manual review or custom handling | label_reviewersubmission_coordinator |
When a pipeline enters the awaiting_human state, your team can review the escalation, make a decision, and resume the pipeline.
# Resume a paused pipeline after human review
curl -X POST https://api.inlet.run/api/v1/agents/pipeline/runs/{run_id}/resume \
-H "Authorization: Bearer ink_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"resolution": "approved",
"notes": "Reviewed novel ingredient -- acceptable for EU market per SCCS opinion 2025/03."
}'