# Connect Make to SendBeam

How to connect Make to SendBeam: what you need, the setup steps, and the code.

Via API

There is no SendBeam app in Make today, but its HTTP module covers the same ground: one request adds a contact, another sends the email. It works against a public form endpoint too, with no API key.

## Before you start

- An account with Make
- A SendBeam API key, or a form ID

## Set it up

1. **Create an API key.** Settings → API keys in SendBeam. Give it contacts:write, and transactional:send if the scenario sends email. The full key is shown once.
2. **Add the HTTP step.** Point Make’s webhook or HTTP module at the endpoint, set the x-api-key header and a JSON body. The examples below are ready to map.
3. **Test with your own address.** Run the scenario once. The contact appears under Contacts within a second; a send appears in Activity with the API filter.

## Code

### Add a contact (HTTP → Make a request)

`Module 2`

```
Module: HTTP → Make a request
URL:          https://sendbeam.io/api/v1/contacts
Method:       POST
Headers:      x-api-key = sb_live_XXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Body type:    Raw
Content type: JSON (application/json)
Request content:
{
  "email": "{{1.email}}",
  "first_name": "{{1.first_name}}",
  "source": "make"
}
Parse response: Yes   → use {{2.data.contact.id}} in the next module
```

Create the key under Settings → API keys with contacts:write.

### Send an email (HTTP → Make a request)

`Module 3`

```
Module: HTTP → Make a request
URL:          https://sendbeam.io/api/v1/send
Method:       POST
Headers:      x-api-key = sb_live_…
Body type:    Raw · JSON
Request content:
{
  "contact_id": "{{2.data.contact.id}}",
  "subject": "Welcome aboard",
  "html_content": "<p>Hi {{first_name}}, thanks for joining.</p>"
}
```

Needs transactional:send. The response is { “ok”: true, “message_id”: “…” }.

### No API key? Post to a signup form instead

`Module 2`

```
POST https://sendbeam.io/api/forms/YOUR_SIGNUP_FORM_ID
Headers
  Content-Type: application/json
Data (JSON)
{ "email": "{{1.email}}", "first_name": "{{1.first_name}}" }

200 → { "success": true, "message": "Thanks for subscribing!", "redirect_url": null }
```

Works on every plan. Leave Allowed sites empty on that form, because the HTTP module sends no Origin header.

## Things to know

- Turn on “Parse response” so the contact id is available as a mapped value in the next module.
- Add an error handler route for status 409 (contact exists) that calls GET /api/v1/contacts?q={{1.email}} and continues with the matching id.
- Make retries failed modules according to your scenario settings; POST /api/v1/send is not idempotent, so keep retries off for the send module.

[← Make email marketing integration](https://sendbeam.io/integrations/make)

---
Source: https://sendbeam.io/docs/integrations/make
