Salty is a developer-first CRM (Customer Relationship Management) built for AI agents. This FAQ answers the questions solopreneurs and developers ask most often when evaluating Salty.
What is Salty?
Salty is a developer-first CRM built for AI agents. It exposes a clean REST API, a Model Context Protocol (MCP) server, a CLI, and signed webhooks — no dashboards, no integration marketplace. Your AI agent does the work; Salty is the database underneath. See Introduction for the full pitch and Use cases → AI Sales BDR for a concrete agent recipe.How is Salty different from HubSpot, Attio, or Salesforce?
| Traditional CRMs | Salty | |
|---|---|---|
| Built for | Humans first | AI agents first |
| Interface | Dashboards, forms, integration marketplace | REST + MCP + CLI + signed webhooks |
| Pricing | Per seat | Per API call |
| Schema changes | Plan, migrate, ship | add_attribute, write — runtime |
| Integrations | Their marketplace | Your agent calls them directly |
| MCP support | Bolted on (or absent) | First-class — 15 tools, OAuth 2.1 |
| Admin UI | The product | A thin inspection layer |
Can humans also use Salty, or is it agent-only?
Salty ships with a thin admin UI at:/api— manage API keys/records/{people,companies,deals}— browse and inspect data with full detail views/pricing— plan + usage + upgrade/cancel/status— health of every service
What counts as an API call for billing purposes?
Every authenticated request to the REST API counts as one call. MCP tool invocations forward to the REST API, so each MCP tool call is one API call. Admin UI actions authenticated via JWT (billing, key management, workspace settings) are exempt — your workspace can never be locked out of its own settings by hitting the cap.| Plan | API calls / month | Records |
|---|---|---|
| Free | 500 | 10 |
| Solo | 100,000 | 25,000 |
| Pro | 1,000,000 | 250,000 |
$1 per 10,000 calls beyond cap, $0.50 per 1,000 records beyond cap.
Can I export my data?
Yes. The REST API exposes paginated list endpoints for every object type (people, companies, deals, notes, tasks, activities, custom-object records). Dump them withcurl + jq, or use the TypeScript SDK. There’s no vendor lock-in — your data is in standard relational shape and you have read access to every record.
Can I self-host Salty?
Self-hosting is planned for v1.1. The entire stack is Hono + Next.js + Drizzle on Postgres with Supabase Auth — deployable to any Node host. v1 launches as a hosted service to keep the support surface contained while the product stabilizes.What happens when I hit my plan’s API cap?
Agent traffic (sk_live_… API keys and salty_oat_… OAuth tokens) returns HTTP 429 with code cap_exceeded until either:
- The start of the next calendar month (counter rolls over lazily on first call), or
- You raise
hard_cap_api_callsin workspace settings, or - You upgrade your plan.
/billing to upgrade or set a higher cap. The counter resets lazily, no cron, no surprise re-enable.
Can multiple AI agents share a single Salty workspace?
Yes. Create one API key per agent:api_call_log with which key made it. MCP supports OAuth too — each MCP client (Claude Desktop instance, Cursor, custom agent) gets its own access token via dynamic client registration.
Does Salty charge per record or per call?
Both, as soft caps with overage. Each plan includes both a call allowance and a record allowance (table above). Overage:$1 per 10,000 calls beyond cap, $0.50 per 1,000 records over cap.
You can also set a hard cap per workspace to prevent overage entirely — calls just 429 once the hard cap is hit instead of charging you for the surplus.
How reliable are Salty webhooks?
Every webhook delivery is HMAC-SHA-256 signed (Salty-Signature: t=<ms>,v1=<hex>). Retries follow a 1s → 5s → 30s → 5min → 30min → 2h → 12h exponential backoff. After 8 failed attempts the endpoint is automatically deactivated and a webhook_endpoint.failed meta-event fans out to any other still-active endpoints in the workspace — so you can be notified of your own broken receiver via a different webhook.
The delivery worker uses Postgres FOR UPDATE SKIP LOCKED for safe horizontal scaling. See Webhooks.
Can I extend Salty’s data model?
Yes — two mechanisms:add_attributeon any native object (person, company, deal, note, task, activity). Supportstext,number,boolean,date,datetime,enum,reference,json. Values land incustom_attributes.- Custom objects — define entirely new object types like
invoicesorprojectswith their own attributes and records.
What’s Salty’s rate limit?
| Plan | Sustained | Burst |
|---|---|---|
| Free | 2 req/sec | 10 req/sec |
| Solo | 100 req/sec | 500 req/sec |
| Pro | 1,000 req/sec | 5,000 req/sec |
consume_rate_limit PL/pgSQL function). Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset headers. On 429 the response includes Retry-After (seconds). No Redis dependency.
Does Salty support webhooks for every object?
Yes. Every native CRUD operation fires an event:person.created,person.updated,person.deletedcompany.*,deal.*,note.*,task.*,activity.*custom_object_record.*schema.attribute_added,schema.attribute_modified,schema.attribute_deprecatedwebhook_endpoint.failed(meta-event when an endpoint deactivates)
subscribed_events: ["*"] or pass specific event names. No glob patterns in v1.
What MCP clients work with Salty?
Any MCP client supporting the Streamable HTTP transport with OAuth 2.1:- Claude Desktop — drop the config snippet in
~/Library/Application Support/Claude/claude_desktop_config.json(see MCP introduction) - Cursor — native MCP support
- ChatGPT — when MCP support lands publicly
- Custom clients built on
@modelcontextprotocol/sdk
mcp-remote as a stdio↔HTTP bridge. By default it runs the full OAuth dance and caches the token in ~/.mcp-auth; pass --header "Authorization:Bearer sk_live_…" to skip OAuth and authenticate with a long-lived API key instead. See MCP introduction → Adding Salty to Claude Desktop / Cursor for both config snippets. The MCP server returns server-level instructions on initialize so connected agents know Salty’s 15 tools and conventions without exploring — see the Agent guide.
Is Salty open source?
v1 ships as a hosted closed-source product. The TypeScript SDK (@salty/sdk) and CLI (salty-cli) are MIT-licensed. The core API + admin UI + MCP server source-availability decision is part of the v1.1 plan. The AGENTS.md operating manual that documents Salty’s MCP tool surface is already public — so any compatible CRM could implement Salty’s tool catalog.
Where is my data stored?
Production data lives in a managed Postgres database. Supabase handles auth (email/password, with Google/GitHub OAuth coming soon). All traffic is HTTPS. Data residency options will be available at v1.1.What’s Salty’s SLA?
v1 doesn’t ship with a contractual SLA. The status page at/status polls every 30 seconds and shows real uptime; we recommend that as the source of truth while v1 stabilizes. A contractual SLA (99.9% target) is part of the v1.1 plan once we’ve accumulated enough production runtime data to commit honestly.
Still have questions?
- Quickstart — 60 seconds, one prompt, your first record
- Use cases — concrete agent workflows
- REST vs MCP vs CLI — which one to call when
- Concepts — deep-dive on each surface