iDemand Developer Portal
API Documentation & SDKs
Production-Ready APIs

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.

RESTful APIs with comprehensive documentation
Real-time webhooks for instant notifications
Sandbox environment for testing
example.js
// 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.

1
Get API Keys

Sign up and generate your API keys from the dashboard.

0 active keys
2
Install SDK

Install our official SDK for your preferred language.

$ npm install @idemand/sdk
3
Make First Request

Run a live test request against the sandbox and inspect the real response.

4
Go Live

Test in sandbox, then switch to production with a single config change.

Environment
sandbox
Your First API Call
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

Overview

The Check Avenue API enables instant check cashing with AI-powered fraud detection. Process checks in under 3 minutes with industry-leading accuracy.

< 3min
Average Processing Time
99.8%
Fraud Detection Rate
24/7
API Availability
Basic Implementation
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();
Advanced Use Cases
// 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);
Best Practices
Image Quality

Ensure check images are clear, well-lit, and at least 300 DPI for optimal processing accuracy.

Webhook Integration

Use webhooks instead of polling for status updates to reduce API calls and improve efficiency.

Rate Limiting

Implement exponential backoff when handling rate limit errors (429 status code).

Idempotency

Use idempotency keys to safely retry requests without risk of duplicate processing.

AML Guard - Complete Guide

Comprehensive AML compliance and monitoring integration

Overview

iDemand AML Guard provides enterprise-grade anti-money laundering monitoring, screening, and compliance automation powered by AI and machine learning.

99.8%
Detection Accuracy
<100ms
Screening Speed
0.3%
False Positives
24/7
Real-time Monitoring
Transaction Screening
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();
Advanced Features
// 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'
});
Compliance Best Practices
Zero Tolerance for Sanctions Matches

Always reject transactions with sanctions matches immediately. Never proceed with manual review for sanctions hits.

Risk-Based Approach

Implement tiered monitoring based on customer risk profiles. High-risk customers require enhanced due diligence.

Audit Trail

Maintain comprehensive logs of all screenings, decisions, and actions taken for regulatory audits.

Regular Updates

Watchlists are updated in real-time. Re-screen existing customers periodically (recommended: quarterly).

API Reference

Complete documentation for all endpoints

Process Check
POST
/v1/check-cashing

Submit 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"
}
Get Check Status
GET
/v1/check-cashing/:id

Retrieve 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"
List All Checks
GET
/v1/check-cashing

List 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 customer
date_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

Setting Up Webhooks

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/idemand

2. 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

check.processed

Fired when a check has been successfully processed

{
  "event": "check.processed",
  "data": {
    "id": "chk_1A2B3C4D5E",
    "status": "approved",
    "amount": 500
  }
}
check.rejected

Fired when a check is rejected due to insufficient funds or fraud

{
  "event": "check.rejected",
  "data": {
    "id": "chk_1A2B3C4D5E",
    "reason": "insufficient_funds"
  }
}
aml.alert

Fired when a transaction triggers an AML alert

{
  "event": "aml.alert",
  "data": {
    "id": "aml_9X8Y7Z6W5V",
    "risk_level": "high",
    "flags": [
      "sanctions_match"
    ]
  }
}
aml.cleared

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

🟢
v2.1.0
Node.js

JavaScript SDK

npm install @idemand/node-sdk
Full TypeScript support
Async/await patterns
Automatic retries
🐍
v2.1.0
Python

Python SDK

pip install idemand-python
Type hints included
Async support (asyncio)
Pandas integration
💎
v2.0.1
Ruby

Ruby SDK

gem install idemand
Rails integration
Active Record support
Idiomatic Ruby patterns
🐘
v2.0.0
PHP

PHP SDK

composer require idemand/php-sdk
PSR-4 autoloading
Laravel integration
PHP 7.4+ support
v2.1.0
Java

Java SDK

Maven / Gradle available
Java 8+ compatible
Spring Boot integration
Reactive programming support
🔵
v1.5.0
Go

Go SDK

go get github.com/idemand/go-sdk
Idiomatic Go code
Context support
Goroutine-safe
SDK Example Usage
// 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

Sandbox Features

Everything you need for testing

Unlimited API calls
Simulated responses
Test webhooks
No real money involved
API Endpoints

Use these URLs for testing

Base URL
https://sandbox-api.idemand.com
Test API Key
sk_test_4eC39HqLy...
Test Data & Scenarios

Use these test values to simulate different scenarios in the sandbox environment.

Check Cashing Test Scenarios

amount: 100.00
Approved

Simulates a successful check approval

amount: 999.99
Rejected

Simulates insufficient funds rejection

amount: 555.55
Pending Review

Simulates manual review required

AML Monitoring Test Scenarios

sender.name: "John Doe"
Low Risk (Score: 5)

Clean transaction, no flags

sender.name: "Risk Test"
High Risk (Score: 85)

Triggers sanctions match alert

amount: 10000.00+
Medium Risk (Score: 45)

Large transaction monitoring

Ready to Start Testing?

Get your sandbox API keys and start building your integration today.