CreditClaw — Shopping for AI Agents
name: creditclaw-creditcard
by codejika · published 2026-03-22
$ claw add gh:codejika/codejika-insure---
name: creditclaw-creditcard
version: 2.3.1
updated: 2026-02-23T00:00:00Z
description: Let your agent shop online with guardrailed wallets, multiple payment methods, and owner approval.
homepage: https://creditclaw.com
api_base: https://creditclaw.com/api/v1
credentials: [CREDITCLAW_API_KEY]
metadata: {"openclaw":{"requires":{"env":["CREDITCLAW_API_KEY"]},"primaryEnv":"CREDITCLAW_API_KEY"}}
---
# CreditClaw — Shopping for AI Agents
CreditClaw.com is a financial enablement platform for Bots, Agents, and OpenClaw.
Securely manage agentic spending.
1. Encrypted cards — owner's real-world card is encrypted and the bot uses it within strict guardrails after owner approval.
2. A stablecoin wallet to seamlessly enable x402 payments with a simple "Fund with Stripe" option.
3. Easy-to-use "Storefronts" and product management for bots to sell both digital and physical products.
Skill Files
| File | URL | Purpose |
|------|-----|---------|
| **SKILL.md** (this file) | `https://creditclaw.com/creditcard/skill.md` | Registration, setup, webhooks, status, spending permissions, API reference |
| **CHECKOUT.md** | `https://creditclaw.com/creditcard/checkout.md` | Sell to anyone — checkout pages, payment links, invoices, shops |
| **CROSSMINT-WALLET.md** | `https://creditclaw.com/creditcard/crossmint-wallet.md` | Crossmint-managed purchases for supported merchants |
| **ENCRYPTED-CARD.md** | `https://creditclaw.com/creditcard/encrypted-card.md` | Encrypted card checkout — sub-agent flow, card delivery, decryption, confirmation |
| **HEARTBEAT.md** | `https://creditclaw.com/creditcard/heartbeat.md` | Lightweight polling routine for balance and spending checks |
| **MANAGEMENT.md** | `https://creditclaw.com/creditcard/management.md` | Cross-rail operations — top-ups, transaction history, approvals |
| **SPENDING.md** | `https://creditclaw.com/creditcard/spending.md` | Spending permissions, guardrails, and approval modes |
| **STRIPE-X402-WALLET.md** | `https://creditclaw.com/creditcard/stripe-x402-wallet.md` | x402 payment signing, USDC balance, Stripe Wallet transactions |
| **package.json** (metadata) | `https://creditclaw.com/creditcard/skill.json` | Machine-readable skill metadata |
Follow your human's instructions on how to manage and save skill files. If unsure, you can install locally:
mkdir -p ~/.creditclaw/skills/creditcard
curl -s https://creditclaw.com/creditcard/skill.md > ~/.creditclaw/skills/creditcard/SKILL.md
curl -s https://creditclaw.com/creditcard/checkout.md > ~/.creditclaw/skills/creditcard/CHECKOUT.md
curl -s https://creditclaw.com/creditcard/crossmint-wallet.md > ~/.creditclaw/skills/creditcard/CROSSMINT-WALLET.md
curl -s https://creditclaw.com/creditcard/encrypted-card.md > ~/.creditclaw/skills/creditcard/ENCRYPTED-CARD.md
curl -s https://creditclaw.com/creditcard/heartbeat.md > ~/.creditclaw/skills/creditcard/HEARTBEAT.md
curl -s https://creditclaw.com/creditcard/management.md > ~/.creditclaw/skills/creditcard/MANAGEMENT.md
curl -s https://creditclaw.com/creditcard/spending.md > ~/.creditclaw/skills/creditcard/SPENDING.md
curl -s https://creditclaw.com/creditcard/stripe-x402-wallet.md > ~/.creditclaw/skills/creditcard/STRIPE-X402-WALLET.md
curl -s https://creditclaw.com/creditcard/skill.json > ~/.creditclaw/skills/creditcard/package.jsonOr just read them directly from the URLs above.
**Base URL:** `https://creditclaw.com/api/v1`
---
Payment Rails
CreditClaw supports multiple independent payment rails. Each rail has its own funding
method and spending mechanism. You may have access to one or more rails depending
on what your owner has configured.
| Rail | Method | Status | Guide |
|------|--------|--------|-------|
| **Encrypted Card** | Owner's card, encrypted file + sub-agent checkout | Live | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
| **Stripe Wallet (x402)** | USDC on Base chain, x402 payment protocol | Private Beta | [stripe-x402-wallet.md](https://creditclaw.com/creditcard/stripe-x402-wallet.md) |
| **Crossmint Wallet** | Crossmint-managed purchases for supported merchants | Coming Soon | [crossmint-wallet.md](https://creditclaw.com/creditcard/crossmint-wallet.md) |
The default payment rail is "Encrypted Card". Your owner chooses which rails to enable for you. Check `GET /bot/status` to see
your full status across all connected rails.
**Default safety:** New accounts require human approval for every purchase (`approval_mode: ask_for_everything`). Your owner can adjust this from their dashboard once they're comfortable with your spending patterns.
---
Security
**All requests require:** `Authorization: Bearer <your-api-key>` (except registration).
🔒 **CRITICAL SECURITY WARNING:**
CreditClaw is designed with defense-in-depth to protect your owner's funds:
---
End-to-End Flow
1. You fetch this skill file from creditclaw.com/creditcard/skill.md
2. You call POST /bots/register → get apiKey + claimToken (include your callback_url for webhooks)
3. You tell your human the claimToken and verification link
4. Human visits creditclaw.com/claim, enters claimToken, adds payment method
5. Your wallet activates — you receive a webhook notification (or poll GET /bot/status)
6. You poll GET /bot/status periodically to monitor balance across all rails
7. You check GET /bot/wallet/spending for your owner's permission rules
8. When you need to make a purchase, follow encrypted-card.md or stripe-x402-wallet.md
9. When balance is low, request a top-up (see management.md)
10. Human monitors activity from creditclaw.com/overview---
Quick Start
1. Register
You can register before your human does. You'll get an API key immediately.
curl -X POST https://creditclaw.com/api/v1/bots/register \
-H "Content-Type: application/json" \
-d '{
"bot_name": "my-research-bot",
"owner_email": "jonathan@example.com",
"description": "Performs web research tasks for hire",
"callback_url": "https://my-bot.example.com/webhook"
}'**Request fields:**
| Field | Required | Description |
|-------|----------|-------------|
| `bot_name` | Yes | Your bot's name (1-100 chars) |
| `owner_email` | Yes | Your owner's email address |
| `description` | No | What you do (max 500 chars) |
| `callback_url` | Yes | URL to receive webhook events (HTTPS). Enables real-time card deliveries, approval notifications, and spending alerts. |
Response:
{
"bot_id": "bot_a1b2c3d4",
"api_key": "cck_live_7f3e...",
"claim_token": "coral-X9K2",
"status": "pending_owner_verification",
"owner_verification_url": "https://creditclaw.com/claim?token=coral-X9K2",
"webhook_secret": "whsec_abc123...",
"important": "Save your api_key now — it cannot be retrieved later. Give the claim_token to your human so they can activate your wallet."
}The response includes a `webhook_secret` for verifying webhook signatures (HMAC-SHA256
via the `X-CreditClaw-Signature` header). **Save this secret alongside your API key** — you'll
need it to verify incoming webhooks.
**Save your `api_key` immediately.** It cannot be retrieved again.
**Store your API key securely.** Preferably using your platform's **secure secrets manager** under the name `CREDITCLAW_API_KEY`.
If a secrets manager is unavailable, use an environment variable:
export CREDITCLAW_API_KEY="cck_live_7f3e..."Load your API key from the above on future sessions — do not re-register.
**What to tell your human:**
Ask your human if they'd like you to share the claim details. Here's a template:
> "I've registered for a CreditClaw wallet. To activate it and fund my account,
> visit https://creditclaw.com/claim?token=coral-X9K2 — you'll need to add
> a payment method. After that I can spend on your behalf within the limits you set."
> **Can't expose a public HTTPS endpoint?** CreditClaw still works without a webhook. Your
> owner will send card files and instructions manually, and you'll poll for updates instead
> of receiving them in real time. See [Bot Messages](#bot-messages-for-bots-without-webhooks)
> for the polling fallback.
2. Human Claims the Bot
Your human visits the claim URL. On the backend:
After claiming, the human can see your balance, transactions, and spending
limits at `https://creditclaw.com/overview`.
What Your Human Gets After Claiming
Once your human claims you with the token, they unlock:
Your human can log in anytime to monitor your spending, adjust limits, or fund your wallet.
3. Check Full Status
Use this endpoint to see your complete status across all payment rails.
Recommended interval: every 30 minutes, or before any purchase.
curl https://creditclaw.com/api/v1/bot/status \
-H "Authorization: Bearer $CREDITCLAW_API_KEY"Response (active bot with Encrypted Card and Stripe Wallet):
{
"bot_id": "bot_abc123",
"bot_name": "ShopperBot",
"status": "active",
"default_rail": "sub_agent_cards",
"active_rails": ["stripe_wallet", "sub_agent_cards"],
"rails": {
"stripe_wallet": {
"status": "active",
"balance_usd": 100.00,
"address": "0x..."
},
"sub_agent_cards": {
"status": "active",
"card_id": "r5_abc123",
"card_name": "Shopping Card",
"card_brand": "visa",
"last4": "4532",
"limits": {
"per_transaction_usd": 50.00,
"daily_usd": 100.00,
"monthly_usd": 500.00,
"human_approval_above_usd": 25.00
}
}
},
"master_guardrails": {
"per_transaction_usd": 500,
"daily_budget_usd": 2000,
"monthly_budget_usd": 10000
},
"webhook_status": "active",
"pending_messages": 0
}Response (before claiming):
{
"bot_id": "bot_abc123",
"bot_name": "ShopperBot",
"status": "pending",
"default_rail": null,
"message": "Owner has not claimed this bot yet. Share your claim token with your human.",
"rails": {},
"master_guardrails": null
}**Status values:**
| Status | Meaning |
|--------|---------|
| `pending` | Registered but owner hasn't claimed yet |
| `active` | At least one rail is connected |
| `frozen` | Owner has frozen this bot — no transactions allowed |
| `inactive` | Claimed but no rails connected yet |
If `default_rail` is set, prefer that rail for purchases when multiple are available.
If `status` is `pending`, remind your human about the claim link.
**Rate limit:** 6 requests per hour.
4. Check Spending Permissions (Before Every Purchase)
Before any purchase, fetch your spending rules. Your owner controls these
and can update them anytime from their dashboard.
curl https://creditclaw.com/api/v1/bot/wallet/spending \
-H "Authorization: Bearer $CREDITCLAW_API_KEY"Response:
{
"approval_mode": "ask_for_everything",
"limits": {
"per_transaction_usd": 25.00,
"daily_usd": 50.00,
"monthly_usd": 500.00,
"ask_approval_above_usd": 10.00
},
"approved_categories": [
"api_services",
"cloud_compute",
"research_data"
],
"blocked_categories": [
"gambling",
"adult_content",
"cryptocurrency",
"cash_advances"
],
"recurring_allowed": false,
"notes": "Prefer free tiers before paying. Always check for discount codes. No annual plans without asking me first.",
"updated_at": "2026-02-06T18:00:00Z"
}**You must follow these rules:**
Your owner can update these permissions anytime from `https://creditclaw.com/overview`.
**Rate limit:** 6 requests per hour.
---
Next Steps: Making Purchases
Once your wallet is active and you know your spending permissions, read the guide for your payment rail:
For managing your balance, requesting top-ups, and viewing transaction history, see [management.md](https://creditclaw.com/creditcard/management.md).
To earn money by selling products or services, see [checkout.md](https://creditclaw.com/creditcard/checkout.md).
---
API Reference
All endpoints require `Authorization: Bearer <api_key>` header (except register).
Base URL: `https://creditclaw.com/api/v1`
Core Endpoints
| Method | Endpoint | Description | Rate Limit | File |
|--------|----------|-------------|------------|------|
| POST | `/bots/register` | Register a new bot. Returns API key + claim token. | 3/hr per IP | this file |
| GET | `/bot/status` | Full cross-rail status: balances, limits, master guardrails. | 6/hr | this file |
| GET | `/bot/wallet/spending` | Get spending permissions and rules set by owner. | 6/hr | this file |
| GET | `/bot/messages` | Fetch pending messages (for bots without webhooks). | 12/hr | this file |
| POST | `/bot/messages/ack` | Acknowledge (delete) processed messages. | 30/hr | this file |
Encrypted Card Endpoints
| Method | Endpoint | Description | Rate Limit | File |
|--------|----------|-------------|------------|------|
| POST | `/bot/rail5/checkout` | Request checkout approval. Returns checkout_steps and spawn_payload. | 30/hr | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
| GET | `/bot/rail5/checkout/status` | Poll for checkout approval result. `?checkout_id=` required. | 60/hr | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
| POST | `/bot/rail5/key` | Get one-time decryption key for an approved checkout. | 30/hr | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
| POST | `/bot/rail5/confirm` | Confirm checkout success or failure. | 30/hr | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
| POST | `/bot/rail5/confirm-delivery` | Confirm card file saved. Advances status to `confirmed`. | — | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
| GET | `/bot/check/rail5` | Encrypted Card detail: limits, approval threshold. | 6/hr | [encrypted-card.md](https://creditclaw.com/creditcard/encrypted-card.md) |
Stripe Wallet Endpoints (Private Beta)
| Method | Endpoint | Description | Rate Limit | File |
|--------|----------|-------------|------------|------|
| POST | `/stripe-wallet/bot/sign` | Request x402 payment signature. Enforces guardrails. | 30/hr | [stripe-x402-wallet.md](https://creditclaw.com/creditcard/stripe-x402-wallet.md) |
| GET | `/stripe-wallet/balance` | Get USDC balance for a wallet. | 12/hr | [stripe-x402-wallet.md](https://creditclaw.com/creditcard/stripe-x402-wallet.md) |
| GET | `/stripe-wallet/transactions` | List x402 transactions for a wallet. | 12/hr | [stripe-x402-wallet.md](https://creditclaw.com/creditcard/stripe-x402-wallet.md) |
| GET | `/bot/check/rail1` | Stripe Wallet detail: balance, guardrails, domain rules. | 6/hr | [stripe-x402-wallet.md](https://creditclaw.com/creditcard/stripe-x402-wallet.md) |
Management Endpoints
| Method | Endpoint | Description | Rate Limit | File |
|--------|----------|-------------|------------|------|
| POST | `/bot/wallet/topup-request` | Ask owner to add funds. Sends email notification. | 3/hr | [management.md](https://creditclaw.com/creditcard/management.md) |
| GET | `/bot/wallet/transactions` | List transaction history. Supports `?limit=N` (default 50, max 100). | 12/hr | [management.md](https://creditclaw.com/creditcard/management.md) |
Checkout & Selling Endpoints
| Method | Endpoint | Description | Rate Limit | File |
|--------|----------|-------------|------------|------|
| POST | `/bot/payments/create-link` | Generate a Stripe payment link to charge anyone. | 10/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| GET | `/bot/payments/links` | List your payment links. Supports `?status=` and `?limit=N`. | 12/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| POST | `/bot/checkout-pages/create` | Create a checkout page for selling. | — | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| GET | `/bot/checkout-pages` | List your checkout pages. | 12/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| PATCH | `/bot/checkout-pages/:id` | Update a checkout page. | — | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| GET | `/bot/sales` | List your completed sales. | 12/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| POST | `/bot/invoices/create` | Create an invoice. | 10/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| GET | `/bot/invoices` | List your invoices. | 12/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| POST | `/bot/invoices/:id/send` | Send an invoice via email. | 5/hr | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| PATCH | `/bot/seller-profile` | Set up or update your seller profile. | — | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| GET | `/bot/seller-profile` | View your seller profile. | — | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
| GET | `/bot/shop` | View your public shop. | — | [checkout.md](https://creditclaw.com/creditcard/checkout.md) |
Webhook Events
CreditClaw sends real-time POST events to your `callback_url`. Each webhook includes an
HMAC-SHA256 signature in the `X-CreditClaw-Signature` header that you can verify using the
`webhook_secret` returned at registration.
| Event | When |
|-------|------|
| `wallet.activated` | Owner claimed bot and wallet is live |
| `wallet.topup.completed` | Funds added to your wallet |
| `wallet.payment.received` | Someone paid your payment link |
| `wallet.spend.authorized` | A purchase was approved |
| `wallet.spend.declined` | A purchase was declined (includes reason) |
| `wallet.balance.low` | Balance dropped below $5.00 |
| `wallet.sale.completed` | A sale completed through your checkout page |
| `rails.updated` | Payment methods or spending config changed — call `GET /bot/status` to refresh |
| `rail5.card.delivered` | Owner set up an encrypted card — file delivered for you to save |
| `rail5.checkout.completed` | Checkout confirmed successful |
| `rail5.checkout.failed` | Checkout reported failure |
Failed webhook deliveries are retried with exponential backoff (1m, 5m, 15m, 1h, 6h)
up to 5 attempts.
If webhook delivery fails repeatedly, events are staged as bot messages automatically.
See [Bot Messages](#bot-messages-for-bots-without-webhooks) for the polling fallback.
---
Error Responses
| Status Code | Meaning | Example |
|-------------|---------|---------|
| `400` | Invalid request body or parameters | `{"error": "validation_error", "message": "Invalid request body"}` |
| `401` | Invalid or missing API key | `{"error": "unauthorized", "message": "Invalid API key"}` |
| `402` | Insufficient funds for purchase | `{"error": "insufficient_funds", "balance_usd": 2.50, "required_usd": 10.00}` |
| `403` | Wallet not active, frozen, or spending rule violation | `{"error": "wallet_frozen", "message": "This wallet is frozen by the owner."}` |
| `404` | Endpoint not found or rail not enabled | `{"error": "not_found", "message": "This rail is not enabled for your account."}` |
| `409` | Duplicate registration or race condition | `{"error": "duplicate_registration", "message": "A bot with this name already exists."}` |
| `429` | Rate limit exceeded | `{"error": "rate_limited", "retry_after_seconds": 3600}` |
---
Bot Messages (For Bots Without Webhooks)
If your bot doesn't have a `callback_url` configured (or webhook delivery fails), CreditClaw
stages messages for you to poll. This is the fallback delivery mechanism — webhooks are
preferred when available, but bot messages ensure you never miss an event.
Check for Pending Messages
Your `GET /bot/status` response includes a `pending_messages` count and `webhook_status`.
If `pending_messages` is greater than zero, you have messages waiting:
{
"bot_id": "bot_abc123",
"status": "active",
"webhook_status": "unreachable",
"pending_messages": 2,
...
}Fetch Pending Messages
curl https://creditclaw.com/api/v1/bot/messages \
-H "Authorization: Bearer $CREDITCLAW_API_KEY"Response:
{
"bot_id": "bot_abc123",
"messages": [
{
"id": 1,
"event_type": "rail5.card.delivered",
"payload": {
"card_id": "r5card_...",
"card_name": "ChaseD",
"card_last4": "9547",
"file_content": "<self-contained markdown file>",
"suggested_path": ".creditclaw/cards/Card-ChaseD-9547.md",
"instructions": "Save this file to .creditclaw/cards/ ..."
},
"staged_at": "2026-03-06T12:00:00.000Z",
"expires_at": "2026-03-07T12:00:00.000Z"
}
],
"count": 1,
"instructions": "Process each message based on its event_type. After processing, acknowledge messages via POST /api/v1/bot/messages/ack with { message_ids: [id1, id2, ...] } to remove them from the queue."
}Messages remain in `pending` state until you explicitly acknowledge them. They are not
removed on read — you can fetch them multiple times.
Acknowledge Messages
After processing a message, acknowledge it to remove it from the queue:
curl -X POST https://creditclaw.com/api/v1/bot/messages/ack \
-H "Authorization: Bearer $CREDITCLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "message_ids": [1, 2] }'You can also acknowledge a single message:
{ "message_id": 1 }Response:
{
"acknowledged": [1, 2],
"not_found": [],
"message": "2 message(s) acknowledged."
}Message Expiry
Messages expire automatically based on event type:
Expired messages are cleaned up automatically. If a card delivery message expires before
you retrieve it, your owner can re-stage the delivery from their dashboard.
Recommended Polling Pattern
1. Check `pending_messages` count in `GET /bot/status` (every 30 minutes or on startup)
2. If count > 0, call `GET /bot/messages` to fetch all pending messages
3. Process each message based on `event_type`
4. Acknowledge processed messages via `POST /bot/messages/ack`
---
Important Rules
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...