Connect your product

Lifecycle journeys email each of your users based on where they are in your product — nudging people who haven't finished getting started, and teaching the ones who have. To do that, your server tells YouGrow about each user, and YouGrow does the rest.

Removed on 2026-09-25: API v1 (POST /api/v1/events and its HMAC signing). Use API v2 — sending users.

YouGrow is open source. To run it on your laptop, host your own copy or build on it with Claude Code or Cursor, see Open source.

How it works

The parts of a connection
Your product ── each user's state (HTTP Basic, your key) ──▶ PATCH https://yougrow.ai/api/v2/users/{userId}
            ◀── context request (signed by YouGrow) ────── optional: before an email, about one user
            ──── live steps, facts, insights ────────────▶
            ◀── webhooks (signed by YouGrow) ───────────── optional: e.g. "this user unsubscribed"
  • Your users' state — your server tells us about each user: who they are, when they signed up, which onboarding steps they've done, facts about their account, and whether they've opted out. You send their current state; we keep it, and journeys decide who gets which email, and when. Sending users →
  • The context endpoint — how an email tells someone what their own results mean. Just before we email them, we ask your server for true sentences about their numbers, and it can hold or stop the email. Context endpoint →
  • Webhooks (optional) — we tell your server about changes it should mirror, like an unsubscribe. Webhooks →

Getting started

  1. In YouGrow, go to Products → Connect a product. You get a key id (public) and a secret (shown once — store it in your server's secret manager, never in code or the browser).
  2. Recommended: open Learn from repo on the connection and connect GitHub or GitLab — read-only, about a minute (how connecting works). We read your code and propose your catalog: your onboarding steps and how each is done, and the facts you can report. You review and keep what's right. Your connection's Integration guide then lists exactly what to build, in priority order and pointing at your own files — with a Copy prompt button that hands the whole job to your coding agent (Claude Code, Cursor, …).
  3. When someone signs up, send their state: PATCH /api/v2/users/{userId} with signedUpAt, email, firstName, timezone and consent. Add steps as they get started. Watch the writes arrive in the connection's Events tab.
  4. If your emails should tell people what their results mean, build a context endpoint, add its URL in the connection's Settings, and press Test connection.
  5. Build a journey, publish it in test mode (only your listed test users get email), then shadow, then live.
Use separate connections for separate environments — for example Acme (staging) for your staging app and Acme (production) for your live one. Each has its own key and secret. Once a journey works on staging, Copy to… puts it on production as a draft.

The Node SDK

@yougrowai/node sends your users' state, retries what's safe to retry, splits big batches, and verifies our requests for your endpoints. Node 18 or later, no dependencies, from ES modules (import) or CommonJS (require). Version 0.3.0 is the first for API v2 — earlier versions sent v1 events. Every part of the API is documented here too, so any language works.

Install
npm install @yougrowai/node
Node
import { YouGrow } from "@yougrowai/node";          // or: const { YouGrow } = require("@yougrowai/node");
import { createVerifier, contextResponse } from "@yougrowai/node/server";

const yg = new YouGrow({ keyId: process.env.YOUGROW_KEY_ID!, secret: process.env.YOUGROW_SECRET! });

await yg.users.update("user_123", { signedUpAt: new Date().toISOString(), email: "alex@example.com" });
await yg.users.batch([{ userId: "user_123", steps: { create_project: new Date().toISOString() } }]); // any number
const alex = await yg.users.get("user_123");      // null if YouGrow doesn't hold them
await yg.users.delete("user_123");
await yg.events.track("user_123", "report.exported");

// For your context endpoint and webhooks:
const verifier = createVerifier({ keyId: process.env.YOUGROW_KEY_ID! });

Every call is awaited and sent straight away — there's no queue, so nothing is lost when a serverless function returns. The SDK needs a Node runtime. On an edge runtime (Vercel Edge Functions, Next.js middleware, Cloudflare Workers), call the API with fetch — it's plain HTTPS with Basic auth.

For coding agents

Handing the integration to Claude Code, Cursor or another coding agent? Everything here is also plain Markdown, and the API is machine-readable:

The contract is these docs, the OpenAPI spec, the schemas and the published @yougrowai/node package (0.3.0 and later). YouGrow's own source code isn't: its main branch can be ahead of what's deployed.