Installation
npm install @sendlyapp/sdk
yarn add @sendlyapp/sdk
pnpm add @sendlyapp/sdk
Setup
Import and Initialize
import { Sendly } from '@sendlyapp/sdk'
// Initialize with API key
const client = new Sendly('se_your_api_key')
// Or use environment variable
const client = new Sendly()
Environment Variables
Create a.env file:
SENDLY_API_KEY=se_your_api_key
Basic Usage
Send an Email
const response = await client.emails.send({
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Welcome!',
html: '<h1>Hello!</h1><p>Thanks for signing up.</p>'
})
console.log('Email sent:', response.id)
List Emails
const response = await client.emails.list({
limit: 20,
sortOrder: 'desc'
})
response.data.forEach(email => {
console.log(`${email.to} - ${email.status}`)
})
Get Email Details
const email = await client.emails.get('email_123')
console.log(`Status: ${email.status}`)
console.log(`Opened: ${email.opened_at ? 'Yes' : 'No'}`)
Error Handling
import { SendlyError } from '@sendlyapp/sdk'
try {
await client.emails.send({
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Test',
html: '<p>Content</p>'
})
} catch (error) {
if (error instanceof SendlyError) {
console.error(`Error ${error.status}: ${error.message}`)
}
}
Advanced Examples
With Tracking
const response = await client.emails.send({
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Newsletter',
html: '<h1>Newsletter</h1><p>Content...</p>',
tracking: {
open: true,
click: true
}
})
With Attachments
import fs from 'fs'
const pdfContent = fs.readFileSync('document.pdf')
const base64 = pdfContent.toString('base64')
await client.emails.send({
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: 'Your Document',
html: '<p>See attached document</p>',
attachments: [
{
filename: 'document.pdf',
content: base64,
content_type: 'application/pdf'
}
]
})
Bulk Send with Retry
async function sendBulkWithRetry(recipients, template) {
for (const recipient of recipients) {
try {
await client.emails.send({
from: template.from,
to: recipient.email,
subject: template.subject,
html: template.html,
idempotencyKey: `${recipient.id}-${Date.now()}`
})
} catch (error) {
console.error(`Failed to send to ${recipient.email}:`, error)
}
}
}
Resources
Need help? Contact support@usesendly.app