Overview
Monad’s high-performance EVM, with 10,000+ tx/s and sub-second time-to-finality, makes it well-suited for stablecoin-powered applications. Brale lets businesses create their own stablecoins and then access them programmatically through a single API for money movements.What You’ll Build
By the end of this guide, you’ll have:- A custom stablecoin launched on Monad
- API credentials for programmatic control
- Working integrations for onramps, transfers, swaps, and offramps
Why Custom Stablecoins?
| Use Case | Benefit |
|---|---|
| Branded experience | Your token, your identity—build user trust |
| Direct fiat rails | Connect to ACH, wire, and RTP through a single orchestration layer |
| Cross-chain liquidity | Move value across supported chains through a unified transfers model |
| Compliance built-in | Brale handles the regulated issuance and orchestration layer |
Prerequisites
Before starting, ensure you have:- A registered business entity for KYB verification
- A Brale account
- Monad network and wallet access:
Choose Your Environment
Use Brale testnet while developing and switch to mainnet for production. In testnet, usemonad_testnet as the transfer_type and in mainnet, use monad. Brale’s testnet supports testnet networks only and skips the real fiat leg on mint and redemption flows.
Part 1: Launch Your Stablecoin in Brale
Stablecoin issuance is a dashboard workflow. API integration begins after your stablecoin has been launched. Once issued, the stablecoin is available via the API.Step 1: Complete Business Verification
- Log in to the Brale Dashboard
- Complete KYB (Know Your Business) verification:
- Business name and EIN
- Beneficial ownership information
Step 2: Launch Your Stablecoin
In the Brale Dashboard, create your stablecoin and configure:- Name: Your stablecoin’s display name (for example, Acme Dollar)
- Symbol: Token ticker (for example, ACME)
- Chains: Select Monad
- Branding: Add your token logo
Part 2: Integrate with the Brale API
Brale’s API uses OAuth 2.0 client credentials, environment-specific applications, andaddress_id values as the source/destination primitive for transfers.
Step 1: Create API Credentials
- Sign in to your Brale account
- Navigate to Settings → API
- Click Create Application
- Give the application a name and choose Mainnet or Testnet
- Copy the generated
CLIENT_IDandCLIENT_SECRET
Step 2: Authenticate
Exchange your credentials for a bearer token:Step 3: Set Your Working Variables
Step 4: Retrieve Your account_id
List your accounts and identify the account you want to operate on:
Step 5: Get Your Internal Monad address_id
Brale automatically generates internal custodial addresses on supported chains for onboarded accounts. Retrieve the internal Monad address you want to use for custodial flows:
address_id:
Step 6: Register an External Monad Wallet (Optional)
If you want to send to or receive from a self-custody Monad wallet, register it as an external address first. In Brale, addresses can betype=internal or type=external, and both are represented by address_id values used in transfers.
id as the wallet’s Brale address_id:
Alternative: Brale API MCP Server
Brale offers a hosted API MCP server for live API access from MCP-compatible clients. The remote server URL ishttps://mcp.brale.xyz/.
Setup for Claude Desktop
- Open Settings → Connectors
- Click Add custom connector
- Enter the remote MCP server URL:
https://mcp.brale.xyz/ - Open Advanced settings and enter your OAuth Client ID and Client Secret
- Save the connector
Custom connectors are available on Pro, Max, Team, and Enterprise plans.
Setup for Cursor
Add a server entry in Settings → MCP:Setup for Windsurf
Edit~/.codeium/windsurf/mcp_config.json:
Move Value with Transfers
All stablecoin movement is handled through the Transfers API. Every transfer is scoped to anaccount_id, references address_id values where applicable, and uses transfer_type plus value_type to define the rail/chain and asset being moved.
Base URL
Required Headers
Onramps: Fiat to Stablecoin
Convert USD to your stablecoin on Monad.Option A: Wire Onramp
Option B: ACH Onramp
If you are funding from a linked bank account, use an ACH funding address and mint to your Monad destination address:Option C: Automated Onramps
For recurring flows, create an Automation that mints stablecoins automatically when USD arrives:- In the Dashboard, navigate to Automations
- Create an automation that listens for inbound ACH or wire funding
- Set the destination to your Monad address
- Save the automation
Transfers: Move Stablecoins
Transfer your stablecoin between addresses on Monad or across chains.On-Chain Transfer (Monad)
Cross-Chain Transfer
Move your stablecoin from Monad to another supported chain:Swaps: Exchange Stablecoins
Swap between supported stablecoins at 1:1 with no slippage.Confirm the specific
value_type and transfer_type combination you plan to use before production.Example: Swap Your Token for USDC
Offramps: Stablecoin to Fiat
Convert your stablecoin back to USD via wire or ACH.Offramp to Wire
Offramp to ACH
For ACH payouts, useach_credit or same_day_ach_credit on the destination address instead of wire.
Monitoring Transfers
Check transfer status by querying the transfer ID:Transfer States
| Status | Description |
|---|---|
pending | Transfer submitted but not yet in progress |
processing | Transfer is in progress |
complete | Transfer finalized and funds have arrived at the destination |
canceled | Transfer has been canceled |
failed | Transfer could not be completed |
Best Practices
Security
- Store API credentials in environment variables or a secrets manager
- Use a fresh idempotency key for each new transfer request
- Refresh bearer tokens when they expire
Testing
- Use testnet credentials during development
- Use
monad_testnetwhile testing andmonadin production - Do not mix testnet credentials/resources with mainnet flows
Addressing
- Use internal addresses for Brale-custodied wallets
- Register self-custody Monad wallets as external addresses before using them in transfers
- Store returned
address_idvalues and reuse them across workflows
Next Steps
- Explore the Brale docs
- Review the Brale API MCP guide
- Confirm supported transfer types and value types before shipping production flows

