The ledger layer stablecoin payment companies are missing.
Event-sourced. Agentic-first. Fiat and on-chain. The open-source double-entry ledger for cross-border stablecoin payments — with built-in reconciliation, Travel Rule-aware audit trail, and AI agent workflows.
The problem
You move money. But who accounts for it?
Every stablecoin payment creates an accounting obligation. USDC arrives on-chain. Your ledger should know. Most don't — or rely on spreadsheets.
Reconciliation is still manual.
Cross-border PSPs spend engineering cycles matching on-chain transfers to internal records. Nobody has automated this correctly.
AI agents need a safe ledger interface.
As agentic workflows enter finance, every automated action needs an audit trail, policy guard, and rollback. No existing ledger was built for this.
A ledger built for the stablecoin payment stack
Double-entry, event-sourced core
Fiat and on-chain entries in a single unified model. Immutable event log. Point-in-time balance queries. ACID guarantees.
On-chain reconciliation
Chain readers for EVM, Solana, and Tron auto-post ledger entries when on-chain transfers confirm. PENDING → SETTLED automatically.
Agentic-first execution layer
PolicyGuard, AgentAuditLog, and WorkflowPlan as first-class primitives. AI agents execute multi-step ledger workflows safely — with full rollback.
Travel Rule-aware audit trail
IVMS 101 native. Every agent action and human action is HMAC-signed before execution. LGPD-ready for Brazilian fintechs.
See it in action
An AI agent reconciles a batch — with a full audit trail
Claude Code calls Idem's MCP server to reconcile USDC transfers, rolls back on an amount mismatch, and produces an HMAC-signed audit trail — logged before execution, every time.

Built by
Italo Cavalcanti
Backend engineer with 14 years building scalable software for millions of users — the last 7 in payment infrastructure across Latin America, at XP Inc, dLocal, and Caliza.
I kept hitting the same problem: fintechs settling cross-border payments on stablecoin rails had no ledger that handled both fiat and on-chain entries correctly. Everyone was building it from scratch.
So I built Idem from Recife, Brazil 🇧🇷 — and open-sourced it so nobody has to start over again.
Integrate in minutes
// Add to pom.xml
// <dependency>
// <groupId>finance.idem</groupId>
// <artifactId>idem-sdk-kotlin</artifactId>
// <version>0.1.0</version>
// </dependency>
val client = IdemClient(apiKey = "sk_live_...")
val result = client.postTransaction {
debit(
account = "acc_treasury",
amount = 10_000.usd(),
rail = PaymentRail.PIX
)
credit(
account = "acc_customer_123",
amount = 10_000.usd(),
onChain = OnChainRef(
token = StablecoinToken.USDC,
chain = ChainId.BASE,
txHash = "0xabc..."
)
)
}curl -X POST https://api.idem.finance/v1/transactions \
-H "X-API-Key: sk_live_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"entries": [
{
"type": "DEBIT",
"account_id": "acc_treasury",
"monetary_entry": {
"kind": "FIAT",
"amount": "10000.00",
"currency": "USD",
"rail": "PIX"
}
},
{
"type": "CREDIT",
"account_id": "acc_customer_123",
"monetary_entry": {
"kind": "ON_CHAIN",
"amount": "10000.00",
"token": "USDC",
"chain_id": "EVM_8453",
"tx_hash": "0xabc..."
}
}
]
}'// Claude Code / Cursor — via MCP
// Configure in claude_desktop_config.json:
// {
// "mcpServers": {
// "idem": {
// "url": "https://mcp.idem.finance",
// "apiKey": "sk_live_..."
// }
// }
// }
// Then in any MCP-compatible AI agent:
"Post a debit of 10,000 USD from acc_treasury
and a credit to acc_customer_123 for the USDC
transfer on Base chain with hash 0xabc..."
// Idem PolicyGuard validates → AuditLog written
// → Transaction committed → webhook firesOpen source. Always.
The Idem ledger core is open source under the FSL-1.1-ALv2 license. Self-host it. Read the code. Audit the invariants. Contribute.
- ✓Full ledger core — no feature limits
- ✓Chain readers for EVM, Solana, Tron
- ✓MCP server included
Built for the cross-border stablecoin stack
Ethereum · Base · Polygon · Solana · Tron
USDC · USDT · BRZ · PYUSD
Works alongside the tools you already use:
Alchemy · QuickNode
Get started in 5 minutes
# Clone and run locally
git clone https://github.com/idem-finance/idem
cd idem
docker-compose up -d
# Or pull the Docker image directly
docker pull idemfinance/idem:latest
# Add the Kotlin SDK to your project
# pom.xml:
# <dependency>
# <groupId>finance.idem</groupId>
# <artifactId>idem-sdk-kotlin</artifactId>
# <version>0.1.0</version>
# </dependency>