Ratel Security is an enterprise-grade Anti-Money Laundering (AML) and Combating the Financing of Terrorism (CFT) platform built for African financial institutions. Our API enables you to screen every transaction through a 6-layer compliance pipeline in under 200ms.This guide covers everything you need to integrate Ratel Security into your backend systems:
All API requests require an X-API-Key header. Generate your API key from the Admin → API Keys page of your Ratel Dashboard.
X-API-Key: rk_live_a1b2c3d4e5f6g7h8i9j0
Keep your API key secret. Your key carries full screening privileges for your workspace. Never expose it in client-side code (mobile apps, browser JavaScript). All API calls must originate from your backend servers.
Idempotency: If you send the same externalId twice, the API returns the previously cached verdict without re-screening. Use this to safely retry failed requests.
Score Floor Guarantee:Final Score = MAX(weighted_average, max_engine_score × 0.8)This prevents a critical match (e.g., Sanctions hit scoring 95) from being diluted by clean engines. The highest-severity outcome from any engine becomes the final decision.
Webhook delivery is backed by a persistent message queue with automatic retries:
Property
Value
Max Attempts
5
Backoff Strategy
Exponential (5s → 10s → 20s → 40s → 80s)
Request Timeout
10 seconds per attempt
Completed Job Retention
24 hours
Failed Job Retention
7 days
Your endpoint must return a 2xx status code. Any non-2xx response will trigger automatic retries. If all 5 attempts fail, the event is retained in the dead-letter queue for 7 days.
Every webhook includes an X-Ratel-Signature header — an HMAC-SHA256 hash of the raw JSON body, signed with your Webhook Secret. Always verify this server-side.
const crypto = require('crypto');app.post('/ratel/webhooks', express.raw({ type: 'application/json' }), (req, res) => { const signature = req.headers['x-ratel-signature']; const hash = crypto .createHmac('sha256', process.env.RATEL_WEBHOOK_SECRET) .update(req.body) .digest('hex'); if (`sha256=${hash}` !== signature) { return res.status(401).send('Invalid signature'); } const event = JSON.parse(req.body); if (event.event === 'case.resolved') { if (event.data.status === 'RESOLVED_FALSE_POSITIVE') { // Unfreeze the transaction in your system } else if (event.data.status === 'RESOLVED_TRUE_POSITIVE') { // Permanently block and escalate } } res.status(200).send('OK');});
Standard HTTP status codes indicate success or failure:
Code
Meaning
Solution
200
Success
Request processed successfully.
400
Bad Request
Check validation errors in the response body. Ensure all required fields are present.
401
Unauthorized
Your X-API-Key is missing, invalid, or revoked. Check the API Keys page in your Dashboard.
409
Conflict
The externalId was already processed. The cached verdict is returned.
429
Too Many Requests
You exceeded your workspace’s rate limit. Implement exponential backoff.
500
Internal Server Error
Unexpected server error. Retry with backoff.
Fail-Open Policy: If the Sanctions or Behavioral engines experience upstream downtime, Ratel Security implements a fail-open policy — your legitimate transactions continue processing without interruption, while partial screenings are logged for retroactive review.
Ratel Security — Enterprise-grade AML/CFT compliance for African financial institutions. For support, contact support@ratelsecurity.com.