---
url: "https://smashsend.com/docs/api/tutorial"
title: SMASHSEND API Tutorial
domain: smashsend.com
locale: en
type: docs
words: 663
cited_by: 0
indexed_by: stealpage
---

This step-by-step tutorial will guide you through integrating with the SMASHSEND API. Learn how to authenticate, create resources, and handle responses.

## Prerequisites

Before starting, make sure you have:

-   A SMASHSEND account with API access
    
-   An API key (which you can get from your dashboard)
    
-   Basic understanding of REST APIs and HTTP requests
    

## Step 1: Authentication

All requests to the SMASHSEND API require authentication. You'll need to include your API key in the Authorization header of all HTTP requests.

```
// Example of an authenticated request using JavaScript fetch
const apiKey = 'YOUR_API_KEY';

const response = await fetch('https://api.smashsend.com/v1/api-keys/check', {
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  }
});

const data = await response.json();
console.log(data);
```

## Step 2: Create a Contact

Let's create a new contact through the API.

```
// Creating a contact with JavaScript
const apiKey = 'YOUR_API_KEY';
const contactData = {
  properties: {
    email: 'jane.doe@example.com',
    firstName: 'Jane',
    lastName: 'Doe',
    company: 'Acme Inc'
  }
};

const response = await fetch('https://api.smashsend.com/v1/contacts', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(contactData)
});

const result = await response.json();
console.log(result);

// Expected response:
{
  "contact": {
    "id": "ctc_B7OSYsnTUVwBPOGrgYTjvSGS",
    "createdAt": "2025-06-04T05:26:05.593Z",
    "updatedAt": "2025-06-04T05:26:05.593Z",
    "properties": {
      "email": "jane.doe@example.com",
      "firstName": "Jane",
      "lastName": "Doe",
      "company": "Acme Inc"
    },
    "workspaceId": "wrk_ENGTK86JEXXckyDVJthKkPer"
  }
}
```

## Step 3: Add Contact to a Campaign

Now that we have created a contact, let's add them to an existing campaign.

```
// Adding a contact to a campaign
const apiKey = 'YOUR_API_KEY';
const campaignId = 'CAMPAIGN_ID';
const contactId = 'ctc_B7OSYsnTUVwBPOGrgYTjvSGS'; // The ID from the previous response

const response = await fetch(`https://api.smashsend.com/v1/campaigns/${campaignId}/contacts`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    contactId: contactId
  })
});

const result = await response.json();
console.log(result);
```

## Step 4: Set Up a Webhook

Setting up webhooks allows you to receive real-time notifications when events occur in your SMASHSEND account.

```
// Creating a webhook subscription
const apiKey = 'YOUR_API_KEY';
const webhookData = {
  url: 'https://your-app.com/webhook-endpoint',
  events: ['CONTACT_CREATED', 'CONTACT_UPDATED', 'CONTACT_DELETED'],
  token: 'YOUR_WEBHOOK_SECRET' // Used to verify webhook payloads
};

const response = await fetch('https://api.smashsend.com/v1/webhooks', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(webhookData)
});

const result = await response.json();
console.log(result);

// Expected response:
{
  "webhook": {
    "id": "wh_123456789",
    "url": "https://your-app.com/webhook-endpoint",
    "events": ["CONTACT_CREATED", "CONTACT_UPDATED", "CONTACT_DELETED"],
    "token": "wht_a1b2c3d4e5f6g7h8i9j0",
    "createdAt": "2023-04-16T15:45:00Z"
  }
}
```

## Step 5: Handling Webhook Events

Here's an example of how to handle webhook events on your server (using Express.js):

```
// Setting up a webhook handler with Express.js
const express = require('express');
const crypto = require('crypto');
const app = express();

// Middleware to parse JSON requests
app.use(express.json());

// Your webhook secret from Step 4
const WEBHOOK_SECRET = 'YOUR_WEBHOOK_SECRET';

// Verify webhook signature
function verifyWebhookSignature(req) {
  const signature = req.headers['x-smashsend-signature'];
  const payload = JSON.stringify(req.body);
  
  const hmac = crypto.createHmac('sha256', WEBHOOK_SECRET);
  hmac.update(payload);
  const calculatedSignature = hmac.digest('hex');
  
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(calculatedSignature)
  );
}

// Webhook endpoint
app.post('/webhook-endpoint', (req, res) => {
  try {
    // Verify the webhook signature
    if (!verifyWebhookSignature(req)) {
      return res.status(401).send('Invalid signature');
    }
    
    // Process the webhook event
    const event = req.body;
    
    console.log('Received webhook event:', event.event);
    
    switch (event.event) {
      case 'CONTACT_CREATED':
        // Handle new contact
        console.log('New contact created:', event.data.contact.id);
        break;
      case 'CONTACT_UPDATED':
        // Handle contact update
        console.log('Contact updated:', event.data.contact.id);
        break;
      case 'CONTACT_DELETED':
        // Handle contact deletion
        console.log('Contact deleted:', event.data.contact.id);
        break;
      default:
        console.log('Unhandled event type:', event.event);
    }
    
    // Respond with a 200 OK
    res.status(200).send('Webhook received');
  } catch (error) {
    console.error('Webhook error:', error);
    res.status(500).send('Webhook processing error');
  }
});

app.listen(3000, () => {
  console.log('Webhook server running on port 3000');
});
```

## Next Steps

Now that you've learned the basics of integrating with the SMASHSEND API, here are some next steps:

-   Explore the [Contacts API](https://smashsend.com/docs/api/contacts) for more advanced contact management features
    
-   Learn about [Contact properties API](https://smashsend.com/docs/api/contact-properties) for creating and managing campaigns
    
-   Learn about [Webhooks API](https://smashsend.com/docs/api/webhooks) for creating and managing campaigns
    
-   Learn about [API Keys API](https://smashsend.com/docs/api/api-keys) for creating and managing campaigns
    
-   Learn about [Users API](https://smashsend.com/docs/api/users) for creating and managing campaigns
    
-   Check out our [Postman Collection](https://smashsend.com/docs/api/postman) for ready-to-use API requests
    
-   Implement proper error handling and retry logic in your integration