필요 권한: campaigns
GET
/api/v1/campaigns
캠페인 목록을 조회합니다.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
status |
string | draft, scheduled, sending, sent |
limit |
integer | 결과 수 (기본: 20) |
offset |
integer | 페이지네이션 오프셋 |
Response
{
"success": true,
"data": {
"campaigns": [
{
"id": "campaign-uuid-123",
"name": "January Newsletter",
"subject": "New Year Updates",
"status": "sent",
"stats": {
"sent": 1000,
"opened": 350,
"clicked": 120
},
"sent_at": "2026-01-01T10:00:00Z"
}
],
"total": 50
}
}
POST
/api/v1/campaigns
새 캠페인을 생성합니다.
Request Body
{
"name": "January Newsletter",
"subject": "New Year Updates from MailPass",
"list_id": "list-uuid-123",
"content": "<html>...</html>",
"from_email": "newsletter@example.com", // optional
"from_name": "MailPass Team", // optional
"reply_to": "support@example.com", // optional
"scheduled_at": "2026-01-15T09:00:00Z" // optional
}
Response
{
"success": true,
"data": {
"id": "campaign-uuid-456",
"name": "January Newsletter",
"status": "draft",
"created_at": "2026-01-10T12:00:00Z"
}
}
GET
/api/v1/campaigns/{id}
캠페인 상세 정보를 조회합니다.
Response
{
"success": true,
"data": {
"id": "campaign-uuid-123",
"name": "January Newsletter",
"subject": "New Year Updates",
"status": "sent",
"content": "<html>...</html>",
"stats": {
"total_sent": 1000,
"total_delivered": 985,
"total_opened": 350,
"unique_opens": 320,
"total_clicked": 150,
"unique_clicks": 120,
"total_bounced": 15,
"total_unsubscribed": 5,
"open_rate": 32.49,
"click_rate": 37.5
},
"sent_at": "2026-01-01T10:00:00Z",
"completed_at": "2026-01-01T10:15:00Z"
}
}
POST
/api/v1/campaigns/{id}/send
캠페인을 즉시 발송합니다.
Response
{
"success": true,
"data": {
"id": "campaign-uuid-123",
"status": "sending",
"started_at": "2026-01-10T12:00:00Z"
}
}
GET
/api/v1/campaigns/{id}/stats
캠페인 통계를 조회합니다.
Response
{
"success": true,
"data": {
"campaign_id": "campaign-uuid-123",
"total_sent": 1000,
"total_delivered": 985,
"total_opened": 350,
"unique_opens": 320,
"total_clicked": 150,
"unique_clicks": 120,
"total_bounced": 15,
"total_unsubscribed": 5,
"open_rate": 32.49,
"click_rate": 37.5,
"top_links": [
{"url": "https://example.com/offer", "clicks": 80},
{"url": "https://example.com/blog", "clicks": 45}
]
}
}