CeramicCRM Docs

Channels

Create and configure email channels with provider settings, sender identity, and rate limits.

Channels

Channels are the delivery infrastructure for your emails. Each channel connects CeramicCRM to an email provider (Amazon SES, SMTP, or MTA-API) and defines the sender identity, rate limits, and tracking settings.

Creating a Channel

  1. Log in to CeramicCRM
  2. Navigate to Channels in the left sidebar
  3. Click Create Channel
  4. Fill in the configuration sections described below
  5. Click Create
  6. Click Activate to enable the channel for sending

Channel Configuration

Basic Information

FieldRequiredDescription
NameYesA descriptive name for the channel (e.g., "Production Marketing Email")
DescriptionNoInternal notes about the channel's purpose
Channel TypeYesCurrently only Email is supported
Use CaseYesMarketing (campaigns), Transactional (system emails), or OTP (one-time passwords)

Provider Configuration

Select your email provider and enter the credentials. Each provider requires different fields.

Amazon SES

The recommended provider for production use. See Amazon SES Setup for the full setup tutorial including IAM user creation and domain verification.

FieldRequiredDescription
AWS RegionYesThe AWS region where your domain is verified (e.g., eu-north-1, us-east-1)
Access Key IDYesIAM user access key with ses:SendEmail permission
Secret Access KeyYesIAM user secret key (encrypted at rest with AES-256-GCM)
Configuration SetNoSES Configuration Set name for bounce/delivery tracking

Provider Config JSON (for API usage):

{
  "region": "eu-north-1",
  "access_key_id": "AKIA...",
  "secret_access_key": "wJalr...",
  "configuration_set_name": "ceramiccrm-tracking"
}

SMTP

Connect to any standard SMTP server (Mailgun, SendGrid, Postmark, your own mail server, etc.).

FieldRequiredDescription
HostYesSMTP server hostname (e.g., smtp.mailgun.org, smtp.sendgrid.net)
PortYesSMTP port: 587 (STARTTLS), 465 (TLS), or 25 (unencrypted)
UsernameYesSMTP authentication username
PasswordYesSMTP authentication password (encrypted at rest)
TLSNoEnable direct TLS connection (port 465)
StartTLSNoEnable STARTTLS upgrade (port 587, recommended)
Auth MethodNoAuthentication method: PLAIN (default), LOGIN, or CRAM-MD5

Provider Config JSON (for API usage):

{
  "host": "smtp.mailgun.org",
  "port": 587,
  "username": "postmaster@yourdomain.com",
  "password": "your-smtp-password",
  "start_tls": true,
  "auth_method": "PLAIN"
}

MTA-API

Connect to an HTTP-based mail transfer agent API.

FieldRequiredDescription
Base URLYesThe MTA API endpoint (e.g., https://mta.yourdomain.com)
API TokenYesAuthentication token for the MTA API (encrypted at rest)

Provider Config JSON (for API usage):

{
  "base_url": "https://mta.yourdomain.com",
  "api_token": "your-api-token"
}

Sender Configuration

These fields define the sender identity that recipients see.

FieldRequiredDescription
From EmailYesThe sender email address (e.g., noreply@yourdomain.com). Must use a verified domain.
From NameYesThe display name recipients see (e.g., CeramicCRM, Your Company)
Reply-To EmailNoWhere replies go. If empty, replies go to the From Email address.
Sending DomainNoYour verified sending domain (e.g., yourdomain.com). Used for DNS verification and domain authentication.

Throttling (Rate Limits)

Control how fast emails are sent through this channel. This prevents overwhelming your email provider and helps maintain sender reputation.

FieldDefaultMaxDescription
Messages Per Second5010,000Maximum emails sent per second. This is the primary rate control — enforced during campaign execution.
Messages Per Hour100,00010,000,000Hourly sending cap.
Daily Limit1,000,00010,000,000Maximum emails per day.
Burst Size10010,000Maximum burst of emails in a short window.

Note: Currently, only Messages Per Second is fully enforced during campaign execution via the token bucket rate limiter. Messages Per Hour, Daily Limit, and Burst Size are stored and validated but not yet enforced as sliding windows. Full enforcement is planned for a future release.

Tracking Settings

FieldDefaultDescription
Track OpensOffInsert a tracking pixel to detect when recipients open the email
Track ClicksOffWrap links with tracking URLs to detect clicks
Custom Tracking DomainUse your own domain for tracking links (e.g., track.yourdomain.com) instead of the default

Fallback Channel

FieldDescription
Enable FallbackWhen enabled, if this channel fails to send, the message is retried through the fallback channel
Fallback ChannelSelect another active channel to use as fallback

Channel Lifecycle

Status Management

Channels go through these statuses:

StatusDescription
SetupNewly created, not yet activated
ActiveReady to send emails
InactiveManually deactivated, cannot send
  • Activate: Changes status from Setup → Active or Inactive → Active
  • Deactivate: Changes status from Active → Inactive

Only Active channels can send emails. Campaigns will fail if their assigned channel is not active.

DNS Verification

When you set a Sending Domain, CeramicCRM checks several DNS records:

RecordPurpose
CERAMICTXTCeramicCRM's own domain ownership verification. Add a TXT record at _ceramic.yourdomain.com with the value shown in the DNS Authentication panel.
SPFSender Policy Framework — authorizes your email provider to send on behalf of your domain
DKIMDomainKeys Identified Mail — cryptographic signature proving email authenticity
DMARCDomain-based Message Authentication — policy for handling failed SPF/DKIM checks

Click Verify on the channel detail page to check all DNS records. See the in-app instructions panel for the exact records to add.

Health Check

Click Health Check on the channel detail page to verify provider connectivity. The health check shows:

  • Provider status — green checkmark if healthy, red X if unreachable
  • Sending quota — daily limit, sent today, and remaining (for SES)
  • Latency — response time to the provider in milliseconds
  • Circuit breaker state — whether the provider failover circuit is open or closed

You can also check health via the API:

curl http://localhost:8080/api/v1/channels/{id}/health \
  -H "Authorization: Bearer <accessToken>" \
  -H "X-Workspace-ID: 1"

Creating a Channel via API

You can also create channels programmatically:

curl -X POST http://localhost:8080/api/v1/channels \
  -H "Authorization: Bearer <accessToken>" \
  -H "X-Workspace-ID: 1" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Email",
    "channelType": "email",
    "providerType": "ses",
    "useCaseType": "marketing",
    "providerConfig": {
      "region": "eu-north-1",
      "access_key_id": "AKIA...",
      "secret_access_key": "..."
    },
    "fromEmail": "noreply@yourdomain.com",
    "fromName": "Your Company",
    "replyToEmail": "support@yourdomain.com",
    "sendingDomain": "yourdomain.com",
    "messagesPerSecond": 50,
    "trackOpens": true,
    "trackClicks": true
  }'

After creation, activate the channel:

curl -X POST http://localhost:8080/api/v1/channels/{id}/activate \
  -H "Authorization: Bearer <accessToken>" \
  -H "X-Workspace-ID: 1"

Security

  • Provider credentials are encrypted at rest using AES-256-GCM with key rotation support
  • Credentials are never returned in API responses — the providerConfig field is excluded from all GET endpoints
  • SSRF protection prevents using private/internal IP addresses in provider URLs

On this page