Everything you need to integrate limit.md into your AI agent stack. One endpoint, full control.
Get running in under 5 minutes. Create an account, issue your first agent card, and attach a spending policy.
lim_.Evaluate whether an agent action is permitted under its current policy. Use this before executing any financial action in your agent code.
curl -X POST https://limit.md/api/v1/actions/check \
-H "Authorization: Bearer lim_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agent_abc123",
"action_type": "buy",
"asset": "NVDA",
"amount_usd": 80,
"reason": "Earnings momentum signal"
}'| agent_id | string | Required | Your agent's ID from the dashboard |
| action_type | string | Required | buy, sell, transfer, or any custom string |
| amount_usd | number | Required | USD value of the action |
| asset | string | Optional | Ticker or asset name (e.g. NVDA, BTC) |
| side | string | Optional | buy or sell |
| reason | string | Optional | Agent's reason — stored in audit log |
{
"status": "approved", // approved | blocked | requires_approval | reduced
"decision_id": "dec_xyz789",
"reason": "All policy checks passed",
"requires_human_approval": false,
"allowed_amount_usd": null, // set when status is "reduced"
"policy_checks": [
{ "rule": "max_trade_amount", "result": "pass", "message": "$80 ≤ $100 limit" }
]
}| Status | Meaning | |
|---|---|---|
| approved | — | Action passes all checks. Proceed. |
| blocked | — | Action violates a rule. Do not proceed. |
| requires_approval | — | Above approval threshold. Wait for human review in the dashboard. |
| reduced | — | Amount exceeded per-transaction limit. allowed_amount_usd has the capped value. |
After a requires_approval decision is approved by a human in the Approvals dashboard, call this to record it as executed.
curl -X POST https://limit.md/api/v1/actions/dec_xyz789/execute \
-H "Authorization: Bearer lim_your_api_key"import requests
API_KEY = "lim_your_api_key"
BASE = "https://limit.md"
def check_action(agent_id, action_type, asset, amount_usd, reason=""):
res = requests.post(
f"{BASE}/api/v1/actions/check",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"agent_id": agent_id,
"action_type": action_type,
"asset": asset,
"amount_usd": amount_usd,
"reason": reason,
},
)
return res.json()
result = check_action("agent_abc123", "buy", "NVDA", 80, "Earnings momentum")
if result["status"] == "approved":
# execute trade
pass
elif result["status"] == "requires_approval":
print("Waiting for approval:", result["decision_id"])
else:
print("Blocked:", result["reason"])from langchain.tools import tool
import requests
@tool
def trade_with_policy(asset: str, amount_usd: float, action_type: str = "buy") -> str:
"""Submit a trade action through the limit.md policy engine before executing."""
res = requests.post(
"https://limit.md/api/v1/actions/check",
headers={"Authorization": "Bearer lim_your_api_key"},
json={
"agent_id": "agent_abc123",
"action_type": action_type,
"asset": asset,
"amount_usd": amount_usd,
},
).json()
if res["status"] == "blocked":
return f"Trade blocked: {res['reason']}"
elif res["status"] == "requires_approval":
return f"Queued for approval (id: {res['decision_id']})"
return f"Approved: {action_type} {amount_usd} USD of {asset}"Configure policies in the dashboard under Policies. Each policy is attached to one agent card.
| Rule | Unit | Behaviour |
|---|---|---|
| Per-transaction limit | USD | Single action cannot exceed this value |
| Daily volume cap | USD | Total approved spend per calendar day |
| Requires approval above | USD | Actions above this value queue for human review |
| Max transactions/day | count | Hard cap on daily approved transaction count |
| Plan | Limits | API burst |
|---|---|---|
| Free | 1 card · 500 transactions/mo | — |
| Builder | 10 cards · unlimited | 100 req/min |
| Enterprise | Unlimited cards | Custom |
Questions, bugs, or feedback — email hello@limit.md. Enterprise support includes a dedicated Slack channel.