Complete reference for the Fuddlink REST API. Send emails, manage templates, track events, and more.
https://api.fudd.linkAll API requests must include your API key in the Authorization header.
Authorization: YOUR_API_KEYSecurity: Never expose your API key in client-side code. Always make API calls from your server.
/v1/transmissionsCreate and send an email to recipients. Content limited to 20 MB.
{
"recipients": [
{
"address": {
"email": "john.doe@acme.com",
"name": "John Doe"
},
"tags": ["customer"],
"metadata": {
"age": "24",
"place": "Anytown"
},
"substitution_data": {
"customer_type": "Platinum",
"year": "Freshman"
}
}
],
"content": {
"from": {
"email": "deals@acme.com",
"name": "Acme"
},
"subject": "Big Black Friday savings!",
"text": "Hi {{address.name}}\nSave big this Black Friday in your area!",
"html": "<p>Hi {{address.name}}</p><p>Save big this Black Friday in your area!</p>",
"reply_to": "sales@acme.com",
"headers": {
"X-Customer-Campaign-ID": "black_friday_campaign"
}
},
"options": {
"open_tracking": true,
"click_tracking": true,
"transactional": false,
"perform_substitutions": true
},
"substitution_data": {
"sender": "Acme Team",
"holiday_name": "Black Friday"
}
}| Parameter | Type | Required | Description |
|---|---|---|---|
recipients | array | Yes | Array of recipient objects |
content | object | Yes | Email content (inline or RFC822) |
options | object | No | Transmission options for tracking and behavior |
substitution_data | object | No | Template variables for substitution |
num_rcpt_errors | integer | No | Max recipient errors to return |
{
"results": {
"total_rejected_recipients": 0,
"total_accepted_recipients": 1,
"id": "77b31e54-a73c-4c73-8ec3-c5b70a25e2cd",
"rcpt_to_errors": []
},
"errors": []
}curl -X POST https://api.fudd.link/v1/transmissions \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
{
"address": {
"email": "john.doe@acme.com",
"name": "John Doe"
}
}
],
"content": {
"from": "deals@acme.com",
"subject": "Welcome to Acme!",
"html": "<h1>Welcome {{address.name}}!</h1>",
"text": "Welcome {{address.name}}!"
}
}'Use inline content to specify email content directly in the API request.
{
"content": {
"from": {
"email": "deals@acme.com",
"name": "Acme"
},
"subject": "Big Black Friday savings!",
"text": "Hi {{address.name}}\nSave big this Black Friday!",
"html": "<p>Hi {{address.name}}</p><p>Save big this Black Friday!</p>",
"amp_html": "<amp-email>...</amp-email>",
"reply_to": "sales@acme.com",
"headers": {
"X-Custom-Header": "value"
},
"attachments": [
{
"name": "billing.pdf",
"type": "application/pdf",
"data": "V2VsY29tZSB0byBvdXIgZW1haWwgc2VydmljZSE="
}
],
"inline_images": [
{
"name": "logo.jpeg",
"type": "image/jpeg",
"data": "/9j/4AAQSkZJRgABAQEAYABgAAD..."
}
]
}
}Use RFC822 content to provide a pre-built email message.
{
"content": {
"email_rfc822": "Content-Type: text/plain\nTo: \"{{address.name}}\" <{{address.email}}>\n\nHi {{first_name}}\n\nSave big this Black Friday in your area {{place}}!\nClick http://www.acme.com and get huge discount.\nHurry, this offer is only for {{customer_type}}!\n\n{{sender}}"
}
}Configure tracking and transmission behavior with the options object.
| Option | Type | Default | Description |
|---|---|---|---|
open_tracking | boolean | true | Track email opens |
initial_open | boolean | true | Track initial opens only |
click_tracking | boolean | true | Track link clicks |
transactional | boolean | false | Mark as transactional email |
inline_css | boolean | false | Inline CSS in HTML |
perform_substitutions | boolean | true | Enable template substitution |
{
"options": {
"open_tracking": true,
"click_tracking": true,
"transactional": false,
"inline_css": false,
"perform_substitutions": true
}
}Use template variables to personalize emails. Variables can be set at transmission level and overridden per recipient.
These variables apply to all recipients unless overridden.
{
"substitution_data": {
"sender": "Acme Team",
"holiday_name": "Black Friday",
"company_name": "Acme Corp"
}
}Override transmission data for specific recipients.
{
"recipients": [
{
"address": {
"email": "john.doe@acme.com",
"name": "John Doe"
},
"substitution_data": {
"customer_type": "Platinum",
"year": "Freshman"
},
"metadata": {
"age": "24",
"place": "Anytown"
}
}
]
}Reference variables using double curly braces syntax.
{
"content": {
"subject": "Hi {{address.name}}, {{holiday_name}} deals await!",
"html": "<p>Hi {{address.name}},</p><p>Check out our {{holiday_name}} deals in {{place}}!</p><p>As a {{customer_type}} customer, you get exclusive access.</p>",
"text": "Hi {{address.name}},\n\nCheck out our {{holiday_name}} deals in {{place}}!\nAs a {{customer_type}} customer, you get exclusive access."
}
}The Fuddlink API uses conventional HTTP response codes to indicate success or failure.
| Code | Meaning | Description |
|---|---|---|
201 | Created | Transmission created successfully |
400 | Bad Request | Invalid request parameters |
401 | Unauthorized | Invalid or missing API key |
403 | Forbidden | Insufficient permissions |
404 | Not Found | Resource not found |
422 | Unprocessable Entity | Request validation failed |
429 | Too Many Requests | Rate limit exceeded |
500 | Internal Server Error | Server error occurred |
{
"errors": [
{
"message": "Unauthorized.",
"code": "2101",
"description": "Exceed Sending Limit (hourly)"
}
]
}2101 - Unauthorized API key2102 - API key suspended2103 - Rate limit exceeded1001 - Invalid email address1002 - Content too large1003 - Missing required fieldOur API is designed to be developer-friendly, but we're here if you need assistance.