# Integrations

Every way to use Rasket with another platform: hosting, automation tools, websites, CRMs and contact sources, team chat and AI assistants. Each one says whether it is available today. Below the list, setting up Rasket on Vercel, Netlify and Cloudflare.

## Every integration

An integration marked coming soon is built and on its way. Its guide describes it as it will ship and says what to do until then.

### Hosting

| Integration | What it does | Status | Get started |
| --- | --- | --- | --- |
| [Vercel](https://www.rasket.com/docs/integrations/vercel) | Add Rasket on Vercel, and it saves a Sending key into each project you choose. | Coming soon | — |
| [Netlify](https://www.rasket.com/docs/integrations#netlify) | An API key in a secret environment variable, read by a Netlify Function. | Available | Follow the guide |
| [Cloudflare](https://www.rasket.com/docs/integrations#cloudflare) | An API key stored as a Worker secret, read from the Worker's environment. | Available | Follow the guide |

### Automation

| Integration | What it does | Status | Get started |
| --- | --- | --- | --- |
| [Zapier](https://www.rasket.com/docs/integrations/zapier) | Send email, add contacts and start a Zap on email events, with no code. | Coming soon | — |
| [Make](https://www.rasket.com/docs/integrations/make) | Send email, keep contacts in step and start scenarios on email events. | Coming soon | — |
| [n8n](https://www.rasket.com/docs/integrations/n8n) | The Rasket node and trigger for n8n workflows. | Coming soon | — |
| [Pipedream](https://www.rasket.com/docs/integrations/pipedream) | Rasket actions and instant sources for Pipedream workflows and Connect apps. | Coming soon | — |
| [ClickUp](https://www.rasket.com/docs/integrations/clickup) | Ready-made Zapier and Make automations between ClickUp tasks and Rasket. | Coming soon | — |

### Websites

| Integration | What it does | Status | Get started |
| --- | --- | --- | --- |
| [WordPress](https://www.rasket.com/docs/integrations/wordpress) | The Rasket plugin sends every email your site sends, with a safe fallback. | Coming soon | — |
| Webflow | Form submissions become contacts, and store orders become store events. | Coming soon | — |
| [Framer](https://www.rasket.com/docs/integrations/framer) | Sign-up forms on a Framer site, and Framer forms into contacts. | Coming soon | — |

### Contacts and CRM

| Integration | What it does | Status | Get started |
| --- | --- | --- | --- |
| HubSpot | Contacts and lists kept in step both ways, with a card on each contact record. | Coming soon | — |
| [Notion](https://www.rasket.com/docs/integrations/notion) | A Notion database of people becomes contacts in a segment. | Coming soon | — |
| [Google Sheets](https://www.rasket.com/docs/integrations/google-sheets) | A sheet tab of people becomes contacts in a segment, with email activity written back. | Coming soon | — |
| [Airtable](https://www.rasket.com/docs/integrations/airtable) | An Airtable table of people becomes contacts in a segment, as records change. | Coming soon | — |
| [monday.com](https://www.rasket.com/docs/integrations/monday) | Board items become contacts, and a board change can send a template. | Coming soon | — |

### Team chat

| Integration | What it does | Status | Get started |
| --- | --- | --- | --- |
| [Slack](https://www.rasket.com/docs/integrations/slack) | Email alerts in the channels you choose, and /rasket for numbers and look-ups. | Coming soon | — |

### AI assistants

| Integration | What it does | Status | Get started |
| --- | --- | --- | --- |
| [Claude](https://www.rasket.com/docs/mcp) | Add Rasket as a connector, then ask Claude to send, check domains and read results. | Available | Follow the guide |
| [ChatGPT](https://www.rasket.com/docs/mcp) | The same tools in ChatGPT, through the MCP server. | Available | Follow the guide |
| [Cursor](https://www.rasket.com/docs/mcp) | The MCP server in Cursor, from one link. | Available | [Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=rasket&config=eyJ1cmwiOiJodHRwczovL2FwaS5yYXNrZXQuY29tL21jcCJ9) |
| [VS Code](https://www.rasket.com/docs/mcp) | The MCP server in VS Code's agent mode, from one link. | Available | [Add to VS Code](vscode:mcp/install?%7B%22name%22%3A%22rasket%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.rasket.com%2Fmcp%22%7D) |

## No hosting marketplace listing, yet

A one-click Vercel Marketplace integration is deliberately deferred. A native listing is billed through the hosting provider — a second billing system beside the Stripe checkout and portal your plan already uses — and it needs a partner review that only a launched product can pass. Meanwhile, a connectable integration is just an OAuth client, which already works. So until the listing exists, pick one of the two routes below.

## The two routes

- **An API key in the environment.** For your own app, deployed to your own project. Create a key in the dashboard under API keys, store it as a secret environment variable, and send from server code.
- **An OAuth app.** For a product that connects *other people's* Rasket teams — an integration you build and publish. Register it once through `POST /oauth/register` with a fixed redirect URI on your own host, and follow [the OAuth flow](https://www.rasket.com/docs/oauth). Each customer approves it for one team, and can revoke it from Settings → Team → Authorized apps.

> Whichever route, the credential stays on the server. Never put a key or a token in a variable your framework exposes to the browser.

## Vercel

### 1. Create the credential

An API key — ideally `sending_access`, restricted to the one domain this project sends from — or, for an integration, a registered OAuth client.

### 2. Add it to the project

In the project's settings, under environment variables, add `RASKET_API_KEY` as a sensitive variable for the environments that send. Redeploy: variables are read when a deployment is built.

### 3. Send from a route handler or server action

A send, reading the key from the environment:

```text
export async function sendEmail(message) {
  const response = await fetch("https://api.rasket.com/emails", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.RASKET_API_KEY}`,
      "User-Agent": "acme-billing/1.0",
      "Content-Type": "application/json",
    },
    body: JSON.stringify(message),
  });
  return response.json();
}
```

Send the `User-Agent` yourself — a request with no `User-Agent` is refused.

> Coming soon: the rasket package is not published yet.

## Netlify

### 1. Create the credential

As for Vercel: a narrowly scoped API key, or a registered OAuth client.

### 2. Add it to the site

In the site's configuration, under environment variables, add `RASKET_API_KEY` and mark it secret. Scope it to Functions so it never reaches a build log or the client bundle, then trigger a new deploy.

### 3. Send from a function

In a Netlify Function, `process.env.RASKET_API_KEY` holds the key, and the code above works unchanged.

## Cloudflare

### 1. Create the credential

As above: a narrowly scoped API key, or a registered OAuth client.

### 2. Store it as a Worker secret

Adding the key as a secret:

```text
npx wrangler secret put RASKET_API_KEY
```

On Pages, add it as an encrypted environment variable in the project's settings instead.

### 3. Send from the Worker

A Worker reads secrets from `env`, not `process.env`. Plain `fetch` is the simplest client there — send the `User-Agent` yourself:

Reading the secret inside a Worker:

```text
export default {
  async fetch(request, env) {
    const response = await fetch("https://api.rasket.com/emails", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${env.RASKET_API_KEY}`,
        "User-Agent": "acme-billing/1.0",
        "Content-Type": "application/json",
      },
      body: JSON.stringify(message),
    });
    // …
  },
};
```

## If you are building the integration

An OAuth app has no client secret to hide, but it does have a registration access token (`rkor_…`), shown once, that can change its redirect URIs or delete it — and deleting a client revokes it on every team that connected it. Keep that token in your own secret store, never in the integration's shipped code.

Ask for the fewest scopes the integration needs; a customer sees each one on the consent screen before approving.
