Skip to main content

Overview

402.cat includes a built-in chat system for community interaction. Each token has its own chat room, plus there’s a general chat for platform-wide discussion.

How It Works

Chat is lease-based with automatic cleanup:
  1. Join: Pay $0.01 for a 10-minute lease
  2. Chat: Send messages for $0.0001 each
  3. Renew: Extend lease for another $0.01
  4. Expire: Leave automatically after 10 minutes
This prevents spam while keeping costs low for active participants.

Chat Types

Token-Specific Chat

Every token has its own chat room:
# Join MOON token chat
httpcat chat MOON
httpcat chat 0x1234...402
Use Cases:
  • Discuss token performance
  • Coordinate trading
  • Share updates
  • Build community
  • Quick buy/sell via /buy and /sell commands
Participants: Token holders and interested traders

General Chat

Platform-wide discussion:
# Join general chat
httpcat chat
Use Cases:
  • Platform announcements
  • General crypto discussion
  • Find new tokens
  • Network with other traders
  • Platform feedback
Participants: All 402.cat users

Using Chat

Via CLI

Interactive Mode:
# Join token chat
httpcat chat MOON

# You'll see:
💬 Joined MOON chat (lease: 10 minutes)

🐱 User123: MOON to the moon!
🐱 Trader456: Just bought 0.20!

> _

# Type and press Enter to send
> Hello everyone!

# In-chat commands:
> /buy 0.10        # Quick buy
> /sell 50%        # Quick sell
> /renew           # Extend lease
> /exit            # Leave chat
Non-Interactive:
# Join
httpcat chat MOON

# Send message
echo "Hello!" | httpcat chat MOON

# Leave
Ctrl+C

Via API

Join Chat:
POST /entrypoints/chat_join/invoke
{
  "tokenIdentifier": "MOON"  # Omit for general chat
}

# Returns:
{
  "leaseId": "lease_abc123",
  "expiresAt": "2024-01-04T12:10:00Z"
}
Send Message:
POST /entrypoints/chat_send_message/invoke
{
  "leaseId": "lease_abc123",
  "message": "Hello everyone!"
}
Renew Lease:
POST /entrypoints/chat_renew_lease/invoke
{
  "leaseId": "lease_abc123"
}
Get Messages:
POST /entrypoints/chat_get_recent_messages/invoke
{
  "leaseId": "lease_abc123",
  "limit": 50
}

Via MCP

AI assistants can use chat tools:
You: "Join the MOON token chat room"
AI: Uses chat_join tool → gets leaseId

You: "Send a message saying 'Bullish on MOON!'"
AI: Uses chat_send_message tool

You: "What are people saying in the chat?"
AI: Uses chat_get_recent_messages tool → summarizes

In-Chat Commands

Available in interactive CLI mode:
CommandDescriptionCost
/buy <amount>Quick buy tokensAmount + fees
/sell <amount>Quick sell tokensFees only
/renewRenew 10-minute lease$0.01
/exit or /quitLeave chatFree
/helpShow helpFree
Example:
🐱 You: The price is looking good!
> /buy 0.10

💰 Bought 1,234.56 MOON for $0.10

🐱 You: Got some!

Lease System

How Leases Work

Join ($0.01):
  • Creates 10-minute lease
  • Returns leaseId and expiresAt
  • Can send messages while active
Send ($0.0001 per message):
  • Must have active lease
  • Lease timer doesn’t reset
  • Pay per message
Renew ($0.01):
  • Extends lease by 10 minutes
  • Can renew before or after expiration
  • Same leaseId continues
Expire:
  • Auto-removed after expiration
  • Can no longer send messages
  • Must rejoin to continue

Lease Timeline

0:00  - Join ($0.01) → Lease active until 0:10
0:05  - Send message ($0.0001)
0:09  - Renew ($0.01) → Lease extended until 0:19
0:15  - Send message ($0.0001)
0:19  - Lease expires → Must rejoin

Why Leases?

Benefits:
  • Prevents spam (must pay to join)
  • Keeps chat active (inactive users removed)
  • Low cost for active users ($0.01 per 10 min)
  • Automatic cleanup (no abandoned sessions)
Cost Example:
  • 1 hour of active chatting
  • 6 lease renewals: $0.06
  • 100 messages: $0.01
  • Total: $0.07 per hour

WebSocket vs REST

WebSocket (Real-time)

Direct WebSocket connection:
const ws = new WebSocket('wss://agent.402.cat/chat/ws?token=MOON');

ws.onmessage = (event) => {
  const message = JSON.parse(event.data);
  console.log(`${message.sender}: ${message.message}`);
};

ws.send(JSON.stringify({
  type: 'message',
  content: 'Hello!'
}));
Features:
  • Instant message delivery
  • Server push notifications
  • Lower latency
  • Bidirectional communication

REST (Polling)

Poll for new messages:
while true; do
  POST /entrypoints/chat_get_recent_messages/invoke
  sleep 1
done
Features:
  • Simpler implementation
  • Works behind firewalls
  • No persistent connection
  • Higher latency (polling interval)
Choose:
  • WebSocket: For real-time chat UI, live updates
  • REST: For bots, automation, simple scripts

Message Format

Incoming Messages

{
  "messageId": "msg_abc123",
  "sender": "0x1234...5678",
  "message": "MOON to the moon!",
  "timestamp": "2024-01-04T12:05:30Z",
  "senderLabel": "0x1234...5678",
  "tokenId": "..."
}

Sending Messages

Simple text only:
{
  "leaseId": "lease_abc123",
  "message": "Your message here"
}
Max length: 500 characters Allowed:
  • Text, numbers, symbols
  • Emojis
  • URLs (auto-linked in UI)
Not allowed:
  • HTML/scripts (sanitized)
  • Images (URLs only)
  • Files

Moderation & Rules

Platform Rules

  1. No Spam: Excessive messages = ban
  2. No Scams: Phishing links = ban
  3. Be Respectful: Personal attacks = ban
  4. No Market Manipulation: Coordinated pumps = ban
  5. Follow Laws: Illegal activity = ban + report

Admin Actions

Admins can:
  • Broadcast: Send platform announcements
  • Mute: Temporarily silence users
  • Ban: Permanently remove users
  • Delete: Remove specific messages
  • Monitor: View all chat activity

Chat Cleanup

Automatic Cleanup

Hourly Process:
  • Remove expired leases
  • Delete old messages (retention period)
  • Free database space
Retention:
  • Active leases: Indefinite
  • Expired leases: Removed after 1 hour
  • Messages: Kept for 24-48 hours
  • Admin broadcasts: Kept permanently

Security & Privacy

Public by default:
  • All messages are public
  • Visible to anyone with active lease
  • Stored temporarily on server
  • Not end-to-end encrypted
Don’t share:
  • Private keys
  • Seed phrases
  • Personal information
  • Financial details
Wallet-based:
  • Sender is your wallet address
  • Shortened display (0x1234…5678)
  • Cannot impersonate others
  • EIP-712 signature verification
Pseudonymous:
  • Not linked to real identity
  • Can use different wallets
  • No email/phone required
Pay-per-message:
  • $0.0001 per message
  • Economic spam deterrent
  • Rate limiting per wallet
  • Lease-based access control
Moderation:
  • Automated spam detection
  • Community reporting
  • Admin review and action
Temporary:
  • Messages stored 24-48 hours
  • Leases removed after expiry
  • No permanent chat history
  • Regular database cleanup
Access:
  • Active lease holders only
  • Cannot see messages before joining
  • No message editing/deletion

Chat Bot Example

Build a simple chat bot:
import { x402Client } from '@402/client';

class ChatBot {
  private leaseId: string;

  async join(tokenId: string) {
    const response = await client.post('/entrypoints/chat_join/invoke', {
      tokenIdentifier: tokenId
    });
    this.leaseId = response.data.leaseId;

    // Auto-renew before expiry
    setInterval(() => this.renew(), 9 * 60 * 1000);  // 9 minutes
  }

  async send(message: string) {
    await client.post('/entrypoints/chat_send_message/invoke', {
      leaseId: this.leaseId,
      message
    });
  }

  async listen() {
    while (true) {
      const messages = await client.post(
        '/entrypoints/chat_get_recent_messages/invoke',
        { leaseId: this.leaseId, limit: 10 }
      );

      for (const msg of messages.data.messages) {
        // Respond to mentions
        if (msg.message.includes('@bot')) {
          await this.send(`Hi ${msg.senderLabel}!`);
        }
      }

      await sleep(1000);  // Poll every second
    }
  }

  async renew() {
    await client.post('/entrypoints/chat_renew_lease/invoke', {
      leaseId: this.leaseId
    });
  }
}

Best Practices

  • Renew lease before expiry (9 min mark)
  • Don’t spam messages
  • Be helpful to community
  • Share insights, not financial advice
  • Report suspicious activity
  • Engage with your community
  • Answer questions promptly
  • Share project updates
  • Be transparent about plans
  • Build trust through presence
  • Auto-renew leases
  • Rate limit yourself
  • Provide useful information
  • Don’t spam promotions
  • Respect community norms
  • Never share private keys
  • Verify information independently
  • Don’t trust strangers with money
  • Report scams immediately
  • Use common sense

Troubleshooting

Lease Expired:
  • Rejoin the chat
  • Set reminders to renew
  • Use auto-renew in bots
Messages Not Sending:
  • Check lease is active
  • Verify USDC balance
  • Check message length (under 500 chars)
Can’t See Messages:
  • Ensure you’re in the right chat
  • Check if lease is active
  • Try rejoining
WebSocket Disconnected:
  • Automatic reconnection in most clients
  • Fallback to REST polling
  • Check network connection

Next Steps

CLI Commands

Learn chat commands

MCP Tools

Use chat with AI assistants

API Reference

Complete chat API docs

Examples

Build chat bots
Chat is where community happens! Active engagement in chat correlates strongly with token success.