# Welcome in one call: from signup to first email

> Create an API Trigger campaign in Immediate mode with the welcome email. When someone signs up in your app, call /api/campaigns/trigger with the contact as an object. BIP creates or updates the contact and sends right away. With re-entry off, each person gets the welcome only once.

Fonte: https://wiki.bip.marketing/en-us/welcome-in-one-call · Atualizado: 2026-10-08

<UseCaseMeta effort="api" channel="email" plan="free" />

Anyone who creates an account in your app gets a welcome the same instant, with their own name, from a single call from your server.

<Checklist items="A BIP account (the free plan works)|Access to your app's server, where signup happens|The name (2 characters or more) and email of whoever signs up|An API key with Campaigns Trigger and Leads Write|Recommended: your own verified sending domain (paid plans)" />

## What you'll get

- A welcome the instant someone signs up, with their first name.
- Contact created and email sent in the same call: no sync job and no spreadsheet.
- No duplicate contacts: anyone already in BIP gets their profile updated.
- One welcome per person, even if your system calls the API twice.
- Signup tags and fields on the contact, ready for segmenting later.
- The email sent from your brand's address, if you use your own domain.

## How it works

<Steps items="Someone creates an account in your app|Your server calls BIP with the person's details|BIP creates the contact and sends the welcome right away" />

The campaign uses **API Trigger** in **Immediate** mode. In practice:

- Your server calls `/api/campaigns/trigger` with `lead` as an object. BIP looks up the contact by email or phone. If it finds one, it updates it; if not, it creates it. A new contact needs a `name` with at least 2 characters.
- In **Immediate** mode, the send is queued as soon as BIP receives the call. The response includes `"mode": "immediate"` and the contact's `leadId`.
- With the **Lead Re-entry Window** off (the default), each contact gets the campaign only once, ever. For a welcome, that's exactly what you want: a repeated call shows up as **Rejected** and doesn't count as a send.
- On BIP Lite, each processed welcome email uses one send for the month.

## Step by step

### 1. Create the plan field

The same call that triggers the welcome can store signup data. Create the fields your app will send ahead of time. Tags need no setup.

1. In **Settings** → **General**, go to **Fields** and click **Add Field**.
2. In **Field Type**, choose **String**. In **Field Name**, type _Plano_ ("plan").
3. Click **Save**.

<Shot src="/img/boas-vindas-em-uma-chamada/1-en-us.png" alt="Custom field Plano, of type String, in Settings, General tab" url="dash.bip.marketing/…/settings" />

### 2. Create the API key

1. In **Settings**, open the **API Keys** tab and click **Add New API Key**.
2. In **Name**, type _Nimbus App — signup_.
3. In **Scopes**, turn on **Campaigns Trigger** and **Leads Write**. Together, they let you create the contact and trigger the campaign in the same call.
4. Click **Save** and copy the **API key**. Keep the key on the server, in an environment variable, and never in the app's code.

<Shot src="/img/boas-vindas-em-uma-chamada/2-en-us.png" alt="New API key with the Campaigns Trigger and Leads Write scopes turned on" url="dash.bip.marketing/…/settings?tab=api-keys" />

### 3. Build the welcome email

1. In **Emails Templates**, click **New Template**.
2. Click **Settings** and fill in **Name**, **Language** (**English**), **Subject**, and **Preview**. The copy is in [Ready to copy](#ready-to-copy).
3. Add the blocks: logo, a heading with the first name, text with the first steps, a button to the app, and a signature.
4. In the subject and the heading, type `@first` and pick `lead.firstName()`. Click each variable and fill in the **Fallback Value**.
5. Click **Preview** → **Send Preview Email** to see the email in your inbox.
6. Click **Save**.

<Shot src="/img/boas-vindas-em-uma-chamada/3-en-us.png" alt="Email editor with the Nimbus App welcome and the first name in the heading" url="dash.bip.marketing/…/emails-templates/…" />

### 4. Send from your brand's domain

Recommended, on paid plans. The welcome is the first email the person gets from you: a sender like `ola@nimbusapp.com.br` is easy to recognize in the inbox, and replies land in an inbox your team reads.

1. In **Settings** → **Email Domains**, add `nimbusapp.com.br` and create the DNS records BIP shows. The full walkthrough is in [Your own sending domain](/en-us/sending-domain).
2. Once the status is **Verified**, go to **Settings** → **General** and fill in **Email From (Name)** and **Email From (Address)**.
3. Click **Save**.

On the free plan, skip this step: emails go out from `no-reply@bip.marketing`, with the name you set in **Email From (Name)**.

<Shot src="/img/boas-vindas-em-uma-chamada/4-en-us.png" alt="Domain nimbusapp.com.br with the Verified status in Email Domains" url="dash.bip.marketing/…/settings?tab=email-domains" />

### 5. Create the welcome campaign

1. In **Campaigns**, click **New Campaign**.
2. In **Campaign Name**, type _Welcome — Nimbus App_ and pick the 👋 emoji.
3. In **Schedule Type**, choose **API Trigger** and, in **Trigger Mode**, **Immediate**.
4. Leave **Allow Lead Re-entry** off: each person gets the welcome once.
5. In **Channel**, choose **Email**. In **From Name**, type _Sofia from Nimbus App_. In **From Email**, keep **Account Default** or choose your domain and type `ola`.
6. In **Email Template**, link the template from step 3.

<Shot src="/img/boas-vindas-em-uma-chamada/5-en-us.png" alt="Campaign with API Trigger in Immediate mode and the Email channel with sender and template" url="dash.bip.marketing/…/campaigns/…" />

### 6. Test and activate

1. Click **Save** → **Save Draft**.
2. Click **Test Campaign**, type your email, and click **Send Test**. If you're not a contact yet, add yourself first in **Leads** → **Create Lead**.
3. Check the sender, the subject, and your name in the email. The test doesn't use any sends.
4. Click **Save** → **Save and Activate** and confirm with **Activate API Trigger**. The campaign switches to **Active** and starts accepting calls.

<Shot src="/img/boas-vindas-em-uma-chamada/6-en-us.png" alt="Test Campaign dialog with the contact's email and the Send Test button" url="dash.bip.marketing/…/campaigns/…" />

### 7. Connect your app's signup to BIP

1. In the campaign, open **API Integration**. The commands already include the campaign ID, which is also at the end of the page address.
2. On your server, right after creating the user's account, call `/api/campaigns/trigger` with `lead` as an object: `name`, `email`, and the signup `tags` and `fields`.
3. Store the `leadId` from the response with the user. You'll use it to log events for this contact later.
4. Don't let a failed call block signup: log the error and move on.

If your signup form doesn't ask for a name, start asking for one. BIP needs a name with at least 2 characters to create the contact. If you send a phone, always include `+` and the country code.

<Shot src="/img/boas-vindas-em-uma-chamada/7-en-us.png" alt="API Integration panel with the trigger commands for the welcome campaign" url="dash.bip.marketing/…/campaigns/…" />

## Ready to copy

### Campaign

| Option | Value |
| --- | --- |
| **Campaign Name** | 👋 Welcome — Nimbus App |
| **Schedule Type** | **API Trigger** |
| **Trigger Mode** | **Immediate** |
| **Lead Re-entry Window** | **Allow Lead Re-entry** off |
| **Channel** | **Email** |
| **From Name** | Sofia from Nimbus App |
| **From Email** | `ola@nimbusapp.com.br` (or **Account Default**) |
| **Email Template** | Welcome · Nimbus App |

### Field

| **Field Name** | **Field Type** | Sample value |
| --- | --- | --- |
| Plano | **String** | Trial |

### Email

Wherever you see `[@first name]`, type `@first`, pick `lead.firstName()`, and use the **Fallback Value** from the table at the end of this section.

<Copy label="Subject">
[@first name], your Nimbus App account is ready
</Copy>

<Copy label="Preview">
Three steps to organize your team's first week.
</Copy>

| Order | Block | Suggested setting |
| --- | --- | --- |
| 1 | **Add Image** | Nimbus App logo, **Max Width (px)** 160, centered |
| 2 | **Add Heading** | Greeting with the first name |
| 3 | **Add Text** | The first three steps |
| 4 | **Add Button** | A single action, **Width** 50 |
| 5 | **Add Text** | An invitation to reply |
| 6 | **Add Signature** | **Simple** |

<Copy label="Heading">
So glad you're here, [@first name]!
</Copy>

<Copy label="Text">
Your Nimbus App account is now active. To make the most of your first few days, start here:

1. Create your first project.
2. Invite the people you work with.
3. Set this week's deadlines and track everything in one dashboard.
</Copy>

<Copy label="Button — Name">
Open Nimbus App
</Copy>

<Copy label="Button — Link URL" code>
https://nimbusapp.com.br/entrar
</Copy>

<Copy label="Closing text">
Have a question? Just reply to this email: your message goes straight to our team.
</Copy>

The closing text works with your own domain, where replies reach the sending inbox. On the free plan, use this instead:

<Copy label="Closing text (free plan)">
Have a question? Write to ajuda@nimbusapp.com.br.
</Copy>

| **Signature** field | Value |
| --- | --- |
| **Preset** | **Simple** |
| **Name** | Sofia Costa |
| **Title** | Customer Success |
| **Company** | Nimbus App |
| **Website** | nimbusapp.com.br |

| Variable | Where | **Fallback Value** |
| --- | --- | --- |
| `lead.firstName()` | **Subject** | Hello |
| `lead.firstName()` | Heading | friend |

Every contact created through the API has a name, so the fallback rarely appears.

### Sender

| Where | Field | Value |
| --- | --- | --- |
| **Settings** → **General** | **Email From (Name)** | Nimbus App |
| **Settings** → **General** | **Email From (Address)** | `ola@nimbusapp.com.br` |
| Campaign | **From Name** | Sofia from Nimbus App |

### API

Replace `YOUR_API_KEY` with your key and `CAMPAIGN_ID` with the ID from the **API Integration** panel.

<Copy label="curl" code>
curl -X POST https://api.bip.marketing/api/campaigns/trigger \
  -H "Content-Type: application/json" \
  -H "x-bip-api-key: YOUR_API_KEY" \
  -d '{
    "campaignId": "CAMPAIGN_ID",
    "lead": {
      "name": "Tiago Pereira",
      "email": "tiago.pereira@exemplo.com",
      "tags": ["trial"],
      "fields": [{ "key": "Plano", "value": "Trial" }]
    }
  }'
</Copy>

<Copy label="Response" code>
{"campaignId": "CAMPAIGN_ID", "leadId": "CONTACT_ID", "mode": "immediate"}
</Copy>

<Copy label="TypeScript" code>
// On the Nimbus App server
const API_KEY = process.env.BIP_API_KEY ?? 'YOUR_API_KEY';
const CAMPANHA_BOAS_VINDAS = 'CAMPAIGN_ID';

type NovoUsuario = { nome: string; email: string; telefone?: string; plano: string };
type RespostaDisparo = { campaignId: string; leadId: string; mode: 'immediate' | 'delay' };

export async function darBoasVindas(usuario: NovoUsuario): Promise<RespostaDisparo> {
  const res = await fetch('https://api.bip.marketing/api/campaigns/trigger', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-bip-api-key': API_KEY },
    body: JSON.stringify({
      campaignId: CAMPANHA_BOAS_VINDAS,
      lead: {
        name: usuario.nome, // 2 characters or more
        email: usuario.email,
        ...(usuario.telefone ? { phone: usuario.telefone } : {}), // with + and the country code
        tags: ['trial'],
        fields: [{ key: 'Plano', value: usuario.plano }]
      }
    })
  });
  if (!res.ok) throw new Error(`BIP ${res.status}: ${await res.text()}`);
  return res.json();
}

// Right after creating the account: signup completes even if BIP doesn't respond
export async function aoCriarConta(usuario: NovoUsuario) {
  try {
    const { leadId } = await darBoasVindas(usuario);
    // store the leadId with the user to log events later
    return leadId;
  } catch (erro) {
    console.error('Boas-vindas não disparadas', erro);
    return null;
  }
}
</Copy>

## How to measure

In **Campaigns**, open **Campaign Stats** (from the chart icon in the list or at the top of the campaign).

- **Processed (_N_ runs)**: how many welcomes BIP processed. Compare it with the number of signups in your app over the same period.
- **Delivered**, **Open Rate**, and **Click Rate**: how many emails arrived, were opened, and led to a click.
- **Top clicked links**: how many people opened the app from the button.
- **Recipient Interactions**: filter by **Rejected** to see repeated calls, with the reason **Lead has already received this campaign**. Filter by **Error** to see the emails that couldn't be sent.

To count how many contacts came in through the integration, create a segment with **First / Last Source** → **First Source (Type)** → API. Add **Creation Date** to see only the signups from a given period.

## Variations

### WhatsApp instead of email

On paid plans, with a connected number, create the campaign with **Channel** set to **WhatsApp** and send the `phone` in `lead`, with `+` and the country code. The person's reply arrives in the WhatsApp Business app.

<WaTemplate name="nimbus_boas_vindas" category="MARKETING" footer="Nimbus App · nimbusapp.com.br" buttons="Open Nimbus App">
Hi {{1}}! Your Nimbus App account is ready. Start by creating your first project and invite the people you work with. Have a question? Just reply to this message.
</WaTemplate>

Static **URL** button: `https://nimbusapp.com.br/entrar`. Sample for `{{1}}`: Tiago.

| Campaign variable | Lead field | Sample value |
| --- | --- | --- |
| **Body · {{1}}** | **first name** | Tiago |

### Notify your team in the same send

Email campaigns accept up to 3 webhooks. Create the webhook in the **Webhooks** menu and link it in the campaign's **Webhooks** section: the new signup's data goes to your CRM or your team's channel in the same send as the welcome. A webhook sent along with the email doesn't count as an extra send. See [Webhooks](/en-us/webhooks).

### No integration: daily welcomes

Without access to the app's server, use a **Recurring** campaign with **Frequency** set to **Daily** and re-entry off, linked to a segment like this one:

| Criterion | Operator | Value |
| --- | --- | --- |
| Creation Date | After or equals | Relative: `-1` Days, **Start of Day** |

Each new contact gets the welcome once, on the first run after they arrive. Keep the window short: on BIP Lite, each run of a **Recurring** campaign deducts the segment's entire count from your capacity, including people who already received it. See [Campaigns](/en-us/campaigns) and [Plans and limits](/en-us/plans-and-limits).

<PlanOnly plan="full">
On BIP Full, a flow with the **Lead Created** trigger continues the conversation after the welcome: a **Timer** node waits a few days and a **Send Email** node sends the next tip.
</PlanOnly>

## Frequently asked questions

### Does the contact get duplicated if the person was already in BIP?

No. BIP recognizes the person by email or phone and updates the same profile: the name becomes the one from signup, new tags are added, and the fields you send are updated.

### If my system calls twice, does the person get two emails?

Not with the **Lead Re-entry Window** off. The second call shows up as **Rejected** in the stats, with the reason **Lead has already received this campaign**, and doesn't count as a send.

### Do I need my own domain?

No. On the free plan, welcomes go out from `no-reply@bip.marketing`, with the name you set in **Email From (Name)**. On paid plans, [your own sending domain](/en-us/sending-domain) puts your brand's address in the sender and routes replies back to you.

### Can I call the API directly from the app or the browser?

No. The key would be visible to anyone. Call the API from your server, right after creating the account.

## See also

- [Recover abandoned carts by email or WhatsApp](/en-us/abandoned-cart)
- [BIP API: keys, contacts, events and triggers](/en-us/api)
- [Campaigns: one-time, recurring and API-triggered](/en-us/campaigns)
- [Email editor: blocks, variables and preview](/en-us/email-editor)
- [Your own sending domain](/en-us/sending-domain)
- [Webhooks: push every send to your system](/en-us/webhooks)
- [Welcome emails on the BIP website](https://bip.marketing/en-us/use-cases/welcome)
- [BIP for SaaS](https://bip.marketing/en-us/solutions/saas)
