# Selda > Selda finds the right customers for what you built, researches each one, writes messages that do > not read as AI, and sends them from your own inbox. Nothing sends until a human approves it. Selda is reached through five doors that share one backend: the web app, a Telegram bot, an embed on the customer's own website, a hosted MCP server, and an HTTP API. This file indexes the public documentation. The whole thing as one document is at https://docs.selda.ai/llms-full.txt. ## Docs - [Welcome to Selda](https://docs.selda.ai/): Selda understands a prospect before it writes to them, drafts from your own inbox, and sends nothing until you approve it. Start here for what it does and where to go next. - [Getting started](https://docs.selda.ai/getting-started): Create a workspace, add your product by URL or description, review the audience and decision-makers Selda finds, then approve your first messages and connect the inbox that sends them. - [The Selda app](https://docs.selda.ai/ways-to-use/web-app): A walkthrough of the app itself: the Brain, the seven steps of a campaign from brief to send, the Sales Inbox, leads, results, and what lives in Settings instead. - [Selda in Telegram](https://docs.selda.ai/ways-to-use/telegram): Run Selda from a Telegram chat: say what customers you need, send company names, a photo of a list or a voice note, and Selda prepares the campaign. It can never send anything. - [Selda on your website](https://docs.selda.ai/ways-to-use/website-widget): One script tag on your own site. A visitor picks from options you approved, the enquiry becomes a lead with a reply drafted and waiting. Paste instructions for WordPress, Webflow, Shopify, Squarespace, Framer, Next.js and plain HTML. - [Run Selda from ChatGPT, Claude or Cursor](https://docs.selda.ai/ways-to-use/mcp-server): Give your AI assistant hands. Paste one address into ChatGPT, Claude, Cursor or Gemini and it can run your Selda workspace: find companies, research them, write the messages. It cannot send. Setup takes under a minute. - [Prompts that do something](https://docs.selda.ai/ways-to-use/prompts): Ready prompts that do real work: set up a workspace, find customers, use research you already wrote, check a run, handle replies, and have a coding agent build the integration for you. - [Selda skill](https://docs.selda.ai/ways-to-use/selda-skill): Give Claude or ChatGPT a skill that knows how to drive your Selda workspace: find and add leads, run the go-to-market pipeline, draft and review outreach, and check credits. - [What people build with it](https://docs.selda.ai/ways-to-use/mcp-use-cases): Seven things people build with the Selda MCP server: driving a campaign from your own AI tool, turning product signups into leads, keeping your CRM the system of record, reusing research you already did, handling replies in your own stack, and giving an agency one key per client. - [Connect your app](https://docs.selda.ai/connect-your-app): One endpoint pattern, one auth header, no SDK. Get a key, make your first call in three minutes, then pick the integration pattern that fits: push data in, read your pipeline out, receive events, or let Selda poll you. - [Examples](https://docs.selda.ai/connect-your-app/examples): Copy-paste examples for the Selda API in curl, Node, Python and PHP: add a lead, add a batch, report a form submission, read your pipeline, start a campaign, and one complete flow end to end. - [Webhooks](https://docs.selda.ai/connect-your-app/webhooks): Register a URL and Selda POSTs a signed payload when a reply arrives, a message sends, a lead changes or credits run low. Events, payload shape, signature verification and what happens on a failed delivery. - [Function reference](https://docs.selda.ai/connect-your-app/reference): Every function the Selda HTTP API dispatches, generated from the registry the endpoints run on: the endpoint each one goes to, the scope it needs, whether a sandbox key can call it, and a link to its arguments and an example request. - [API functions](https://docs.selda.ai/reference/api): Index of every Selda API function, one page each, generated from the registry the endpoints dispatch from. - [`brain.add`](https://docs.selda.ai/reference/api/brain/add): brain.add in the Selda API: Add one thing Selda should know: a product, a partner, a reference, a company fact, a note, something it must never say, or a `writing_rule` — a standing instruction about HOW messages are written, which reaches the composer as a directive and is never quoted as material. Endpoint, scope, sandbox access, arguments and an example request. - [`brain.list`](https://docs.selda.ai/reference/api/brain/list): brain.list in the Selda API: The workspace's structured knowledge: products, partners, references, company facts, and the things Selda must never say. Each item has a type, a title and a body. Endpoint, scope, sandbox access, arguments and an example request. - [`brain.remove`](https://docs.selda.ai/reference/api/brain/remove): brain.remove in the Selda API: Take one Brain item back out. The human owns what Selda knows. Endpoint, scope, sandbox access, arguments and an example request. - [`brain.update`](https://docs.selda.ai/reference/api/brain/update): brain.update in the Selda API: Rewrite the title and body of one Brain item. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.addLeadsByTag`](https://docs.selda.ai/reference/api/campaigns/add-leads-by-tag): campaigns.addLeadsByTag in the Selda API: Put every lead carrying a tag into a campaign (legacy table). Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.addLeads`](https://docs.selda.ai/reference/api/campaigns/add-leads): campaigns.addLeads in the Selda API: Put specific leads into a campaign. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.addRule`](https://docs.selda.ai/reference/api/campaigns/add-rule): campaigns.addRule in the Selda API: Add a campaign rule. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.create`](https://docs.selda.ai/reference/api/campaigns/create): campaigns.create in the Selda API: Create a campaign (legacy table, not the one the app's campaign-flow UI reads). Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.get`](https://docs.selda.ai/reference/api/campaigns/get): campaigns.get in the Selda API: One campaign: status, channels, settings, leads. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.list`](https://docs.selda.ai/reference/api/campaigns/list): campaigns.list in the Selda API: Campaigns in a workspace. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.lockMessageStructure`](https://docs.selda.ai/reference/api/campaigns/lock-message-structure): campaigns.lockMessageStructure in the Selda API: Lock a campaign's message structure so every locked block ships exactly as written and nothing rewrites it, or unlock it with locked: false. Sends nothing. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.messageStructure`](https://docs.selda.ai/reference/api/campaigns/message-structure): campaigns.messageStructure in the Selda API: Read what a campaign's message is made of: every block, which ones ship verbatim, the instruction behind each generated one, the shape, and whether it is locked. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.setMessageStructure`](https://docs.selda.ai/reference/api/campaigns/set-message-structure): campaigns.setMessageStructure in the Selda API: State what a campaign's message is made of: blocks that ship WORD FOR WORD, blocks Selda writes from an instruction you give it, the paragraph count, and what must never appear. Refuses to change a locked structure. Sends nothing. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.stats`](https://docs.selda.ai/reference/api/campaigns/stats): campaigns.stats in the Selda API: Campaign counters: sent, delivered, opened, clicked, replied, bounced. Endpoint, scope, sandbox access, arguments and an example request. - [`campaigns.update`](https://docs.selda.ai/reference/api/campaigns/update): campaigns.update in the Selda API: Change a campaign. Endpoint, scope, sandbox access, arguments and an example request. - [`company.lookup`](https://docs.selda.ai/reference/api/company/lookup): company.lookup in the Selda API: Resolve a company and return the right people to reach. Starts nothing. Endpoint, scope, sandbox access, arguments and an example request. - [`connectors.create`](https://docs.selda.ai/reference/api/connectors/create): connectors.create in the Selda API: Register a data connector. Endpoint, scope, sandbox access, arguments and an example request. - [`connectors.delete`](https://docs.selda.ai/reference/api/connectors/delete): connectors.delete in the Selda API: Remove a data connector. Endpoint, scope, sandbox access, arguments and an example request. - [`connectors.list`](https://docs.selda.ai/reference/api/connectors/list): connectors.list in the Selda API: Data connectors registered for this workspace. Endpoint, scope, sandbox access, arguments and an example request. - [`connectors.sync`](https://docs.selda.ai/reference/api/connectors/sync): connectors.sync in the Selda API: Pull from a connected data source. Endpoint, scope, sandbox access, arguments and an example request. - [`credits.info`](https://docs.selda.ai/reference/api/credits/info): credits.info in the Selda API: Credit balance, daily free credits, usage, plan. Endpoint, scope, sandbox access, arguments and an example request. - [`drafts.remove`](https://docs.selda.ai/reference/api/drafts/remove): drafts.remove in the Selda API: Take one draft out of a run so it cannot be sent. The row stays visible with your reason and the app can put it back. Refuses a message that already went out. Endpoint, scope, sandbox access, arguments and an example request. - [`drafts.update`](https://docs.selda.ai/reference/api/drafts/update): drafts.update in the Selda API: Rewrite the draft on one run lead. Refuses a message that already went out; never sends. Endpoint, scope, sandbox access, arguments and an example request. - [`engine.start`](https://docs.selda.ai/reference/api/engine/start): engine.start in the Selda API: The full pipeline from a brief: find companies → research → fit → hook → draft. It STOPS at the company list (run status `awaiting_profile`) and waits for a person to confirm the companies and the decision-maker roles in the Selda app. Poll `runs.status` and read `awaitingHuman`. Nothing is ever sent from here. Endpoint, scope, sandbox access, arguments and an example request. - [`events.ingest`](https://docs.selda.ai/reference/api/events/ingest): events.ingest in the Selda API: Report that something happened outside Selda (a form, an analysis, an ad response). Creates the lead if new, recognises it if known, records it on the timeline, and can put it on a campaign's review list. Pass autoAdvance to have Selda write the reply from the Brain straight away and leave it in the Sales Inbox, draft.ready is published when it is there. It never sends. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.create`](https://docs.selda.ai/reference/api/flows/create): flows.create in the Selda API: Create a flow: a trigger plus the steps to run when something arrives. Off unless you say otherwise. No step can send. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.delete`](https://docs.selda.ai/reference/api/flows/delete): flows.delete in the Selda API: Delete a flow and its run log. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.list`](https://docs.selda.ai/reference/api/flows/list): flows.list in the Selda API: The flows in a workspace: what runs when something arrives from outside, the steps in order, and whether each is switched on. Includes the workspace's flow instruction files. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.runs`](https://docs.selda.ai/reference/api/flows/runs): flows.runs in the Selda API: What a flow actually did, run by run, step by step, including the steps that did nothing and why. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.saveSkill`](https://docs.selda.ai/reference/api/flows/save-skill): flows.saveSkill in the Selda API: Write or rewrite an instruction file a flow step reads: how this business decides what an enquiry is. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.setEnabled`](https://docs.selda.ai/reference/api/flows/set-enabled): flows.setEnabled in the Selda API: Switch a flow on or off. Endpoint, scope, sandbox access, arguments and an example request. - [`flows.update`](https://docs.selda.ai/reference/api/flows/update): flows.update in the Selda API: Rewrite a flow's name, trigger or steps. Endpoint, scope, sandbox access, arguments and an example request. - [`inbox.addMessage`](https://docs.selda.ai/reference/api/inbox/add-message): inbox.addMessage in the Selda API: Put one message into a lead's Sales Inbox thread, in either direction, even for somebody who was never in a campaign. Creates the lead if it is new. This can send nothing. Endpoint, scope, sandbox access, arguments and an example request. - [`knowledge.append`](https://docs.selda.ai/reference/api/knowledge/append): knowledge.append in the Selda API: Add to what Selda knows about your business. Endpoint, scope, sandbox access, arguments and an example request. - [`knowledge.get`](https://docs.selda.ai/reference/api/knowledge/get): knowledge.get in the Selda API: What Selda knows about your business: the prose that grounds every message. Endpoint, scope, sandbox access, arguments and an example request. - [`knowledge.set`](https://docs.selda.ai/reference/api/knowledge/set): knowledge.set in the Selda API: Replace what Selda knows about your business. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.addAlias`](https://docs.selda.ai/reference/api/leads/add-alias): leads.addAlias in the Selda API: Claim another email address for a lead, so a reply from it lands in the same conversation. Also adopts that address's earlier unlinked inbound. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.addBatch`](https://docs.selda.ai/reference/api/leads/add-batch): leads.addBatch in the Selda API: Add many companies/contacts in one call. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.addTag`](https://docs.selda.ai/reference/api/leads/add-tag): leads.addTag in the Selda API: Tag a lead. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.add`](https://docs.selda.ai/reference/api/leads/add): leads.add in the Selda API: Add one company/contact. Pass `analysis` with research you already did and the message is written from it instead of a fresh crawl. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.deleteBatch`](https://docs.selda.ai/reference/api/leads/delete-batch): leads.deleteBatch in the Selda API: Remove many leads. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.delete`](https://docs.selda.ai/reference/api/leads/delete): leads.delete in the Selda API: Remove one lead. Deleting is the caller's act, Selda never removes a lead on its own. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.enrichBatch`](https://docs.selda.ai/reference/api/leads/enrich-batch): leads.enrichBatch in the Selda API: Enrich many leads from a natural-language instruction. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.enrich`](https://docs.selda.ai/reference/api/leads/enrich): leads.enrich in the Selda API: Enrich one lead from a natural-language instruction. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.get`](https://docs.selda.ai/reference/api/leads/get): leads.get in the Selda API: One lead in full: research, fit, outreach angle, notes. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.list`](https://docs.selda.ai/reference/api/leads/list): leads.list in the Selda API: Leads in a workspace. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.merge`](https://docs.selda.ai/reference/api/leads/merge): leads.merge in the Selda API: Merge duplicate leads. Endpoint, scope, sandbox access, arguments and an example request. - [`leads.skip`](https://docs.selda.ai/reference/api/leads/skip): leads.skip in the Selda API: DELETES a lead and every message on it (legacy path, Clerk-authenticated, an API key cannot reach this; use leads.delete instead). Endpoint, scope, sandbox access, arguments and an example request. - [`leads.updateStatus`](https://docs.selda.ai/reference/api/leads/update-status): leads.updateStatus in the Selda API: Set a lead's status (legacy path, Clerk-authenticated, an API key cannot reach this; the MCP tool uses the org-scoped leads.update). Endpoint, scope, sandbox access, arguments and an example request. - [`leads.update`](https://docs.selda.ai/reference/api/leads/update): leads.update in the Selda API: Edit a lead's fields, including its status. Org-scoped, so an API key can reach it. Endpoint, scope, sandbox access, arguments and an example request. - [`material.import`](https://docs.selda.ai/reference/api/material/import): material.import in the Selda API: Your prospect folder → a campaign + company list, then it stops. Uploading material is not permission to send. Endpoint, scope, sandbox access, arguments and an example request. - [`POST /mcp/material/upload`](https://docs.selda.ai/reference/api/material/upload): POST /mcp/material/upload in the Selda API: Raw file bytes in, storageId out. Send the file's path in X-Selda-Path. That path is how Selda maps a file to a company. Then hand the ids to material.import. Endpoint, scope, sandbox access, arguments and an example request. - [`messages.approve`](https://docs.selda.ai/reference/api/messages/approve): messages.approve in the Selda API: Approve a drafted message. Approval only. It does not send. Endpoint, scope, sandbox access, arguments and an example request. - [`messages.byLead`](https://docs.selda.ai/reference/api/messages/by-lead): messages.byLead in the Selda API: The whole thread with one lead, sent and received. Endpoint, scope, sandbox access, arguments and an example request. - [`messages.byProject`](https://docs.selda.ai/reference/api/messages/by-project): messages.byProject in the Selda API: Messages in a workspace. Endpoint, scope, sandbox access, arguments and an example request. - [`messages.generate`](https://docs.selda.ai/reference/api/messages/generate): messages.generate in the Selda API: Draft a message for a lead. Endpoint, scope, sandbox access, arguments and an example request. - [`projects.get`](https://docs.selda.ai/reference/api/projects/get): projects.get in the Selda API: One workspace in full: business context, market analysis, ICP, settings. Endpoint, scope, sandbox access, arguments and an example request. - [`projects.list`](https://docs.selda.ai/reference/api/projects/list): projects.list in the Selda API: Your workspaces. Start here. Every other fn needs a projectId. Endpoint, scope, sandbox access, arguments and an example request. - [`projects.updateContext`](https://docs.selda.ai/reference/api/projects/update-context): projects.updateContext in the Selda API: Rewrite a workspace's business context. Endpoint, scope, sandbox access, arguments and an example request. - [`replies.classify`](https://docs.selda.ai/reference/api/replies/classify): replies.classify in the Selda API: Classify inbound replies. Endpoint, scope, sandbox access, arguments and an example request. - [`replies.draft`](https://docs.selda.ai/reference/api/replies/draft): replies.draft in the Selda API: Write a reply draft into a lead's Sales Inbox thread. A person reviews and sends it in the app, this can send nothing. Endpoint, scope, sandbox access, arguments and an example request. - [`replies.preview`](https://docs.selda.ai/reference/api/replies/preview): replies.preview in the Selda API: Ask how Selda would answer an enquiry, from this workspace's Brain, without creating a lead or storing a draft. Same writer the real reply uses, so tuning against this tunes the real thing. Stores nothing and sends nothing. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.archive`](https://docs.selda.ai/reference/api/runs/archive): runs.archive in the Selda API: Close a campaign run and take it off the active list. Keeps every contact and every message, deleting contacts stays a human act in the app. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.confirmCompanies`](https://docs.selda.ai/reference/api/runs/confirm-companies): runs.confirmCompanies in the Selda API: Confirm a run's company list so Selda finds the decision-makers and drafts the messages. Spends credits. Sends nothing, the send is still a human press in the app. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.leads`](https://docs.selda.ai/reference/api/runs/leads): runs.leads in the Selda API: The companies a run found, each with the message Selda drafted for it. Nothing is sent. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.list`](https://docs.selda.ai/reference/api/runs/list): runs.list in the Selda API: Every campaign run in a project, newest first, with its status. Use it to find a runId you no longer have. Runs the human archived are left out; pass includeArchived: true to see them too. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.rename`](https://docs.selda.ai/reference/api/runs/rename): runs.rename in the Selda API: Give a campaign run a name a person would recognise. An empty name restores the derived title. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.startFromLeads`](https://docs.selda.ai/reference/api/runs/start-from-leads): runs.startFromLeads in the Selda API: Start a campaign from leads already pushed in with selda_add_lead, selected by the source label you gave them. No discovery, Selda writes a message per lead from the analysis that came with it, and stops at the drafts. Endpoint, scope, sandbox access, arguments and an example request. - [`runs.status`](https://docs.selda.ai/reference/api/runs/status): runs.status in the Selda API: Status of one campaign run: phase, companies found, contacts resolved, drafts written, errors. Endpoint, scope, sandbox access, arguments and an example request. - [`webhooks.create`](https://docs.selda.ai/reference/api/webhooks/create): webhooks.create in the Selda API: Register an endpoint for events like reply.received. Endpoint, scope, sandbox access, arguments and an example request. - [`webhooks.delete`](https://docs.selda.ai/reference/api/webhooks/delete): webhooks.delete in the Selda API: Remove a webhook endpoint. Endpoint, scope, sandbox access, arguments and an example request. - [`webhooks.list`](https://docs.selda.ai/reference/api/webhooks/list): webhooks.list in the Selda API: Outbound webhook endpoints registered for this workspace. Endpoint, scope, sandbox access, arguments and an example request. - [REST paths](https://docs.selda.ai/reference/rest): Every REST path the Selda API serves, generated from the registry the endpoints dispatch from: the method, the path, the function it calls and what it does. Plus the OpenAPI 3.1 document. - [Selda MCP Server](https://docs.selda.ai/reference/mcp): Reference for the Selda MCP server: transport, authentication and org scoping, the tools it exposes, what it deliberately cannot do, test keys versus live keys, errors, limits and costs. - [Security & privacy](https://docs.selda.ai/security): Workspace isolation, Clerk sign-in, revocable API keys stored hashed, server-verified billing, signature-checked webhooks, and your approval before anything is sent. - [How Selda contacts people](https://docs.selda.ai/how-selda-contacts-people): Where Selda's contact data comes from, on what basis it reaches out, what happens when someone opts out, and how to have data deleted. Plain answers about how the product actually behaves. - [FAQ](https://docs.selda.ai/faq): Short answers on whether Selda is a cold-email tool, whether it sends by itself, which channels it runs, what credits are, using it from Claude or ChatGPT, and working as a team. - [Glossary](https://docs.selda.ai/glossary): The words Selda uses and what each one means: workspace, project, ICP, lead, campaign run, pipeline, Sales Inbox, credits, channel and MCP. - [Support](https://docs.selda.ai/support): How to reach us: the chat in the corner of this page and inside the app, support@selda.ai if you would rather write, and the community.