Connect your app
Get your own data into Selda as fast as you’d wire up Stripe. Push your companies, contacts or signups → Selda turns them into ready-to-send campaigns (decision-maker → hook → message). You approve, Selda sends.
One endpoint pattern, one auth header. Use the @selda/sdk client in TypeScript, or raw HTTP from any backend, any language.
1. Get your key
In the app: Settings → Integrations → Connect your app → Create a key. You’ll get an sk_live_… key and your workspace projectId. Store the key as a server secret, never in client code.
SELDA_API_KEY=sk_live_...
SELDA_PROJECT_ID=...2. Push a lead
That’s the whole integration. Selda dedups by email, so re-running is safe.
With the SDK (TypeScript)
import { createSelda } from "@selda/sdk";
const selda = createSelda({
apiKey: process.env.SELDA_API_KEY!,
projectId: process.env.SELDA_PROJECT_ID!,
});
await selda.leads.add({
company: "Acme Oy",
email: "owner@acme.fi",
companyDomain: "acme.fi",
source: "my-app",
});Raw HTTP (any language)
curl -X POST https://api.selda.ai/mcp/mutate \
-H "Authorization: Bearer $SELDA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fn": "leads.add",
"args": {
"projectId": "'"$SELDA_PROJECT_ID"'",
"company": "Acme Oy",
"email": "owner@acme.fi",
"companyDomain": "acme.fi",
"source": "my-app"
}
}'3. Wire it in
Call it wherever a new customer/signup is created, inline on create, or a daily job over new rows. Your app’s data is now live in Selda.
Using an AI coding tool? In the app, hit “Copy setup prompt for your AI tool”, and it copies a ready prompt (key + projectId prefilled) you paste into Claude Code / Cursor / Lovable / Bolt with your product, and it wires the integration for you.
Two patterns
A. You already have contacts → push them as leads with leads.add. Best when your data has emails.
B. You only have company names → push the companies, then let the engine find decision-makers, hooks and messages:
const c = await selda.campaigns.create({ name: "Summer 2026", leadCount: 30 });
await selda.campaigns.addLeads(c.campaignId, [leadId]);
await selda.engine.start({ idea: "Helsinki SaaS companies hiring sales" });This is the stronger path: you hand Selda a list, you get back a ready-to-send campaign. Nothing sends until you approve.
Read your pipeline back
await selda.campaigns.stats(campaignId); // sent / replies / meetings
await selda.messages.byProject(); // drafts and replies
await selda.leads.list(); // lead status→ Full client reference: TypeScript SDK · raw endpoints: HTTP API.