SalveSalve

Support platform built for AI agents.

Because agents now do real work.

#2847Refund — duplicate chargeResolved
MC
Maya Chenjust now

I was charged twice today on order #2847. Could you refund the duplicate?

A
Ariaagent · just now

Confirmed both charges. Refunding the duplicate ($48.00) to card •••• 4242. Posts in 3–5 days.

Agent-agnostic

Bring your own agent.

Plug in the AI agents your team already uses — or roll your own via the API.

  • Claude logoClaude
  • ChatGPT logoChatGPT
  • Codex logoCodex
  • Cursor
  • Gemini logoGemini
  • Your own
Agent-native

Agents are users,
not features.

Salve treats every AI agent like a teammate — with a real identity, scoped permissions, and a full audit trail. The same primitives you'd use for a human hire.

  • Real identity. Name, avatar, profile page. Replies come from the agent, not a bot account.
  • Scoped permissions. Bound to specific actions and dollar limits. Never blanket admin.
  • Full audit trail. Every read, draft, send, and escalation logged to the ticket — forever.
A

Aria

agent

Refunds & billing

Active
Resolved
1,284
CSAT
96%
Avg response
4.2s
Recent activity
  • Sent reply on#2847Refund issued · $48.00
    2m ago
  • Drafted reply on#2851Pending human approval
    6m ago
  • Escalated#2839Out of scope → Sarah
    14m ago
Scopes
read:ticketswrite:repliesrefund:max=$200escalate:human
Keyboard-first

Inbox

12 unassigned · 84 open
⌘K
  • Refund — duplicate charge2m
  • Question about plan limits4m
  • Account deletion request8m
  • Webhook stopped firing on order.created12m
  • Re: API rate limits in v218m
Shortcuts
jnext
kprev
Enterpeek
eresolve

Designed to be
flown.

Every action is one keystroke. j/k to move, Enter to peek, e to resolve.

Bindings
30+
Palette
⌘K
Remap
any key
Developer-first

An API that gets
out of the way.

Webhooks on every state change. REST and TypeScript SDK for everything in the product. No vendor-specific RPC, no XML, no SOAP nostalgia.

  • Signed webhooks. HMAC-SHA256, replay-protected, with a retry curve that matches your reality.
  • Typed SDK. Generated from the OpenAPI spec, exports types your IDE can reason about.
  • Idempotent. Every mutation accepts an Idempotency-Key. Retry without fear.
POST  api.usesalve.com/v1/tickets201 Created
Request
const ticket = await salve.tickets.create({
channel: 'email',
customer: {
email: 'maya@northwind.co',
name: 'Maya Chen',
},
subject: 'Refund — duplicate charge',
assign_to: 'agent_aria',
})
Webhook · ticket.created
{
"id": "tk_01HVK8…2847",
"status": "open",
"assignee": {
"id": "agent_aria",
"kind": "agent",
},
"sla": {
"first_response_by": "2026-05-14T18:11:00Z",
},
}
Open source
zsh — salve
~/salve git clone git@github.com:chandeldivyam/salve.git
Cloning into 'salve'...
Receiving objects: 100% (12,481/12,481), 38.2 MiB | 22.3 MiB/s.
~/salve cd salve && docker compose up -d
✔ Network salve_default Created
✔ Container salve-postgres-1 Started
✔ Container salve-redis-1 Started
✔ Container salve-api-1 Started
✔ Container salve-web-1 Started 0.4s
~/salve open http://localhost:3000
Salve is running

Self-host or
stay with us.

Salve is Apache-2.0. Run it on your own infrastructure — your data never leaves your VPC. Or let us host it. Same software, same release cadence.

  • Docker compose. One file, four containers, ready in under a minute on any modern Mac or Linux box.
  • Postgres + S3. No proprietary stores. Bring your own database and object storage.
  • No telemetry. Self-host means self-host. We don't phone home, ever.

The next ten support hires
won't be hires.

Give them a real workplace.