Build the Future of Fintech with Our APIs
Integrate Check Avenue check cashing and iDemand AML Monitoring into your platform. Enterprise-grade APIs with comprehensive documentation, SDKs, and 24/7 support.
// Initialize iDemand API
const iDemand = require('@idemand/sdk');
const client = new iDemand.Client({
apiKey: 'your_api_key',
environment: 'sandbox'
});
// Process check cashing
const result = await client.checkCashing.create({
checkImage: uploadedFile,
amount: 500.00,
accountNumber: 'ACC123456'
});
console.log(result.status); // 'approved'Quick Start Guide
Get up and running in under 10 minutes — every step is live.
Sign up and generate your API keys from the dashboard.
Install our official SDK for your preferred language.
$ npm install @idemand/sdkRun a live test request against the sandbox and inspect the real response.
Test in sandbox, then switch to production with a single config change.
curl https://api.idemand.com/v1/check-cashing \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"check_image": "base64_encoded_image",
"amount": 500.00,
"account_number": "ACC123456",
"customer_id": "CUST789"
}'Check Avenue - Complete Guide
Learn how to integrate check cashing into your application
The Check Avenue API enables instant check cashing with AI-powered fraud detection. Process checks in under 3 minutes with industry-leading accuracy.
const iDemand = require('@idemand/node-sdk');
const fs = require('fs');
const client = new iDemand.Client({
apiKey: process.env.IDEMAND_API_KEY,
environment: 'sandbox'
});
async function processCheck() {
const checkImage = fs.readFileSync('check.jpg', 'base64');
const result = await client.checkCashing.create({
checkImage: checkImage,
amount: 500.00,
accountNumber: 'ACC123456',
customerID: 'CUST789'
});
console.log('Check ID:', result.id);
console.log('Status:', result.status);
console.log('Net Amount:', result.net_amount);
return result;
}
processCheck();// Check status polling
async function waitForCheckApproval(checkId, maxRetries = 30) {
for (let i = 0; i < maxRetries; i++) {
const check = await client.checkCashing.retrieve(checkId);
console.log(`Attempt ${i + 1}: Status is ${check.status}`);
if (check.status === 'approved') {
return check;
} else if (check.status === 'rejected') {
throw new Error(`Check rejected: ${check.reason}`);
}
// Wait 2 seconds before next check
await new Promise(resolve => setTimeout(resolve, 2000));
}
throw new Error('Check processing timeout');
}
const check = await processCheck();
const approvedCheck = await waitForCheckApproval(check.id);
console.log('Approved! Net amount:', approvedCheck.net_amount);Ensure check images are clear, well-lit, and at least 300 DPI for optimal processing accuracy.
Use webhooks instead of polling for status updates to reduce API calls and improve efficiency.
Implement exponential backoff when handling rate limit errors (429 status code).
Use idempotency keys to safely retry requests without risk of duplicate processing.
AML Guard - Complete Guide
Comprehensive AML compliance and monitoring integration
iDemand AML Guard provides enterprise-grade anti-money laundering monitoring, screening, and compliance automation powered by AI and machine learning.
const iDemand = require('@idemand/node-sdk');
const client = new iDemand.Client({
apiKey: process.env.IDEMAND_API_KEY,
environment: 'production'
});
async function screenTransaction() {
const result = await client.aml.screenTransaction({
transactionId: 'TXN' + Date.now(),
amount: 5000.00,
currency: 'USD',
sender: {
name: 'John Doe',
account: 'ACC789012',
country: 'US',
dateOfBirth: '1985-05-15'
},
recipient: {
name: 'Jane Smith',
account: 'ACC345678',
country: 'GB'
},
transactionType: 'wire_transfer'
});
console.log('Risk Level:', result.risk_level);
console.log('Risk Score:', result.risk_score);
console.log('Status:', result.status);
if (result.risk_level === 'high') {
console.log('⚠️ High risk transaction flagged!');
console.log('Flags:', result.flags);
}
return result;
}
screenTransaction();// Screen a customer at onboarding
async function screenNewCustomer(customerData) {
const screening = await client.aml.screenCustomer({
customerId: customerData.id,
fullName: customerData.fullName,
dateOfBirth: customerData.dob,
nationality: customerData.nationality,
address: {
street: customerData.street,
city: customerData.city,
state: customerData.state,
zip: customerData.zip,
country: customerData.country
},
identificationDocuments: [
{
type: 'passport',
number: customerData.passportNumber,
issuingCountry: customerData.passportCountry
}
]
});
// Evaluate screening results
if (screening.pep_match) {
console.log('⚠️ PEP match detected:', screening.pep_details);
}
if (screening.sanctions_match) {
console.log('🚨 SANCTIONS MATCH - DO NOT ONBOARD');
return { approved: false, reason: 'sanctions_list_match' };
}
if (screening.adverse_media_score > 70) {
console.log('⚠️ High adverse media score - manual review required');
return { approved: false, reason: 'manual_review_required' };
}
console.log('✅ Customer cleared for onboarding');
return { approved: true, screening_id: screening.id };
}
const result = await screenNewCustomer({
id: 'CUST123',
fullName: 'John Smith',
dob: '1980-01-15',
nationality: 'US',
street: '123 Main St',
city: 'New York',
state: 'NY',
zip: '10001',
country: 'US',
passportNumber: 'P123456789',
passportCountry: 'US'
});Always reject transactions with sanctions matches immediately. Never proceed with manual review for sanctions hits.
Implement tiered monitoring based on customer risk profiles. High-risk customers require enhanced due diligence.
Maintain comprehensive logs of all screenings, decisions, and actions taken for regulatory audits.
Watchlists are updated in real-time. Re-screen existing customers periodically (recommended: quarterly).
API Reference
Complete documentation for all endpoints
/v1/check-cashingSubmit a check image for processing and instant cash-out approval.
Request Body
{
"check_image": "base64_encoded_string",
"amount": 500.00,
"account_number": "ACC123456",
"customer_id": "CUST789",
"routing_number": "123456789"
}Response
{
"id": "chk_1A2B3C4D5E",
"status": "approved",
"amount": 500.00,
"fee": 15.00,
"net_amount": 485.00,
"processing_time": "2.3s",
"created_at": "2025-01-15T10:30:00Z"
}/v1/check-cashing/:idRetrieve the current status and details of a processed check.
curl https://api.idemand.com/v1/check-cashing/chk_1A2B3C4D5E \
-H "Authorization: Bearer YOUR_API_KEY"/v1/check-cashingList all check cashing transactions with filtering and pagination.
Query Parameters
limit - Number of results (default: 20)status - Filter by status (approved, pending, rejected)customer_id - Filter by customerdate_from - Start date (ISO 8601)date_to - End date (ISO 8601)Webhooks
Receive real-time notifications about events in your account
Real-time Events
Get instant notifications for all important events
Secure & Verified
HMAC signature verification for all webhook payloads
Auto Retry
Automatic retries with exponential backoff
1. Configure Webhook URL
Add your webhook endpoint URL in the developer dashboard. We'll send POST requests to this URL.
https://your-domain.com/webhooks/idemand2. Verify Webhook Signatures
Each webhook includes an HMAC signature in the X-iDemand-Signature header.
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
const digest = hmac.update(payload).digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(digest)
);
}3. Handle Webhook Events
app.post('/webhooks/idemand', (req, res) => {
const signature = req.headers['x-idemand-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhook(payload, signature, webhookSecret)) {
return res.status(401).send('Invalid signature');
}
const event = req.body;
switch(event.event) {
case 'check.processed':
handleCheckProcessed(event.data);
break;
case 'aml.alert':
handleAMLAlert(event.data);
break;
}
res.status(200).send('OK');
});Available Event Types
Fired when a check has been successfully processed
{
"event": "check.processed",
"data": {
"id": "chk_1A2B3C4D5E",
"status": "approved",
"amount": 500
}
}Fired when a check is rejected due to insufficient funds or fraud
{
"event": "check.rejected",
"data": {
"id": "chk_1A2B3C4D5E",
"reason": "insufficient_funds"
}
}Fired when a transaction triggers an AML alert
{
"event": "aml.alert",
"data": {
"id": "aml_9X8Y7Z6W5V",
"risk_level": "high",
"flags": [
"sanctions_match"
]
}
}Fired when a transaction passes all AML checks
{
"event": "aml.cleared",
"data": {
"id": "aml_9X8Y7Z6W5V",
"risk_score": 5
}
}Official SDKs
Libraries for your favorite programming language
JavaScript SDK
npm install @idemand/node-sdkPython SDK
pip install idemand-pythonRuby SDK
gem install idemandPHP SDK
composer require idemand/php-sdkJava SDK
Maven / Gradle availableGo SDK
go get github.com/idemand/go-sdk// Node.js Example
const iDemand = require('@idemand/node-sdk');
const client = new iDemand.Client({
apiKey: process.env.IDEMAND_API_KEY,
environment: 'production' // or 'sandbox'
});
// Process a check
const check = await client.checkCashing.create({
checkImage: fs.readFileSync('check.jpg', 'base64'),
amount: 500.00,
accountNumber: 'ACC123456'
});
console.log('Check Status:', check.status);
// Screen for AML
const amlResult = await client.aml.screenTransaction({
transactionId: 'TXN123456',
amount: 5000.00,
sender: { name: 'John Doe', account: 'ACC789' },
recipient: { name: 'Jane Smith', account: 'ACC456' }
});
console.log('Risk Level:', amlResult.risk_level);Sandbox Environment
Test your integration without processing real transactions
Everything you need for testing
Use these URLs for testing
https://sandbox-api.idemand.comsk_test_4eC39HqLy...Use these test values to simulate different scenarios in the sandbox environment.
Check Cashing Test Scenarios
amount: 100.00Simulates a successful check approval
amount: 999.99Simulates insufficient funds rejection
amount: 555.55Simulates manual review required
AML Monitoring Test Scenarios
sender.name: "John Doe"Clean transaction, no flags
sender.name: "Risk Test"Triggers sanctions match alert
amount: 10000.00+Large transaction monitoring
Ready to Start Testing?
Get your sandbox API keys and start building your integration today.