Install
openclaw skills install sardisPayment OS for AI agents. Create MPC wallets, execute stablecoin payments with automatic policy enforcement, set spending rules in natural language, check balances across chains, and issue virtual cards. Trigger: user asks an agent to pay for something, create a wallet, check a balance, set a spending limit, or issue a virtual card. Do not trigger: general finance questions unrelated to agent payments.
openclaw skills install sardisAI agents can reason, but they cannot be trusted with money. Sardis is how they earn that trust.
Sardis provides complete payment infrastructure for AI agents: non-custodial MPC wallets (Turnkey-backed), natural language spending policies, stablecoin transfers with automatic policy enforcement, virtual card issuance, and full audit trails with on-chain anchoring.
export SARDIS_API_KEY="sk_your_key_here"
export SARDIS_API_URL="https://api.sardis.sh" # optional, defaults to production
Get your API key at https://app.sardis.sh or via the API:
curl -X POST https://api.sardis.sh/api/v2/auth/signup \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "password": "your-password"}'
CRITICAL — ALWAYS ENFORCE:
X-API-Key header for authentication on every requestBase URL: https://api.sardis.sh
All endpoints require the X-API-Key header.
Provision an agent identity with an MPC wallet in one call.
curl -X POST https://api.sardis.sh/api/v2/agents \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"description": "Payment agent for OpenAI billing"
}'
Response:
{
"agent_id": "agt_abc123",
"name": "my-agent",
"wallet_id": "wal_xyz789",
"addresses": {"base": "0x...", "tempo": "0x..."},
"kya_tier": "standard",
"created_at": "2026-03-26T12:00:00Z"
}
Then attach a dedicated wallet if needed:
curl -X POST https://api.sardis.sh/api/v2/agents/agt_abc123/wallet \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"chain": "base", "provider": "turnkey"}'
Unified payment endpoint with automatic policy enforcement, chain routing, and FX.
curl -X POST https://api.sardis.sh/api/v2/pay \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "openai.com",
"amount": "25.00",
"currency": "USDC",
"chain": "base"
}'
Response:
{
"status": "completed",
"tx_hash": "0xabc...def",
"amount": "25.00",
"currency": "USDC",
"chain": "base",
"policy_result": {"allowed": true, "checks_passed": ["daily_limit", "merchant_allowlist"]},
"route": {"chain": "base", "provider": "alchemy", "gas_estimate": "0.0012"}
}
Omit chain to let Sardis auto-route to the cheapest chain:
curl -X POST https://api.sardis.sh/api/v2/pay \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "anthropic.com", "amount": "100.00", "currency": "USDC"}'
Pre-flight check whether a payment would be allowed by current policies.
curl -X POST https://api.sardis.sh/api/v2/policies/check \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agt_abc123",
"amount": "50.00",
"currency": "USDC",
"merchant": "aws.amazon.com"
}'
Response:
{
"allowed": true,
"reason": "All policy checks passed",
"checks_passed": ["daily_limit", "per_tx_limit", "merchant_allowlist"],
"checks_failed": [],
"remaining_daily_limit": "450.00"
}
Define spending rules in plain English. Sardis parses them into enforceable constraints.
curl -X POST https://api.sardis.sh/api/v2/policies/apply \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agt_abc123",
"natural_language": "Max $500 per day. Only allow OpenAI and Anthropic. No transactions over $200."
}'
Response:
{
"policy_id": "pol_def456",
"agent_id": "agt_abc123",
"parsed_rules": [
{"type": "daily_limit", "value": "500.00", "currency": "USD"},
{"type": "merchant_allowlist", "merchants": ["openai.com", "anthropic.com"]},
{"type": "per_transaction_limit", "value": "200.00", "currency": "USD"}
],
"version": 3,
"applied_at": "2026-03-26T12:05:00Z"
}
You can also preview before applying:
curl -X POST https://api.sardis.sh/api/v2/policies/preview \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id": "agt_abc123", "natural_language": "Block all payments over $1000"}'
# Single-chain balance
curl -X GET "https://api.sardis.sh/api/v2/wallets/wal_xyz789/balance?chain=base" \
-H "X-API-Key: $SARDIS_API_KEY"
Response:
{
"wallet_id": "wal_xyz789",
"chain": "base",
"balance": "1250.00",
"currency": "USDC",
"updated_at": "2026-03-26T12:00:00Z"
}
# Multi-chain balances (all chains at once)
curl -X GET "https://api.sardis.sh/api/v2/wallets/wal_xyz789/balances" \
-H "X-API-Key: $SARDIS_API_KEY"
Issue a stablecoin-funded virtual Visa card for real-world purchases.
curl -X POST https://api.sardis.sh/api/v2/cards/virtual/issue \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": "25.00",
"card_type": "single_use"
}'
Response:
{
"card_id": "crd_abc123",
"card_number": "4242424242424242",
"cvv": "123",
"expiry": "12/27",
"amount": "25.00",
"currency": "USD",
"card_type": "single_use",
"status": "active"
}
Transfer stablecoins from a specific wallet (with automatic policy enforcement).
curl -X POST https://api.sardis.sh/api/v2/wallets/wal_xyz789/transfer \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"amount": "50.00",
"token": "USDC",
"chain": "base",
"agent_id": "agt_abc123"
}'
Response:
{
"tx_hash": "0xdef...abc",
"status": "confirmed",
"amount": "50.00",
"token": "USDC",
"chain": "base",
"block_number": 12345678
}
curl -X GET "https://api.sardis.sh/api/v2/transactions/status/0xabc...def" \
-H "X-API-Key: $SARDIS_API_KEY"
curl -X GET "https://api.sardis.sh/api/v2/agents/agt_abc123/spending" \
-H "X-API-Key: $SARDIS_API_KEY"
Spending mandates define scoped, time-limited authority over funds.
curl -X POST https://api.sardis.sh/api/v2/mandates \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"wallet_id": "wal_xyz789",
"agent_id": "agt_abc123",
"max_amount": "1000.00",
"currency": "USDC",
"expires_at": "2026-04-01T00:00:00Z",
"merchant_allowlist": ["openai.com", "anthropic.com"]
}'
# 1. Create agent (auto-provisions wallet)
AGENT=$(curl -s -X POST https://api.sardis.sh/api/v2/agents \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "billing-agent", "description": "Handles API billing"}')
AGENT_ID=$(echo $AGENT | jq -r '.agent_id')
WALLET_ID=$(echo $AGENT | jq -r '.wallet_id')
echo "Agent: $AGENT_ID, Wallet: $WALLET_ID"
# 2. Set spending policy
curl -s -X POST https://api.sardis.sh/api/v2/policies/apply \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"agent_id\": \"$AGENT_ID\", \"natural_language\": \"Max \$100 per transaction, \$500 per day. Only OpenAI and Anthropic.\"}"
# 3. Check balance
curl -s -X GET "https://api.sardis.sh/api/v2/wallets/$WALLET_ID/balances" \
-H "X-API-Key: $SARDIS_API_KEY" | jq '.'
# 4. Dry-run policy check
curl -s -X POST https://api.sardis.sh/api/v2/policies/check \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"agent_id\": \"$AGENT_ID\", \"amount\": \"25.00\", \"currency\": \"USDC\", \"merchant\": \"openai.com\"}"
# 5. Execute payment (policy auto-enforced)
curl -s -X POST https://api.sardis.sh/api/v2/pay \
-H "X-API-Key: $SARDIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "openai.com", "amount": "25.00", "currency": "USDC", "chain": "base"}'
Always check response status codes:
| Code | Meaning |
|---|---|
200 / 201 | Success |
400 | Invalid parameters (check amount, address, token) |
401 | Invalid or missing API key |
403 | Policy violation — payment blocked by spending rules |
404 | Wallet, agent, or transaction not found |
429 | Rate limit exceeded |
500 | Internal error — contact support@sardis.sh |
Example error (policy violation):
{
"error": {
"code": "POLICY_VIOLATION",
"message": "Daily spending limit of $500 exceeded. Current: $475, Requested: $50",
"details": {
"limit": "500.00",
"current": "475.00",
"requested": "50.00"
}
}
}
| Chain | Tokens |
|---|---|
| Base | USDC, EURC |
| Ethereum | USDC, USDT, PYUSD, EURC |
| Arbitrum | USDC, USDT |
| Optimism | USDC, USDT |
| Polygon | USDC, USDT, EURC |
| Tempo | pathUSD |
sardis-balance — Read-only balance checking and analyticssardis-policy — Natural language spending policy managementsardis-cards — Virtual card issuance and managementsardis-guardrails — Circuit breaker and kill switch controlssardis-identity — Agent identity with TAP verificationsardis-escrow — Smart contract escrow for agent-to-agent paymentssardis-tempo-pay — MPP-native payments on Tempo mainnet