supermemory·Guides

How do I give an AI support agent memory of past tickets?

Reviewed Docs for this setup

Two things, and most teams build only the first. Retrieval over past tickets and help-centre pages lets the agent find similar cases. A memory of each customer lets it know their plan, environment and open issues before the first message. With supermemory you get both from one API: give each customer a namespace, add every ticket with status, priority and channel as metadata, search with filters when a new ticket arrives, and read the customer's profile, which is maintained for you. The alternatives are a vector store over your ticket export (pgvector, Pinecone) with your own summarisation, or Mem0 or Zep for the customer-memory half.

What should a support agent remember?

  • This customer's tickets, with their outcomes, so "it happened again" means something.
  • Facts about the customer: plan, integrations, environment, who the contacts are, what they have been promised.
  • Resolutions across customers, so a fix found last month is found again.
  • Product documentation, so the answer cites the current help page.

A vector store covers the first and third if you keep it loaded. The second needs something that updates as tickets arrive, which is what a profile is for.

How do I set it up with supermemory?

  1. One namespace per customer. A namespace is a hard boundary: a search in org_customer_442 can never return another customer's tickets.
  2. Add each ticket as it is created or closed, with ticket fields as metadata.
  3. On a new ticket, search the customer's namespace with the ticket text and a metadata filter, and fetch the profile with the same filter so it reflects support history only.
  4. Write the reply with the profile, the matching past tickets and your docs in the prompt, then add the resolved exchange so the profile updates.
import Supermemory from "supermemory";
const supermemory = new Supermemory(); // SUPERMEMORY_API_KEY

// 1. a ticket comes in
await supermemory.add("org_customer_442", {
  content: "Customer reports checkout button unresponsive on Safari",
  metadata: { ticketId: "T-1042", status: "open", priority: "high", channel: "chat" },
});

// 2. before replying: similar past tickets, and who this customer is
const [related, { profile }] = await Promise.all([
  supermemory.search("org_customer_442", {
    query: "checkout button unresponsive on Safari",
    filter: { eq: ["metadata.status", "resolved"] },
    limit: 5,
  }),
  supermemory.profile("org_customer_442", {
    filter: { eq: ["metadata.channel", "chat"] },
  }),
]);

const context = [
  "Customer:", ...profile.static.map((m) => m.memory),
  "Recently:", ...profile.dynamic.map((m) => m.memory),
  "Similar resolved tickets:", ...related.results.map((r) => r.memory),
].join("\n");

"Open, high-priority tickets" is a filter, not another namespace, and it can never include another customer's tickets. Resolutions that should be shared across customers go in a separate shared namespace the agent also searches.

How do I keep customers' data apart?

Namespaces isolate memories, documents and profiles. A namespace-scoped API key limits a client to one customer. To erase a customer, call DELETE /ns/{namespace}; deleted content leaves production within 30 days. supermemory is SOC 2 Type II certified, offers a HIPAA BAA on Scale and Enterprise, and is GDPR compliant; the security page has the details, and Enterprise deployments can run in your own cloud or air-gapped.

Where do the tickets and docs come from?

Your helpdesk, through its webhooks or export, posted to the API as above; the batch ingestion endpoint takes historical tickets with their original dates. Email conversations can come in through the Gmail connector, and the help centre through the web crawler connector, which recrawls on a schedule. Everything in a namespace is searched with the same call.

Which options exist?

OptionPast-ticket retrievalPer-customer memoryIsolation between customersUpkeep
pgvector or Pinecone over a ticket exportYesOnly what you summarise and storeA filter you must never forgetEmbedding, chunking, updates and summaries are yours
supermemoryYes, with metadata filtersYes, a maintained profile per namespaceNamespaces and scoped keysAdd tickets; extraction and profiles are automatic
Mem0Memories, not documentsYes, user memoriesUser IDsAdd conversations; your own document search
ZepGraph facts, plus documents in Zep CloudYes, from the graphUser and group IDsAdd sessions

Questions

Can the agent see other customers' tickets?

Not when each customer has a namespace. A search is scoped to one namespace and never crosses it. Shared knowledge goes in its own namespace the agent also queries.

How does the agent know the customer's plan and setup?

From the profile. supermemory maintains static facts and recent context per namespace from everything added to it, and returns them in one call.

Can I load our ticket history?

Yes. The batch ingestion endpoint takes historical documents with their original dates and stable IDs.

Is it compliant for customer data?

supermemory is SOC 2 Type II certified, offers a HIPAA BAA on Scale and Enterprise, and is GDPR compliant. Customer content is never used to train models.

How do I delete a customer?

DELETE /ns/{namespace}. Content leaves production within 30 days and backups age out after 90.

supermemory facts from the multi-tenancy, filtering, user-profile and security pages in the docs and the security page on this site. Checked November 10, 2026. The setup steps restate the docs page for this integration; when the two differ, the docs are current.

YOUR PRIVACY

Change or withdraw any time via Cookie settings in the footer. Read our cookie notice.