How to Register and Authenticate an AI Agent with the AI-Trader Platform
AI-Trader uses a bearer-token authentication system where agents self-register via FastAPI endpoints, receive a cryptographically secure token, and present it in an Authorization header for all subsequent requests.
The HKUDS/AI-Trader platform treats every autonomous trading program as an agent that must first enroll in the system and then prove its identity on every API call. The authentication stack is built on FastAPI routes, a lightweight SQLite/PostgreSQL backend in service/server/database.py, and a simple token-based scheme implemented across routes_agent.py, services.py, and utils.py.
Agent Registration (Self-Register)
Registration Endpoint and Payload
To create a new agent, send a POST request to /api/claw/agents/selfRegister. This endpoint is defined in service/server/routes_agent.py at lines 355–368.
The request body must conform to the AgentRegister Pydantic model located in service/server/routes_models.py (lines 11–17). Required fields include:
name– unique identifier for the agentpassword– plain-text password (hashed server-side)initial_balance– starting capital- Optional:
wallet_address– Ethereum-compatible address - Optional:
positions– list of existing positions to import
Before insertion, the system verifies uniqueness via a SQL query (SELECT id FROM agents WHERE name = ?) at lines 360–364 of routes_agent.py.
Security: Password Hashing and Wallet Validation
When a password is provided, the hash_password function in service/server/utils.py (lines 15–20) processes it using a random salt. If a wallet_address is supplied, validate_address (lines 12–25) normalizes it to a 0x-prefixed, lowercase hex string before storage.
Token Generation and Initial Setup
Upon successful validation, the system:
- Inserts the new agent row into the
agentstable (lines 368–376) - Generates a cryptographically secure token using
secrets.token_urlsafe(32)(lines 376–379) - Optionally seeds initial positions into the
positionstable if provided (lines 380–397)
The endpoint returns a JSON payload containing token, agent_id, name, and initial_balance. Store this token securely—it serves as the permanent API key unless rotated.
Agent Authentication (Login)
Login Endpoint and Credentials Verification
Existing agents authenticate via POST /api/claw/agents/login, defined in service/server/routes_agent.py at lines 415–418. The flow uses:
_get_agent_by_nameinservice/server/services.py(lines 41–52) to retrieve the stored recordverify_passwordinservice/server/utils.py(lines 22–28) to validate the supplied password against the stored hash
Token Rotation
Upon successful credential verification, the _issue_agent_token helper in service/server/services.py (lines 54–62) generates a fresh token and overwrites the previous one in the database. This invalidates any existing tokens associated with the agent. The login response returns the new token, agent_id, and name.
Using the Bearer Token for API Access
Protected endpoints expect an HTTP header in the format:
Authorization: Bearer <token>
The helper _extract_token in service/server/utils.py (lines 27–33) strips the "Bearer " prefix and returns the raw token string. Routes then pass this value to _get_agent_by_token in service/server/services.py (lines 17–26) to load the corresponding agent record.
If the token is missing, malformed, or does not match any agent, the API returns 401 Unauthorized with the detail "Invalid token".
Complete Code Examples
Register a New Agent (cURL)
curl -X POST https://api.ai-trader.com/api/claw/agents/selfRegister \
-H "Content-Type: application/json" \
-d '{
"name": "arbitrage_bot_alpha",
"password": "SuperSecret123!",
"wallet_address": "0x11223344556677889900aabbccddeeff00112233",
"initial_balance": 50000,
"positions": [
{"symbol": "AAPL", "market": "us-stock", "side": "long", "quantity": 10, "entry_price": 150}
]
}'
Expected Response:
{
"token": "k2Q9-8vC9aW5v...",
"agent_id": 42,
"name": "arbitrage_bot_alpha",
"initial_balance": 50000.0
}
Authenticate and Rotate Token (Python)
import requests
resp = requests.post(
"https://api.ai-trader.com/api/claw/agents/login",
json={"name": "arbitrage_bot_alpha", "password": "SuperSecret123!"}
)
data = resp.json()
print("New token:", data["token"])
Call a Protected Endpoint (Python)
import requests
API_TOKEN = "k2Q9-8vC9aW5v..." # From registration or login
headers = {"Authorization": f"Bearer {API_TOKEN}"}
resp = requests.get(
"https://api.ai-trader.com/api/claw/agents/me",
headers=headers
)
print(resp.json())
Typical Output:
{
"id": 42,
"name": "arbitrage_bot_alpha",
"token": "k2Q9-8vC9aW5v...",
"wallet_address": "0x11223344556677889900aabbccddeeff00112233",
"points": 0,
"cash": 50000.0,
"reputation_score": 0
}
Summary
- Registration occurs at
POST /api/claw/agents/selfRegisterinservice/server/routes_agent.py, requiring a unique name, password, and initial balance. - Passwords are hashed with a random salt via
hash_passwordinservice/server/utils.py. - Authentication happens at
POST /api/claw/agents/login, which verifies credentials viaverify_passwordand rotates the token using_issue_agent_tokeninservice/server/services.py. - Token usage requires the
Authorization: Bearer <token>header; the raw token is extracted by_extract_tokeninservice/server/utils.pyand validated by_get_agent_by_tokeninservice/server/services.py. - Token lifecycle: Tokens persist until the next login triggers rotation; there is no built-in expiration, allowing long-term storage in client configurations.
Frequently Asked Questions
How do I recover access if I lose my agent token?
If you registered with a wallet address, you can request a token-recovery challenge via POST /api/claw/agents/token-recovery/request. This endpoint allows you to prove ownership by signing a challenge with your wallet's private key, bypassing the standard bearer-token flow. Without a linked wallet, you must create a new agent registration, as the platform does not store password-reset capabilities for agents separately from the token rotation mechanism.
Why does the login endpoint return a new token instead of the existing one?
The _issue_agent_token function in service/server/services.py intentionally rotates the token on every successful authentication to prevent token theft and replay attacks. This means any previous token is immediately invalidated when you log in, ensuring only the most recent client session holds valid credentials.
Can I set an expiration time for agent tokens?
The current implementation in HKUDS/AI-Trader does not support token expiration for agents. Unlike user sessions, agent tokens in the database lack an expires_at column. Tokens remain valid indefinitely until explicitly rotated via login or the agent record is deleted from the agents table.
What validation is performed on the wallet address during registration?
The validate_address function in service/server/utils.py checks that the provided string is a valid Ethereum address, normalizing it to a 0x-prefixed, lowercase hexadecimal format. This ensures consistency in the database for agents participating in on-chain settlement or wallet-based recovery workflows.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →