API Reference

Soul Financials API Documentation

Verification infrastructure for AI agents. Index on-chain transactions, run fraud detection, and query portable verification profiles — all via REST API.

API Base URL

https://soul-financialsapi-production.up.railway.app

Replace with your self-hosted URL if running your own instance.

Quick Start

Get a verified agent profile in 4 steps. All examples use the production API.

Step 1 — Create an Agent

Register a new agent profile. You'll get back a UUID that identifies this agent in all subsequent calls.

bash
curl -X POST https://soul-financialsapi-production.up.railway.app/agents \
  -H "Content-Type: application/json" \
  -d '{"display_name": "my-trading-agent"}'
typescript
const res = await fetch('https://soul-financialsapi-production.up.railway.app/agents', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ display_name: 'my-trading-agent' })
});
const agent = await res.json();
console.log(agent.id); // Use this UUID for all subsequent calls

Step 2 — Verify Wallet Ownership

Prove ownership of a wallet by submitting a cryptographic signature. This links the wallet to your agent profile.

Note: The message must follow the format I am verifying wallet <address> for Soul Financials. The signature must be EIP-712 for Ethereum/Base or ed25519 for Solana.
bash
curl -X POST https://soul-financialsapi-production.up.railway.app/wallets/verify \
  -H "Content-Type: application/json" \
  -d '{
    "address": "0xYourWalletAddress",
    "chain": "ethereum",
    "message": "I am verifying wallet 0xYourWalletAddress for Soul Financials",
    "signature": "0xYourSignature...",
    "agent_id": "your-agent-uuid"
  }'
typescript
const wallet = '0xYourWalletAddress';
const message = `I am verifying wallet ${wallet} for Soul Financials`;
// Sign with ethers.js, viem, or your wallet SDK
const signature = await signer.signMessage(message);

const res = await fetch('https://soul-financialsapi-production.up.railway.app/wallets/verify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    address: wallet,
    chain: 'ethereum',
    message,
    signature,
    agent_id: agent.id
  })
});

Step 3 — Index Transactions

Trigger transaction indexing for your agent. This fetches on-chain data from all verified wallets.

Note: This triggers background processing. Transactions are fetched from Alchemy (Ethereum/Base) and Helius (Solana), fraud detection runs, and your Soul Score is computed. Check your verification report after a few seconds.
bash
curl -X POST https://soul-financialsapi-production.up.railway.app/agents/{agent_id}/index
typescript
await fetch(`https://soul-financialsapi-production.up.railway.app/agents/${agent.id}/index`, {
  method: 'POST'
});
// Wait a few seconds for background processing
await new Promise(r => setTimeout(r, 5000));

Step 4 — Get Verification Report

Retrieve the full verification report. This is the same endpoint other agents call to check your trustworthiness.

bash
curl https://soul-financialsapi-production.up.railway.app/verify/{agent_id}
typescript
const res = await fetch(`https://soul-financialsapi-production.up.railway.app/verify/${agent.id}`);
const report = await res.json();

console.log(report.soul_score);     // { value: 650, max: 900, tier: "good" }
console.log(report.graph_health);   // { status: "clean", flags: { high: 0, medium: 0, low: 0 } }
console.log(report.income);         // { total_90d_usdc: "15420.50", ... }
console.log(report.warnings);       // ["10 reputation signals are self-reported"]

Use ?include=reputation,income,graph to request only specific sections.

Step 5 — Submit Self-Reported Reputation (Optional)

Submit reputation signals about your agent. Self-reported signals are clearly labeled in the report and have lower weight than platform-verified signals. Requires a platform API key.

bash
curl -X POST https://soul-financialsapi-production.up.railway.app/agents/{agent_id}/reputation \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your-platform-api-key" \
  -d '{
    "signals": [{
      "signal_type": "task_completion",
      "signal_value": {
        "task_id": "task-001",
        "description": "Completed data analysis job",
        "amount_usdc": 150
      },
      "signal_timestamp": "2026-02-08T12:00:00Z"
    }]
  }'
typescript
await fetch(`https://soul-financialsapi-production.up.railway.app/agents/${agent.id}/reputation`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': platformApiKey
  },
  body: JSON.stringify({
    signals: [{
      signal_type: 'task_completion',
      signal_value: {
        task_id: 'task-001',
        description: 'Completed data analysis job',
        amount_usdc: 150
      },
      signal_timestamp: '2026-02-08T12:00:00Z'
    }]
  })
});

Check Another Agent (Primary Use Case)

This is the core use case. Before transacting with another agent, query their verification report to assess trustworthiness.

typescript
// Before transacting with another agent, check their verification report
const res = await fetch(`https://soul-financialsapi-production.up.railway.app/verify/${otherAgentId}`);
const report = await res.json();

if (report.soul_score.value >= 600 && report.graph_health.status === 'clean') {
  // Safe to transact — good score, no fraud flags
  console.log('Agent is trustworthy');
} else if (report.soul_score.value < 300) {
  // Caution — check warnings before proceeding
  console.log('Proceed with caution:', report.warnings);
}

// Check specific concerns
if (report.graph_health.flags.high > 0) {
  console.log('HIGH SEVERITY fraud flags detected');
}
if (report.income?.confidence_breakdown.tier4_pct > 0.8) {
  console.log('Most income is unverified (Tier 4)');
}
bash
# Quick check from the command line
curl -s https://soul-financialsapi-production.up.railway.app/verify/{other_agent_id} | jq '.soul_score, .graph_health.status, .warnings'

Endpoint Reference

Agent Management

POST/agents

Create a new agent profile. Returns the agent UUID used in all subsequent calls.

Request Body

{ "display_name": "my-trading-agent" }

Response (condensed)

{
  "id": "a1b2c3d4-...",
  "display_name": "my-trading-agent",
  "created_at": "2026-02-09T...",
  "soul_score": null,
  "is_verified": false
}
GET/agents/:id

Get agent details including linked wallets.

Response (condensed)

{
  "id": "a1b2c3d4-...",
  "display_name": "my-trading-agent",
  "soul_score": 650,
  "wallets": [
    { "address": "0x...", "chain": "ethereum", "verified_at": "..." }
  ]
}

Wallet Verification

POST/wallets/verify

Submit a cryptographic signature to prove wallet ownership and link it to an agent.

Request Body

{
  "address": "0xYourWalletAddress",
  "chain": "ethereum",
  "message": "I am verifying wallet 0x... for Soul Financials",
  "signature": "0xSig...",
  "agent_id": "a1b2c3d4-..."
}

Response (condensed)

{
  "agent_id": "a1b2c3d4-...",
  "wallet": {
    "address": "0x...",
    "chain": "ethereum",
    "verified_at": "2026-02-09T..."
  }
}

Transaction Indexing

POST/agents/:id/index

Trigger transaction indexing for all verified wallets. Fetches from Alchemy (Ethereum/Base) and Helius (Solana). Runs fraud detection and scoring in background.

Response (condensed)

{
  "agent_id": "a1b2c3d4-...",
  "wallets_indexed": 2,
  "transactions_found": 47,
  "chains": ["ethereum", "base"]
}
GET/agents/:id/transactions

Get paginated transaction list for an agent. Filterable by chain.

Headers

Optional: ?page=1&limit=20&chain=ethereum

Response (condensed)

{
  "transactions": [
    {
      "tx_hash": "0x...",
      "chain": "ethereum",
      "amount_usdc": "250.00",
      "direction": "incoming",
      "confidence_tier": 3
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total": 47 }
}

Verification Report

GET/verify/:agentIdCore endpoint

The core product endpoint. Returns the full verification report including Soul Score, reputation, income, graph health, and warnings. This is what other agents and platforms call to check trustworthiness.

Headers

Optional: ?include=reputation,income,graph

Response (condensed)

{
  "report_id": "...",
  "agent_id": "a1b2c3d4-...",
  "soul_score": {
    "value": 650,
    "max": 900,
    "tier": "good",
    "breakdown": {
      "reputation": 210,
      "income": 180,
      "graph_health": 200,
      "cross_platform_consistency": 35,
      "network_quality": 40,
      "penalties": -25
    }
  },
  "reputation": { "total_tasks_completed": 47, "avg_quality_rating": 4.3, ... },
  "income": { "total_90d_usdc": "15420.50", ... },
  "graph_health": { "status": "clean", "flags": { "high": 0, "medium": 0, "low": 0 } },
  "warnings": [],
  "metadata": { "wallets_verified": 2, "chains_active": ["ethereum", "base"] }
}

Reputation

POST/agents/:id/reputation

Ingest reputation signals for an agent. Requires platform authentication via X-API-Key header.

Headers

X-API-Key: your-platform-api-key

Request Body

{
  "signals": [{
    "signal_type": "task_completion",
    "signal_value": { "task_id": "t-001", "description": "...", "amount_usdc": 150 },
    "signal_timestamp": "2026-02-08T12:00:00Z"
  }]
}

Response (condensed)

{ "ingested": 1, "signals": [...] }
GET/agents/:id/reputation

Get cross-platform reputation summary for an agent.

Response (condensed)

{
  "agent_id": "...",
  "total_signals": 53,
  "verified_signals": 42,
  "flagged_signals": 1,
  "by_platform": [...],
  "by_type": { "task_completion": 30, "quality_rating": 15, ... },
  "recent_signals": [...]
}

Platforms

POST/platforms

Register a platform integration. Returns an API key (shown only once) used for reputation signal ingestion.

Request Body

{
  "name": "my-marketplace",
  "platform_type": "marketplace",
  "base_url": "https://my-marketplace.com",
  "supported_chains": ["ethereum", "base"]
}

Response (condensed)

{
  "id": "...",
  "name": "my-marketplace",
  "api_key": "sf_live_abc123...",
  "platform_type": "marketplace"
}
GET/platforms

List all registered platforms.

GET/platforms/:id

Get platform details by ID.

PATCH/platforms/:id

Update platform details (name, type, supported chains, active status).

Request Body

{ "name": "updated-name", "is_active": true }
POST/agents/:id/platforms/link

Link an agent to their identity on a platform.

Request Body

{
  "platform_id": "platform-uuid",
  "platform_agent_id": "agent-123-on-platform",
  "platform_display_name": "MyAgent"
}
GET/agents/:id/platforms

List all platform profiles linked to an agent.

System

GET/health

Health check. Returns server status and uptime.

Soul Score Tiers

The Soul Score ranges from 0 to 900. It is deterministic and fully decomposable — every point can be traced to a specific component.

RangeTierMeaning
750–900ExcellentStrong verified reputation, high-confidence income, clean graph
600–749GoodSolid track record with minor gaps
450–599FairLimited history or some unverified signals
300–449DevelopingNew agent or significant data gaps
0–299CautionMajor flags, low verification, or fraud indicators

Score breakdown components:

ComponentMax PointsBased On
Base300Starting score for all agents
Reputation+300Verified signals, quality ratings, platform diversity
Income+250High-confidence income ratio, client diversity
Graph Health+150Clean transaction graph (severe penalties for fraud flags)
Cross-Platform+50Consistency of reputation data across platforms
Network Quality+50TraceRank-derived payer quality score

Income Confidence Tiers

Every indexed transaction is classified into a confidence tier based on the strength of its verification signals.

TierConfidenceRequirements
Tier 1HighestMultiple commerce protocol signals (ACP escrow + x402/ERC-8004) + reputable, diverse payer
Tier 2HighAt least one commerce signal (ACP or x402) + reputable payer
Tier 3MediumNo commerce signals but payer has decent history (30+ days, quality score 40+)
Tier 4LowStandard transfer with no additional verification signals
Tier -1FlaggedHigh-severity fraud flag detected on this transaction

Fraud Detection Patterns

Soul Financials runs 7 fraud detection patterns against every agent's transaction and reputation data. Results appear in the graph_health section of the verification report.

01

Shared Funding Source

Multiple agents share a non-exchange upstream funding wallet.

02

Circular Flow

Money returns to origin within 5 hops — possible wash trading.

03

Temporal Clustering

Many similar-amount payments from different sources in a tight window.

04

Convergence

Multiple agents send funds to the same non-exchange destination.

05

Review Ring

Agents mutually rate each other in a closed loop.

06

Coordinated Boost

Reputation signals from low-quality or newly created source agents.

07

Signal-Transaction Mismatch

Task completion claims with no corresponding payment transactions.

Known infrastructure (major exchanges, DeFi protocols, stablecoin contracts) is exempt from triggering certain fraud patterns to prevent false positives. TraceRank propagates trust from these seed entities through the payment graph.
Soul FinancialsSoul Financials