Seamless Integration

Your Users, Our Infrastructure
Perfectly Synced

Connect your existing users to Sendmator in seconds. Use your own user IDs (external_id) to manage preferences, send notifications, and control communication—all without rebuilding your user system.

Why Most Notification Systems Are Hard to Integrate

Complex Migrations

Import all users upfront. Maintain sync. Handle updates. Write custom migration scripts. Hope nothing breaks.

Duplicate Data

Manage users in TWO places. Risk data inconsistency. Update everywhere when email changes. Nightmare.

Sync Headaches

Real-time updates. Webhooks. Background jobs. Failed syncs. Out-of-sync data. Hours of debugging.

The Sendmator Solution

Use your existing user IDs. No migrations. No sync jobs. No headaches.

Your System

user.id: "user_123"
user.email: "john@example.com"
user.name: "John Doe"
user.phone: "+1234567890"
external_id bridge

Sendmator

external_id: "user_123"
email: "john@example.com"
name: "John Doe"
preferences (managed)

The Magic: Use YOUR user ID everywhere. We handle the rest.

3 Steps to Full Integration

1

Create Contact

Use YOUR user ID as external_id:

await sendmator.contacts.create({ external_id: "user_123", email: "john@example.com", name: "John Doe" });

No new IDs to manage

2

Send Messages

Send using YOUR user ID:

await sendmator.messages.send({ contact_external_id: "user_123", template: "welcome-email" });

Direct access, no lookups

3

Manage Preferences

Get preferences with YOUR ID:

const prefs = await sendmator.contacts .getPreferencesByExternalId( "user_123" );

Instant access

The external_id Advantage

Without external_id With external_id (Sendmator)
Import all users upfront Create contacts on-demand
Maintain ID mapping table Use your existing IDs
Look up Sendmator ID first Direct access with your ID
Complex sync logic No sync needed
Background jobs for updates Update on-demand
Duplicate user data Single source of truth

See It In Action

Real-world example: E-commerce order confirmation

Your System

When user places an order:

// Your order processing const order = { user_id: "user_123", order_id: "ORD-456", total: "$99.99", items: [...] }; // Save to your database await db.orders.create(order);

Sendmator Integration

Send confirmation immediately:

// Send order confirmation await sendmator.messages.send({ contact_external_id: order.user_id, template: "order-confirmation", variables: { order_id: order.order_id, total: order.total } });
No user sync required. No ID lookup. Just works.

Notification Preferences: An Extension of Your User Model

Think of Sendmator as extra columns in your users table—but managed for you.

Your Database

users.id
users.email
users.name
users.plan ← YOUR data
users.last_login ← YOUR data

Sendmator (via API)

contact.external_id (= users.id)
contact.email
contact.name
preferences.email.promotional ← SENDMATOR
preferences.sms.transactional ← SENDMATOR

Users Control Preferences

Built-in preference center. Users manage their own settings.

GDPR Compliant

Privacy-first. Per-channel, per-category control.

Access Via Your ID

Get preferences using your user_id. No lookups.

Common Integration Patterns

1

Just-in-Time Contact Creation

Create contacts automatically when sending the first message. No upfront bulk import needed.

// Contact created automatically if doesn't exist await sendmator.messages.send({ recipient_type: "contact", contact_external_id: "user_123", email: user.email, // Used if contact doesn't exist name: user.name, template: "welcome" });
2

User Registration Hook

Sync users to Sendmator as they sign up. Keep your systems aligned from day one.

// On user signup app.post('/signup', async (req, res) => { // Create user in YOUR database const user = await db.users.create(req.body); // Sync to Sendmator (async, don't block signup) sendmator.contacts.create({ external_id: user.id, email: user.email, name: user.name }).catch(err => logger.error(err)); res.json({ success: true }); });
3

Bulk Sync Existing Users

Migrate your existing user base in one go. Perfect for getting started quickly.

// One-time migration script const users = await db.users.findAll({ limit: 10000 }); await sendmator.contacts.bulkCreate( users.map(user => ({ external_id: user.id, email: user.email, name: user.name, phone: user.phone })) ); console.log(`Synced ${users.length} users`);

Why This Integration Model Works

No ID Mapping

Use your IDs directly. No mapping tables. No translation layer.

No Sync Jobs

Update on-demand. No cron jobs. No queue workers. No delays.

No Duplicates

Single source of truth. external_id is unique. No data conflicts.

Instant Access

No lookups. No queries. Direct access with your user ID.

Future-Proof

Your IDs never change. Integration stays stable forever.

Simple Code

3-line integration. Copy-paste examples. Works immediately.

Frequently Asked Questions

What happens if I change a user's email in my system?

Simply call sendmator.contacts.updateByExternalId(user_id, { email: newEmail }) when you update the email. Or update it lazily on the next message send.

Can I use UUIDs, integers, or strings as external_id?

Yes! Use any string up to 255 characters. UUIDs, integers, custom formats—all work. Just convert to string: external_id: user.id.toString()

What if two users have the same email but different external_ids?

That's fine! external_id is the unique key, not email. Perfect for shared family accounts or business email addresses used by multiple users.

How do I handle deleted users?

Call sendmator.contacts.deleteByExternalId(user_id) when a user deletes their account. GDPR compliant. Data removed permanently.

Can I migrate from another email provider?

Absolutely! Use pattern #3 (Bulk Sync) to import your users. Then switch your sending code to Sendmator. Old user data stays in your system, preferences managed by us.

Do I need to store Sendmator's contact ID?

No! That's the whole point. You never need to know or store Sendmator's internal contact ID. Use your external_id everywhere.

Start Integrating in 5 Minutes

No complex setup. No data migrations. Just clean, simple code.

Complete Integration Example

// 1. Install SDK npm install @sendmator/sdk // 2. Initialize const sendmator = require('@sendmator/sdk'); const client = sendmator.init({ apiKey: process.env.SENDMATOR_API_KEY }); // 3. Create contact with YOUR user ID await client.contacts.create({ external_id: user.id, email: user.email, name: user.name }); // 4. Send message using YOUR user ID await client.messages.send({ contact_external_id: user.id, template: "welcome" }); // Done! 🎉

Learn More

User Preferences

Built-in preference center

API Documentation

Complete API reference

Contact Management

Full contact API guide

Getting Started

Quick start guide