Integrate Linkyfy into your applications with our REST API.
The Linkyfy API is a RESTful API that allows you to programmatically manage projects, campaigns, contacts, templates, and more. All endpoints return JSON responses.
https://mailer.linkyfy.ai/api/v1
All API requests (except public tracking endpoints) require authentication via the X-API-Key header. You can generate an API key from Settings → API Key in the Linkyfy dashboard.
curl -H "X-API-Key: your-api-key-here" \
https://mailer.linkyfy.ai/api/v1/projects
All successful responses follow this structure:
{
"success": true,
"data": { ... }
}
Error responses follow this structure:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description of the error."
}
}
| Code | HTTP Status | Description |
|---|---|---|
VALIDATION_ERROR | 422 | Request body failed validation. Check the message field for details. |
NOT_FOUND | 404 | The requested resource does not exist. |
UNAUTHORIZED | 401 | Missing or invalid API key. |
FORBIDDEN | 403 | You do not have permission to access this resource. |
QUOTA_EXCEEDED | 429 | You have exceeded your plan's sending quota. |
SUBSCRIPTION_EXPIRED | 402 | Your subscription has expired. Renew to continue. |
SERVER_ERROR | 500 | An internal error occurred. Contact support if it persists. |
API requests are rate-limited to 60 requests per minute per API key. Rate limit headers are included in every response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1712678400
429 Too Many Requests response. Wait until the reset timestamp before retrying.
Request body:
{
"name": "Acme Corp Outreach",
"company_name": "Acme Corporation",
"website_url": "https://acme.com",
"description": "Cold outreach campaign for enterprise SaaS leads",
"from_name": "John Smith",
"daily_allocation": 100,
"weekly_limit": 500
}
Response:
{
"success": true,
"data": {
"id": 42,
"name": "Acme Corp Outreach",
"company_name": "Acme Corporation",
"website_url": "https://acme.com",
"description": "Cold outreach campaign for enterprise SaaS leads",
"from_name": "John Smith",
"daily_allocation": 100,
"weekly_limit": 500,
"created_at": "2026-04-09T10:30:00Z",
"updated_at": "2026-04-09T10:30:00Z"
}
}
Returns a paginated list of all projects belonging to the authenticated user.
Query parameters: page (default 1), per_page (default 15, max 100)
Returns the full project object including settings, limits, and counts.
Update project fields. Only include the fields you want to change.
Returns all domains associated with the project, including DNS status and reputation score.
Returns all mailboxes associated with the project, including warmup status and daily limits.
Returns the list of blocked email addresses and domains for this project.
Request body:
{
"entries": ["competitor@example.com", "example.org"]
}
Request body:
{
"entries": ["competitor@example.com"]
}
Returns the JavaScript tracking snippet HTML for embedding on your website.
Returns website tracking data: impressions and registrations grouped by date.
Response:
{
"success": true,
"data": {
"total_impressions": 1243,
"total_registrations": 87,
"conversion_rate": 7.0,
"daily": [
{ "date": "2026-04-08", "impressions": 156, "registrations": 12 },
{ "date": "2026-04-07", "impressions": 203, "registrations": 15 }
]
}
}
Request body:
{
"project_id": 42,
"name": "Q2 Enterprise Outreach",
"daily_allocation": 50,
"contact_list_ids": [10, 15],
"email_mode": "ai_generated",
"ai_prompt": "Write a professional cold email introducing our SaaS analytics platform to enterprise CTOs. Keep it under 150 words.",
"follow_ups": [
{ "delay_days": 3, "mode": "ai_generated" },
{ "delay_days": 7, "mode": "ai_generated" }
],
"auto_reply_enabled": true,
"calendly_link": "https://calendly.com/john/30min",
"registration_link": "https://acme.com/signup"
}
Response:
{
"success": true,
"data": {
"id": 128,
"project_id": 42,
"name": "Q2 Enterprise Outreach",
"status": "enabled",
"daily_allocation": 50,
"email_mode": "ai_generated",
"auto_reply_enabled": true,
"total_recipients": 340,
"created_at": "2026-04-09T11:00:00Z",
"updated_at": "2026-04-09T11:00:00Z"
}
}
Returns paginated campaigns. Filter by project_id and status query parameters.
Returns the full campaign object including flow configuration and recipient count.
Update campaign fields. Only include the fields you want to change. Cannot update while campaign is actively sending.
Activates the campaign. Emails will begin sending according to the schedule.
Pauses the campaign. No new emails will be sent until re-enabled.
Response:
{
"success": true,
"data": {
"campaign_id": 128,
"campaign_name": "Q2 Enterprise Outreach",
"status": "enabled",
"total_recipients": 340,
"sent": 210,
"delivered": 205,
"opened": 98,
"replied": 23,
"bounced": 5,
"spam": 2,
"open_rate": 47.8,
"reply_rate": 11.2,
"bounce_rate": 2.4,
"daily_breakdown": [
{ "date": "2026-04-09", "sent": 50, "opened": 22, "replied": 5 },
{ "date": "2026-04-08", "sent": 50, "opened": 28, "replied": 7 }
]
}
}
Returns paginated list of recipients with their individual send/open/reply status.
Request body:
{
"contact_list_ids": [22, 33]
}
Request body:
{
"name": "Enterprise CTOs",
"contacts": [
{
"email": "jane@example.com",
"first_name": "Jane",
"last_name": "Doe",
"company": "TechCorp",
"position": "CTO"
},
{
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Wilson",
"company": "DataInc",
"position": "VP Engineering"
}
]
}
Response:
{
"success": true,
"data": {
"id": 10,
"name": "Enterprise CTOs",
"contact_count": 2,
"created_at": "2026-04-09T12:00:00Z"
}
}
Returns a paginated list of all contact lists with contact counts.
Returns the contact list metadata and a paginated list of its contacts.
Update the contact list name or other metadata.
Permanently deletes the contact list and all its contacts. Cannot be undone.
Add one or more contacts to an existing list. Duplicate emails are skipped.
Update individual contact fields.
Remove a contact from the list.
Returns all domains across all projects with DNS status, reputation score, and project association.
Returns full domain information including DNS records, reputation history, and associated mailboxes.
Returns all mailboxes with warmup status, current daily limit, and domain association.
Returns full mailbox information including warmup schedule, sending history, and reputation data.
Request body:
{
"name": "Cold intro - SaaS",
"subject": "Quick question, {{first_name}}",
"body": "Hi {{first_name}},\n\nI noticed {{company}} is scaling fast..."
}
Returns all templates. Filter with archived=true to include archived templates.
Returns the full template with subject, body, and metadata.
Update template name, subject, or body.
Permanently deletes the template.
Moves the template to the archive. Archived templates are hidden from the default list.
Restores an archived template to the active list.
Returns paginated conversation threads. Filter by project_id, campaign_id, or tag.
Returns all messages in a thread in chronological order.
Request body:
{
"body": "Thanks for your interest! Let me schedule a call..."
}
Request body:
{
"tag": "hot-lead"
}
Cancels the next scheduled auto-reply for this thread.
Request body:
{
"body": "Updated auto-reply content here..."
}
Returns the authenticated user's profile, work schedule, timezone, and preferences.
Update profile, work schedule, or forwarding email. Only include fields you want to change.
Generates a new API key and invalidates the current one. The new key is returned in the response.
Returns the user's current plan type, usage, and billing cycle information.
Request body:
{
"plan_type": "full_service"
}
Plan types: full_service, own_smtp
Returns paginated list of past payments with invoice details.
Returns paginated notifications. Filter with unread=true to show only unread.
Marks a single notification as read.
Marks all unread notifications as read.
Request body:
{
"project_id": 42,
"visitor_id": "abc123-unique-visitor-id",
"page_url": "https://acme.com/pricing",
"referrer": "https://google.com"
}
Request body:
{
"project_id": 42,
"visitor_id": "abc123-unique-visitor-id",
"email": "newuser@example.com"
}
Request body:
{
"smtp_host": "smtp.yourdomain.com",
"smtp_port": 465,
"smtp_encryption": "ssl",
"smtp_username": "sender@yourdomain.com",
"smtp_password": "your-password",
"imap_host": "imap.yourdomain.com",
"imap_port": 993,
"imap_encryption": "ssl",
"from_name": "John Smith",
"from_email": "sender@yourdomain.com",
"is_reply_mailbox": false
}
Returns all SMTP/IMAP configurations for the project. Passwords are masked.
Update SMTP/IMAP settings. Only include fields you want to change.
Removes an SMTP configuration. Cannot remove the last configuration or the reply mailbox while campaigns are active.
Need help with the API? Contact our support team or see the User Manual.