> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://fyno.io/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fyno.io/docs/_mcp/server.

# Fyno’s Quick-Start Guide

> Get started with Fyno in minutes: connect your providers, create templates, generate an API key, set up a notification event, and monitor delivery with analytics and logs.

Fyno is an all-in-one **Customer Communications Management (CCM)** platform. Connect your providers once, manage every template in one place, and send across SMS, WhatsApp, Email, Push and more through **a single API**, with unified analytics for every channel and provider.

This guide takes you from a fresh account to your first delivered notification in five steps. Each step includes a short video so you can follow along on screen.

> **Info**
>
> * **Time needed:** about 15 minutes.
> * **You'll need:** a Fyno account and credentials for at least one communication provider (for example, an SMS or email provider).

## At a glance

#### [1. Connect providers](#configure-your-integrations)

Add credentials for the providers you already use.

#### [2. Create templates](#create-your-templates)

Build message content for every channel in one place.

#### [3. Generate an API key](#generate-an-api-key)

Authenticate your application's calls to Fyno.

#### [4. Create an event](#create-a-notification-event)

Combine a template and providers into one endpoint.

#### [5. Monitor delivery](#monitor-with-analytics-and-logs)

Track performance and troubleshoot with logs.

---

### Configure your integrations

Connect the channels and providers you already use. No custom API integration work is needed on your side.

1. Log in to your existing provider's dashboard and copy its authentication credentials (API keys, tokens, sender IDs and so on).
2. In Fyno, open **Integrations**, select your provider, and paste in the credentials to activate it.

> **Tip**
>
> Fyno supports **80+ providers** across SMS, RCS, WhatsApp, Email, Push, Web Push, In-App, Voice, and Chat (Slack, Discord, Teams). Using a provider that isn't listed? Let us know and we'll help you get it added.

→ Learn more in the [Integrations documentation](/docs/integrations-introduction).

### Create your templates

Templates hold all your message content, organised by channel, so your code never has to.

* **Edit visually.** Use the WYSIWYG ("What You See Is What You Get") editor to create and edit templates on the fly.
* **Make it dynamic.** Add Handlebars-style `{{ }}` placeholders for values you pass at send time.
* **One template, many channels.** Rich formatting is available on channels like Email and WhatsApp; SMS content is plain text.
* **Test before you ship.** Click **Run Test** to check the template renders as expected.

**`Example SMS content with placeholders`**

```handlebars title="Example SMS content with placeholders"
Hi {{name}}, your order {{order_id}} has shipped and will arrive by {{delivery_date}}.
```

> **Note**
>
> Already have templates elsewhere? Share them with us and we can pre-load them into your account.

→ Learn more in [Templates](/docs/templates-getting-started) and [Handlebars](/docs/templates-handlebars).

### Generate an API key

Every API call to Fyno is authenticated with an API key tied to your workspace.

1. Click **Workspace Settings** in the bottom-left corner of the navigation menu, then click **API Keys**.
2. Click **Generate +**.
3. Enter a unique name for the key so you can tell your keys apart later.
4. *(Optional)* Enter the IP addresses you want to restrict this key's usage to.
5. Select the environment the key should work in (see the table below).
6. Click the **check mark**, then click **Create**.
7. Before closing the pop-up, copy both your **Workspace ID** and your **API key**.

| Environment | Use it for                                         |
| ----------- | -------------------------------------------------- |
| **Both**    | A single key that works for Test and Live versions |
| **Test**    | Development and testing only                       |
| **Live**    | Production traffic only                            |

> **Warning**
>
> **Save your key right away.** Once the pop-up is closed, the API key can't be retrieved again, and you'll need to generate a new one.

You can create up to **20 API keys** per account. → Learn more in [API Keys](/docs/api-keys).

### Create a notification event

A notification event ties everything together into a single endpoint your application calls to send a message.

> **Info**
>
> **Notification Event** = **Template** + (**Providers** or **Route**)

1. Go to **Notification Events** in the left navigation and click **Create +**.
2. Enter a name, choose the event type (**OTP**, **Transactional**, or **Marketing**), add a description, and select a group. Optionally, choose a subscription topic. Click **Submit**.
3. Under **Template**, select the template you created earlier.
4. Under **Route/Provider**, choose **Single Channel Route or Provider**, then pick a provider or route for each channel in your template.
5. Click **Save** to save a **Test** version, or **Go Live** to publish the **Live** version.
6. Click **Run Test**, enter a destination and placeholder values, and fire a test notification.

#### Trigger the event using the Fyno API

Once it works, trigger the event from your application with one API call, using the API key and Workspace ID from the previous step.

**`cURL`**

```bash title="cURL"
curl -X POST 'https://api.fyno.io/v1/<WORKSPACE_ID>/event' \
  -H 'Authorization: Bearer <YOUR_FYNO_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "event": "<NOTIFICATION_EVENT_NAME>",
    "to": {
      "sms": "+919876543210",
      "email": "user@example.com"
    },
    "data": {
      "name": "Vivek",
      "order_id": "DEC165432"
    }
  }'
```

**`Node.js`**

```javascript title="Node.js"
const res = await fetch("https://api.fyno.io/v1/<WORKSPACE_ID>/event", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <YOUR_FYNO_API_KEY>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    event: "<NOTIFICATION_EVENT_NAME>",
    to: { sms: "+919876543210", email: "user@example.com" },
    data: { name: "Vivek", order_id: "DEC165432" },
  }),
});
console.log(await res.json());
```

**`Python`**

```python title="Python"
import requests

res = requests.post(
    "https://api.fyno.io/v1/<WORKSPACE_ID>/event",
    headers={"Authorization": "Bearer <YOUR_FYNO_API_KEY>"},
    json={
        "event": "<NOTIFICATION_EVENT_NAME>",
        "to": {"sms": "+919876543210", "email": "user@example.com"},
        "data": {"name": "Vivek", "order_id": "DEC165432"},
    },
)
print(res.json())
```

> **Tip**
>
> **Change without redeploying.** Saving a Test version never affects the Live version in your application. And because your code only references the event name, you can swap templates, channels, or providers on Fyno anytime without touching code.

→ Learn more in [Creating a Notification Event](/docs/notification-event-creation) and [Triggering a Notification Event](/docs/notification-event-triggering).

### Monitor with analytics and logs

Your notifications are now flowing to customers. Use analytics and logs to measure performance and troubleshoot in seconds.

#### [Analytics](/docs/dashboard)

One view of usage across every channel and provider. Compare engagement, measure usage, and see which providers deliver better and faster.

#### [Logs](/docs/logs-overview)

A complete, millisecond-level trace of every message, from delivery attempt to final status such as delivered or read.

For delivery and open rates on a single event, see [Notification Event Analytics](/docs/notification-event-analytics). To inspect individual messages, see [Sent Logs](/docs/sent-logs).

---

## You're all set 🎉

You can now send notifications across every channel through a single API. Here's where to go next:

#### [Workflows](/docs/workflows)

Automate multi-step customer journeys.

#### [Routes](/docs/routes)

Add fallbacks and smart routing across providers.

#### [Campaigns](/docs/campaigns-overview)

Send bulk messages to your audiences.