Skip to main content

API Key Permissions

Control what each API key can access with granular permissions.

Permission Types

Email Permissions

PermissionDescription
emails:sendSend emails
emails:readRead email details and status
emails:listList emails
emails:deleteCancel scheduled emails

Domain Permissions

PermissionDescription
domains:createAdd new domains
domains:readView domain details
domains:updateModify domain settings
domains:deleteRemove domains

API Key Permissions

PermissionDescription
api-keys:createCreate new API keys
api-keys:readView API key details
api-keys:deleteRevoke API keys

Webhook Permissions

PermissionDescription
webhooks:createCreate webhooks
webhooks:readView webhook details
webhooks:updateModify webhooks
webhooks:deleteRemove webhooks

Analytics Permissions

PermissionDescription
analytics:readView analytics and reports

Creating Restricted Keys

// Send-only key for your application
const sendOnlyKey = await lettr.apiKeys.create({
  name: 'App Send Only',
  permissions: ['emails:send']
});

// Read-only key for analytics dashboard
const analyticsKey = await lettr.apiKeys.create({
  name: 'Analytics Dashboard',
  permissions: ['emails:read', 'emails:list', 'analytics:read']
});

// Full access for admin operations
const adminKey = await lettr.apiKeys.create({
  name: 'Admin Key',
  permissions: ['*'] // All permissions
});

Permission Shortcuts

ShortcutExpands To
*All permissions
emails:*All email permissions
domains:*All domain permissions

Domain Restrictions

Limit keys to specific domains:
const key = await lettr.apiKeys.create({
  name: 'Marketing Only',
  permissions: ['emails:send'],
  domainRestrictions: ['marketing.example.com']
});

// This key can only send from marketing.example.com

IP Restrictions

Restrict keys to specific IP addresses:
const key = await lettr.apiKeys.create({
  name: 'Production Server',
  permissions: ['emails:send', 'emails:read'],
  ipRestrictions: [
    '203.0.113.50',      // Single IP
    '198.51.100.0/24'    // CIDR range
  ]
});

Rate Limits per Key

Set custom rate limits:
const key = await lettr.apiKeys.create({
  name: 'Limited Key',
  permissions: ['emails:send'],
  rateLimit: {
    requests: 100,
    period: 'minute'
  }
});

Viewing Key Permissions

const key = await lettr.apiKeys.get('key_123');

console.log({
  permissions: key.permissions,
  domainRestrictions: key.domainRestrictions,
  ipRestrictions: key.ipRestrictions,
  rateLimit: key.rateLimit
});

Permission Errors

When a key lacks required permissions:
{
  "error": {
    "code": "forbidden",
    "message": "API key lacks required permission: emails:send"
  }
}