Connect everything. Replace nothing.
Catalog-based connector marketplace. Activate a provider, enter credentials, done. Swap anytime — no code changes, no downtime.
Provider catalog
Adding a new provider: one connector file + one seed entry. No migrations, no gateway changes. Activate from the CRM with a single API call.
| Provider | Category |
|---|---|
| zadarma | VoIP |
| voiso | VoIP |
| twilio_voice | VoIP |
| sendgrid | |
| gmail | |
| twilio_sms | SMS |
| praxis | Payment |
| bridgerpay | Payment |
| sumsub | KYC |
Payment routing
Per-country configuration. Brazil uses BridgerPay for deposits and Praxis for withdrawals. Germany uses Praxis for both. Unconfigured countries fall back to the default gateway.
Payment routing flow
// Configure: PUT /api/platform/payments/routing/BR
{
"deposit_gateway": "bridgerpay",
"withdrawal_gateway": "praxis",
"is_active": true,
"note": "Brazil uses BridgerPay for deposits"
}
// Resolve: GET /payments/gateway?country=BR&direction=deposit
{
"gateway": "bridgerpay",
"type": "embed",
"script_url": "https://embed.bridgerpay.com/connector.min.js",
"cashier_key": "..."
}KYC integration
SumSub connector with automatic webhook verification. Maps provider status to compliance gates. Triggers 5-gate re-evaluation on KYC approval.
- externalUserId = customer UUID for seamless mapping
- Document type and country captured from verification
- Provider-agnostic internal format for future connectors
- HMAC-verified webhook with x-payload-digest validation
POST /webhooks/kyc (internal format)
{
"customer_id": "uuid",
"provider": "sumsub",
"provider_id": "ext-ref-123",
"status": "approved",
"doc_type": "passport",
"doc_country": "US",
"raw_result": {}
}Communication channels
Provider-agnostic email, SMS, and call initiation. The platform provides the content — the integration service handles delivery. Delivery status tracked via inbound webhooks.
- SendGrid or Gmail for transactional email
- Twilio SMS for text messaging
- Zadarma, Voiso, or Twilio Voice for click-to-call
- Delivery webhook handlers per provider with status mapping
POST /api/platform/integrations/email/send
{
"to": "[email protected]",
"subject": "Welcome to trading",
"body_html": "<p>Hello John</p>",
"from_email": "[email protected]",
"customer_id": "uuid",
"event_type": "welcome"
}
// 200 OK
{"message_id": "...", "status": "sent", "provider": "sendgrid"}Affiliate & IB webhooks
HMAC-SHA256 signed webhook delivery to affiliate portals. FTD tracking with per-country minimum thresholds. Permanent post-FTD suppression.
- Batched delivery every 30 seconds with configurable max batch size
- Retry on failure with delivery attempt logging
- lead.ftd is the final webhook — all subsequent events permanently suppressed
- Delivery stats: success rate, avg latency, last failure reason
Outbound webhook payload
{
"event": "lead.ftd",
"batch_at": "2026-03-10T12:00:00Z",
"leads": [{
"affiliate_lead_id": "portal_lead_99871",
"amount": 500.00,
"currency": "USD",
"ftd_at": "2026-03-10T11:59:01Z"
}]
}
// Header: X-Webhook-Signature: sha256=...