Documentation

Everything you need to integrate Fuddlink into your application and start sending emails reliably.

Quick Start

1. Get Your API Key

Sign up for a Fuddlink account and retrieve your API key from the dashboard.

Create Account

2. Send Your First Email

Use our REST API to send your first transmission in seconds.

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": "Hello from Fuddlink!",
      "html": "<h1>Welcome to Fuddlink</h1>"
    }
  }'

Authentication

Fuddlink uses API keys for authentication. Include your API key in the Authorization header:

Authorization: YOUR_API_KEY

Security Note: Keep your API keys secret and never expose them in client-side code.

Transmissions

Transmissions are the core way to send emails through Fuddlink. Create and send emails to one or more recipients with customizable content and tracking options.

Basic Transmission

POST /v1/transmissions
{
  "recipients": [
    {
      "address": {
        "email": "john.doe@acme.com",
        "name": "John Doe"
      }
    }
  ],
  "content": {
    "from": "deals@acme.com",
    "subject": "Your Subject",
    "html": "<p>Your HTML content</p>",
    "text": "Your plain text content"
  }
}

Transmission with Attachments

POST /v1/transmissions
{
  "recipients": [
    {
      "address": {
        "email": "john.doe@acme.com",
        "name": "John Doe"
      }
    }
  ],
  "content": {
    "from": {
      "email": "deals@acme.com",
      "name": "Acme"
    },
    "subject": "Invoice #123",
    "html": "<p>Please find your invoice attached.</p>",
    "attachments": [
      {
        "name": "billing.pdf",
        "type": "application/pdf",
        "data": "V2VsY29tZSB0byBvdXIgZW1haWwgc2VydmljZSE="
      }
    ]
  }
}

Multiple Recipients with Personalization

POST /v1/transmissions
{
  "recipients": [
    {
      "address": {
        "email": "john.doe@acme.com",
        "name": "John Doe"
      },
      "substitution_data": {
        "customer_type": "Platinum"
      }
    },
    {
      "address": {
        "email": "jane.smith@acme.com",
        "name": "Jane Smith"
      },
      "substitution_data": {
        "customer_type": "Gold"
      }
    }
  ],
  "content": {
    "from": "newsletter@acme.com",
    "subject": "{{customer_type}} Member Benefits",
    "html": "<p>Hi {{address.name}}, enjoy your {{customer_type}} benefits!</p>"
  }
}

Content Types

Fuddlink supports two types of email content: inline content and RFC822 content.

Inline Content

Specify email content directly in the API request with structured fields.

{
  "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>",
    "reply_to": "sales@acme.com",
    "headers": {
      "X-Custom-Header": "campaign-123"
    }
  }
}

RFC822 Content

Provide a pre-built RFC822 email message for complete control over the email format.

{
  "content": {
    "email_rfc822": "Content-Type: text/plain\nTo: \"{{address.name}}\" <{{address.email}}>\nSubject: {{subject}}\n\nHi {{address.name}},\n\nYour message content here.\n\nBest regards,\n{{sender}}"
  }
}

Template Substitutions

Personalize emails using template variables. Set variables at the transmission level for all recipients, or override them per recipient.

Variable Syntax

Use double curly braces to reference variables in your content.

{
  "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>"
  },
  "substitution_data": {
    "holiday_name": "Black Friday",
    "sender": "Acme Team"
  }
}

Per-Recipient Variables

Override transmission-level variables for specific recipients.

{
  "recipients": [
    {
      "address": {
        "email": "john.doe@acme.com",
        "name": "John Doe"
      },
      "substitution_data": {
        "customer_type": "Platinum",
        "place": "Anytown"
      },
      "metadata": {
        "age": "24",
        "user_id": "12345"
      }
    }
  ]
}

Tracking Options

Configure email tracking and behavior options.

{
  "options": {
    "open_tracking": true,
    "click_tracking": true,
    "transactional": false,
    "inline_css": false,
    "perform_substitutions": true
  }
}

Code Examples

Node.js Example

const axios = require('axios');

async function sendTransmission() {
  try {
    const response = await axios.post('https://api.fudd.link/v1/transmissions', {
      recipients: [
        {
          address: {
            email: 'john.doe@acme.com',
            name: 'John Doe'
          }
        }
      ],
      content: {
        from: 'deals@acme.com',
        subject: 'Hello from Fuddlink!',
        html: '<h1>Welcome to our service!</h1>',
        text: 'Welcome to our service!'
      }
    }, {
      headers: {
        'Authorization': 'YOUR_API_KEY',
        'Content-Type': 'application/json'
      }
    });

    console.log('Transmission sent:', response.data.results.id);
  } catch (error) {
    console.error('Error:', error.response?.data);
  }
}

Python Example

import requests
import json

def send_transmission():
    url = 'https://api.fudd.link/v1/transmissions'
    headers = {
        'Authorization': 'YOUR_API_KEY',
        'Content-Type': 'application/json'
    }

    payload = {
        'recipients': [
            {
                'address': {
                    'email': 'john.doe@acme.com',
                    'name': 'John Doe'
                }
            }
        ],
        'content': {
            'from': 'deals@acme.com',
            'subject': 'Hello from Fuddlink!',
            'html': '<h1>Welcome to our service!</h1>',
            'text': 'Welcome to our service!'
        }
    }

    try:
        response = requests.post(url, headers=headers, data=json.dumps(payload))
        result = response.json()
        print(f"Transmission sent: {result['results']['id']}")
    except Exception as e:
        print(f"Error: {e}")

PHP Example

<?php

function sendTransmission() {
    $url = 'https://api.fudd.link/v1/transmissions';
    $headers = [
        'Authorization: YOUR_API_KEY',
        'Content-Type: application/json'
    ];

    $payload = [
        'recipients' => [
            [
                'address' => [
                    'email' => 'john.doe@acme.com',
                    'name' => 'John Doe'
                ]
            ]
        ],
        'content' => [
            'from' => 'deals@acme.com',
            'subject' => 'Hello from Fuddlink!',
            'html' => '<h1>Welcome to our service!</h1>',
            'text' => 'Welcome to our service!'
        ]
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode === 200) {
        $result = json_decode($response, true);
        echo "Transmission sent: " . $result['results']['id'] . "\n";
    } else {
        echo "Error: " . $response . "\n";
    }
}

sendTransmission();
?>

cURL Example

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": "Hello from Fuddlink!",
      "html": "<h1>Welcome to our service!</h1>",
      "text": "Welcome to our service!"
    },
    "options": {
      "open_tracking": true,
      "click_tracking": true
    }
  }'